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 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". 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; } -- 2.26.2