aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYordan Karadzhov <ykaradzhov@vmware.com>2019-02-14 16:04:51 +0200
committerSteven Rostedt (VMware) <rostedt@goodmis.org>2019-02-14 12:22:52 -0500
commit1b2ab1e0290efc48e596fd261b3c5d16ed55ecdf (patch)
tree39a6a82f5265391b573980aca95c8cb92d25105c
parent1784290dba09e2606775d6a73bafdd2c4e16cd5a (diff)
downloadtrace-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.cpp9
-rw-r--r--kernel-shark/src/KsGLWidget.hpp2
-rw-r--r--kernel-shark/src/KsTraceGraph.cpp6
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("");