diff options
author | Yordan Karadzhov <ykaradzhov@vmware.com> | 2019-02-14 16:04:51 +0200 |
---|---|---|
committer | Steven Rostedt (VMware) <rostedt@goodmis.org> | 2019-02-14 12:22:52 -0500 |
commit | 1b2ab1e0290efc48e596fd261b3c5d16ed55ecdf (patch) | |
tree | 39a6a82f5265391b573980aca95c8cb92d25105c | |
parent | 1784290dba09e2606775d6a73bafdd2c4e16cd5a (diff) | |
download | trace-cmd-1b2ab1e0290efc48e596fd261b3c5d16ed55ecdf.tar.gz |
kernel-shark: Implement proper reser for the OpenGL widget
When loading a new trace.dat file the OpenGL widget has to be properly
reset. One important operation of this reset is to set the "_data"
pointer to NULL. This will block all attempts for drawing something
before the widget is set again. The bug was introduced in
7d057ae56 ("kernel-shark-qt: Add Trace Graph widget")
but had no effect until
94efea960 ("kernel-shark-qt: Handle the case when the range of ...")
because the number of bins of the model was zero, so nothing was plotted
anyway.
Link: http://lore.kernel.org/linux-trace-devel/20190214140451.827-1-ykaradzhov@vmware.com
Reported-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Tested-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Fixes: 7d057ae56 ("kernel-shark-qt: Add Trace Graph widget")
Signed-off-by: Yordan Karadzhov <ykaradzhov@vmware.com>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
-rw-r--r-- | kernel-shark/src/KsGLWidget.cpp | 9 | ||||
-rw-r--r-- | kernel-shark/src/KsGLWidget.hpp | 2 | ||||
-rw-r--r-- | kernel-shark/src/KsTraceGraph.cpp | 6 |
3 files changed, 13 insertions, 4 deletions
diff --git a/kernel-shark/src/KsGLWidget.cpp b/kernel-shark/src/KsGLWidget.cpp index 917e86d7..7a050c21 100644 --- a/kernel-shark/src/KsGLWidget.cpp +++ b/kernel-shark/src/KsGLWidget.cpp @@ -109,6 +109,15 @@ void KsGLWidget::paintGL() _mState->activeMarker().draw(); } +/** Reset (empty) the widget. */ +void KsGLWidget::reset() +{ + _cpuList = {}; + _taskList = {}; + _data = nullptr; + _model.reset(); +} + /** Reimplemented event handler used to receive mouse press events. */ void KsGLWidget::mousePressEvent(QMouseEvent *event) { diff --git a/kernel-shark/src/KsGLWidget.hpp b/kernel-shark/src/KsGLWidget.hpp index 6fbf5340..95f307ba 100644 --- a/kernel-shark/src/KsGLWidget.hpp +++ b/kernel-shark/src/KsGLWidget.hpp @@ -37,6 +37,8 @@ public: void paintGL() override; + void reset(); + void mousePressEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); diff --git a/kernel-shark/src/KsTraceGraph.cpp b/kernel-shark/src/KsTraceGraph.cpp index 844c7949..6087e96d 100644 --- a/kernel-shark/src/KsTraceGraph.cpp +++ b/kernel-shark/src/KsTraceGraph.cpp @@ -201,15 +201,13 @@ void KsTraceGraph::setMarkerSM(KsDualMarkerSM *m) /** Reset (empty) the widget. */ void KsTraceGraph::reset() { - /* Clear the all graph lists and update. */ - _glWindow._cpuList = {}; - _glWindow._taskList = {}; + /* Reset (empty) the OpenGL widget. */ + _glWindow.reset(); _labelP2.setText(""); for (auto l1: {&_labelI1, &_labelI2, &_labelI3, &_labelI4, &_labelI5}) l1->setText(""); - _glWindow.model()->reset(); _selfUpdate(); for (auto l2: {&_labelXMin, &_labelXMid, &_labelXMax}) l2->setText(""); |