aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYordan Karadzhov (VMware) <y.karadz@gmail.com>2021-05-17 17:21:35 +0300
committerYordan Karadzhov (VMware) <y.karadz@gmail.com>2021-05-18 10:52:15 +0300
commit6e7b17ed93108e86e261cc5a4222d673edf92daf (patch)
treecb137a8b6e129098584ad86a00ffdc7caad33ea3
parent54515fee9f57120d68c305881561e8657e7e2c64 (diff)
downloadkernel-shark-6e7b17ed93108e86e261cc5a4222d673edf92daf.tar.gz
kernel-shark: Preserve open graphs when appending data
If the user has already made some selection of graphs to be displayed by the GUI, those particular graphs are likely to be important for him, so it is better to keep this configuration after the data file is appended. The opposite can be annoying for the user. Link: https://lore.kernel.org/linux-trace-devel/20210517142140.286153-3-y.karadz@gmail.com Signed-off-by: Yordan Karadzhov (VMware) <y.karadz@gmail.com>
-rw-r--r--src/KsGLWidget.cpp40
-rw-r--r--src/KsGLWidget.hpp4
-rw-r--r--src/KsMainWindow.cpp10
-rw-r--r--src/KsTraceGraph.cpp10
-rw-r--r--src/KsTraceGraph.hpp2
-rw-r--r--src/KsUtils.cpp1
6 files changed, 45 insertions, 22 deletions
diff --git a/src/KsGLWidget.cpp b/src/KsGLWidget.cpp
index 9f8e43b4..8aab7b3c 100644
--- a/src/KsGLWidget.cpp
+++ b/src/KsGLWidget.cpp
@@ -409,25 +409,12 @@ void KsGLWidget::keyReleaseEvent(QKeyEvent *event)
*/
#define KS_MAX_START_PLOTS 16
-/**
- * @brief Load and show trace data.
- *
- * @param data: Input location for the KsDataStore object.
- * KsDataStore::loadDataFile() must be called first.
- */
-void KsGLWidget::loadData(KsDataStore *data)
+void KsGLWidget::_defaultPlots(kshark_context *kshark_ctx)
{
- kshark_context *kshark_ctx(nullptr);
QVector<int> streamIds, plotVec;
uint64_t tMin, tMax;
int nCPUs, nBins;
- if (!kshark_instance(&kshark_ctx) || !kshark_ctx->n_streams)
- return;
-
- loadColors();
-
- _data = data;
_model.reset();
_streamPlots.clear();
@@ -463,6 +450,31 @@ void KsGLWidget::loadData(KsDataStore *data)
tMin = _data->rows()[0]->ts;
tMax = _data->rows()[_data->size() - 1]->ts;
ksmodel_set_bining(_model.histo(), nBins, tMin, tMax);
+}
+
+/**
+ * @brief Load and show trace data.
+ *
+ * @param data: Input location for the KsDataStore object.
+ * KsDataStore::loadDataFile() must be called first.
+ * @param resetPlots: If true, all existing graphs are closed
+ * and a default configuration of graphs is displayed
+ * (all CPU plots). If false, the current set of graphs
+ * is preserved.
+ */
+void KsGLWidget::loadData(KsDataStore *data, bool resetPlots)
+{
+ kshark_context *kshark_ctx(nullptr);
+
+ if (!kshark_instance(&kshark_ctx) || !kshark_ctx->n_streams)
+ return;
+
+ loadColors();
+
+ _data = data;
+ if (resetPlots)
+ _defaultPlots(kshark_ctx);
+
_model.fill(_data);
}
diff --git a/src/KsGLWidget.hpp b/src/KsGLWidget.hpp
index 629ae379..6a72a35c 100644
--- a/src/KsGLWidget.hpp
+++ b/src/KsGLWidget.hpp
@@ -101,7 +101,7 @@ public:
void keyReleaseEvent(QKeyEvent *event);
- void loadData(KsDataStore *data);
+ void loadData(KsDataStore *data, bool resetPlots);
void loadColors();
@@ -326,6 +326,8 @@ private:
int _getLastCPU(struct kshark_trace_histo *histo,
int bin, int sd, int pid);
+ void _defaultPlots(kshark_context *kshark_ctx);
+
void _deselect();
int _bin0Offset() {return _labelSize + 2 * _hMargin;}
diff --git a/src/KsMainWindow.cpp b/src/KsMainWindow.cpp
index fa893ce2..da1c0af4 100644
--- a/src/KsMainWindow.cpp
+++ b/src/KsMainWindow.cpp
@@ -1283,7 +1283,8 @@ void KsMainWindow::_load(const QString& fileName, bool append)
QApplication::processEvents();
_view.reset();
- _graph.reset();
+ if (!append)
+ _graph.reset();
auto lamLoadJob = [&, this] () {
QVector<kshark_dpi *> v;
@@ -1333,7 +1334,10 @@ void KsMainWindow::_load(const QString& fileName, bool append)
_view.loadData(&_data);
pb.setValue(175);
- _graph.loadData(&_data);
+ _graph.loadData(&_data, !append);
+ if (append)
+ _graph.cpuReDraw(sd, KsUtils::getCPUList(sd));
+
pb.setValue(195);
}
@@ -1454,7 +1458,7 @@ void KsMainWindow::loadSession(const QString &fileName)
_view.loadData(&_data);
pb.setValue(155);
- _graph.loadData(&_data);
+ _graph.loadData(&_data, true);
_filterSyncCBoxUpdate(kshark_ctx);
pb.setValue(175);
diff --git a/src/KsTraceGraph.cpp b/src/KsTraceGraph.cpp
index 1e976dfa..65e5a796 100644
--- a/src/KsTraceGraph.cpp
+++ b/src/KsTraceGraph.cpp
@@ -148,12 +148,16 @@ KsTraceGraph::KsTraceGraph(QWidget *parent)
* @brief Load and show trace data.
*
* @param data: Input location for the KsDataStore object.
- * KsDataStore::loadDataFile() must be called first.
+ * KsDataStore::loadDataFile() must be called first.
+ * @param resetPlots: If true, all existing graphs are closed
+ * and a default configuration of graphs is displayed
+ * (all CPU plots). If false, the current set of graphs
+ * is preserved.
*/
-void KsTraceGraph::loadData(KsDataStore *data)
+void KsTraceGraph::loadData(KsDataStore *data, bool resetPlots)
{
_data = data;
- _glWindow.loadData(data);
+ _glWindow.loadData(data, resetPlots);
updateGeom();
}
diff --git a/src/KsTraceGraph.hpp b/src/KsTraceGraph.hpp
index 6e83f21e..b1132e03 100644
--- a/src/KsTraceGraph.hpp
+++ b/src/KsTraceGraph.hpp
@@ -45,7 +45,7 @@ class KsTraceGraph : public KsWidgetsLib::KsDataWidget
public:
explicit KsTraceGraph(QWidget *parent = nullptr);
- void loadData(KsDataStore *data);
+ void loadData(KsDataStore *data, bool resetPlots);
void setMarkerSM(KsDualMarkerSM *m);
diff --git a/src/KsUtils.cpp b/src/KsUtils.cpp
index ec532674..757f49c3 100644
--- a/src/KsUtils.cpp
+++ b/src/KsUtils.cpp
@@ -785,6 +785,7 @@ int KsDataStore::appendDataFile(const QString &file, int64_t offset)
_rows = mergedRows;
registerCPUCollections();
+ emit updateWidgets(this);
return sd;
}