On Mon, 27 Jul 2020 10:18:19 +0300 "Tzvetomir Stoyanov (VMware)" <tz.stoyanov@xxxxxxxxx> wrote: > From: Tzvetomir (VMware) Stoyanov <tz.stoyanov@xxxxxxxxx> > > There are use cases when multiple streams can be loaded from a single > file. Ftrace instances are such example. In these cases file name could > not be used to identify the streams. A new member 'name' is added to the > 'struct kshark_data_stream', used to identify the streams by the user. > By default name is equal to the file name, in cases where there is onle s/onle/only/ > one stream in the file the behaviour is not changed. When there are > multiple streams in a single file, the name is formed as > "file name:stream name". Reviewed-by: Steven Rostedt (VMware) <rostedt@xxxxxxxxxx> -- Steve > > Signed-off-by: Tzvetomir (VMware) Stoyanov <tz.stoyanov@xxxxxxxxx> > --- > src/KsAdvFilteringDialog.cpp | 2 +- > src/KsWidgetsLib.cpp | 6 +++--- > src/libkshark-plugin.c | 2 +- > src/libkshark.c | 2 ++ > src/libkshark.h | 3 +++ > src/plugins/KVMCombo.cpp | 4 ++-- > src/plugins/event_field_plot.c | 2 +- > src/plugins/latency_plot.c | 4 ++-- > 8 files changed, 15 insertions(+), 10 deletions(-) > > diff --git a/src/KsAdvFilteringDialog.cpp b/src/KsAdvFilteringDialog.cpp > index 64c4cec..6979903 100644 > --- a/src/KsAdvFilteringDialog.cpp > +++ b/src/KsAdvFilteringDialog.cpp > @@ -236,7 +236,7 @@ void KsAdvFilteringDialog::_getFtraceStreams(kshark_context *kshark_ctx) > for (int i = 0; i < kshark_ctx->n_streams; ++i) { > stream = kshark_ctx->stream[streamIds[i]]; > if (stream->format == KS_TEP_DATA) > - _streamComboBox.addItem(QString(stream->file), > + _streamComboBox.addItem(QString(stream->name), > streamIds[i]); > } > > diff --git a/src/KsWidgetsLib.cpp b/src/KsWidgetsLib.cpp > index e487eb8..f006a13 100644 > --- a/src/KsWidgetsLib.cpp > +++ b/src/KsWidgetsLib.cpp > @@ -325,7 +325,7 @@ void KsCheckBoxWidget::_setStream(uint8_t sd) > if (!stream) > return; > > - _streamName = QString(stream->file); > + _streamName = QString(stream->name); > > KsUtils::setElidedText(&_stramLabel, _streamName, > Qt::ElideLeft, width()); > @@ -1148,7 +1148,7 @@ KsDStreamCheckBoxWidget::KsDStreamCheckBoxWidget(QWidget *parent) > > for (int i = 0; i < nStreams; ++i) { > stream = kshark_ctx->stream[streamIds[i]]; > - QString name(stream->file); > + QString name(stream->name); > if (name < 40) { > nameItem = new QTableWidgetItem(name); > } else { > @@ -1235,7 +1235,7 @@ void KsEventFieldSelectWidget::setStreamCombo() > sd = streamIds[i]; > stream = kshark_ctx->stream[sd]; > if (_streamComboBox.findData(sd) < 0) > - _streamComboBox.addItem(QString(stream->file), sd); > + _streamComboBox.addItem(QString(stream->name), sd); > } > free(streamIds); > } > diff --git a/src/libkshark-plugin.c b/src/libkshark-plugin.c > index d341fea..583ea42 100644 > --- a/src/libkshark-plugin.c > +++ b/src/libkshark-plugin.c > @@ -584,7 +584,7 @@ static void plugin_init(struct kshark_data_stream *stream, > fprintf(stderr, > "plugin \"%s\" failed to initialize on stream %s\n", > plugin->interface->name, > - stream->file); > + stream->name); > > plugin->status |= KSHARK_PLUGIN_FAILED; > plugin->status &= ~KSHARK_PLUGIN_LOADED; > diff --git a/src/libkshark.c b/src/libkshark.c > index 7013d66..375874d 100644 > --- a/src/libkshark.c > +++ b/src/libkshark.c > @@ -137,6 +137,7 @@ static void kshark_stream_free(struct kshark_data_stream *stream) > > free(stream->calib_array); > free(stream->file); > + free(stream->name); > free(stream); > } > > @@ -255,6 +256,7 @@ int kshark_stream_open(struct kshark_data_stream *stream, const char *file) > return -EAGAIN; > > stream->file = strdup(file); > + stream->name = strdup(file); > set_format(kshark_ctx, stream, file); > > switch (stream->format) { > diff --git a/src/libkshark.h b/src/libkshark.h > index 0b9053d..44bec79 100644 > --- a/src/libkshark.h > +++ b/src/libkshark.h > @@ -238,6 +238,9 @@ struct kshark_data_stream { > /** Trace data file pathname. */ > char *file; > > + /** Stream name. */ > + char *name; > + > /** System clock calibration function. */ > time_calib_func calib; > > diff --git a/src/plugins/KVMCombo.cpp b/src/plugins/KVMCombo.cpp > index 9b9d7a0..ceb1f47 100644 > --- a/src/plugins/KVMCombo.cpp > +++ b/src/plugins/KVMCombo.cpp > @@ -250,7 +250,7 @@ void KsComboPlotDialog::update() > _guestMapCount = ret; > > KsUtils::setElidedText(&_hostFileLabel, > - kshark_ctx->stream[_guestMap[0].host_id]->file, > + kshark_ctx->stream[_guestMap[0].host_id]->name, > Qt::ElideLeft, LABEL_WIDTH); > > _guestStreamComboBox.clear(); > @@ -260,7 +260,7 @@ void KsComboPlotDialog::update() > if (sd >= kshark_ctx->n_streams) > continue; > > - _guestStreamComboBox.addItem(kshark_ctx->stream[sd]->file, sd); > + _guestStreamComboBox.addItem(kshark_ctx->stream[sd]->name, sd); > color << colTable[sd]; > _guestStreamComboBox.setItemData(i, QBrush(color), > Qt::BackgroundRole); > diff --git a/src/plugins/event_field_plot.c b/src/plugins/event_field_plot.c > index fcc2a19..3c61cbf 100644 > --- a/src/plugins/event_field_plot.c > +++ b/src/plugins/event_field_plot.c > @@ -72,7 +72,7 @@ plugin_efp_init_context(struct kshark_data_stream *stream) > > if (plugin_ctx->event_id < 0) { > fprintf(stderr, "Event %s not found in stream %s\n", > - plugin_ctx->event_name, stream->file); > + plugin_ctx->event_name, stream->name); > goto fail; > } > > diff --git a/src/plugins/latency_plot.c b/src/plugins/latency_plot.c > index bcd27f6..e2238e4 100644 > --- a/src/plugins/latency_plot.c > +++ b/src/plugins/latency_plot.c > @@ -75,7 +75,7 @@ plugin_latency_init_context(struct kshark_data_stream *stream) > stream->interface.find_event_id(stream, plugin_ctx->event_name[0]); > if (plugin_ctx->event_id[0] < 0) { > fprintf(stderr, "Event %s not found in stream %s\n", > - plugin_ctx->event_name[0], stream->file); > + plugin_ctx->event_name[0], stream->name); > goto fail; > } > > @@ -83,7 +83,7 @@ plugin_latency_init_context(struct kshark_data_stream *stream) > stream->interface.find_event_id(stream, plugin_ctx->event_name[1]); > if (plugin_ctx->event_id[1] < 0) { > fprintf(stderr, "Event %s not found in stream %s\n", > - plugin_ctx->event_name[1], stream->file); > + plugin_ctx->event_name[1], stream->name); > goto fail; > } >