From patchwork Mon Dec 17 17:55:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yordan Karadzhov X-Patchwork-Id: 10760195 Return-Path: Received: from mail-eopbgr700052.outbound.protection.outlook.com ([40.107.70.52]:10656 "EHLO NAM04-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726801AbeLQR4D (ORCPT ); Mon, 17 Dec 2018 12:56:03 -0500 From: Yordan Karadzhov To: "rostedt@goodmis.org" CC: "linux-trace-devel@vger.kernel.org" Subject: [PATCH 1/3] kernel-shark-qt: Improve the KsQuickContextMenu Date: Mon, 17 Dec 2018 17:55:59 +0000 Message-ID: <20181217175516.2944-1-ykaradzhov@vmware.com> Content-Language: en-US MIME-Version: 1.0 Sender: linux-trace-devel-owner@vger.kernel.org List-ID: Content-Length: 3976 In this patch the KsQuickContextMenu gets upgraded according to the user feedback, received from Steven. First of all a "Show CPU X only" action is added to the version of the menu that gets opened from the Table widget. In addition to this "Apply filter to XX" check-boxes are added in order to control the visibility of the filtered data. Signed-off-by: Yordan Karadzhov --- kernel-shark-qt/src/KsQuickContextMenu.cpp | 45 ++++++++++++++++++++++ kernel-shark-qt/src/KsQuickContextMenu.hpp | 6 ++- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/kernel-shark-qt/src/KsQuickContextMenu.cpp b/kernel-shark-qt/src/KsQuickContextMenu.cpp index 815e4b9..6c9c9ef 100644 --- a/kernel-shark-qt/src/KsQuickContextMenu.cpp +++ b/kernel-shark-qt/src/KsQuickContextMenu.cpp @@ -50,11 +50,14 @@ KsQuickContextMenu::KsQuickContextMenu(KsDataStore *data, size_t row, : KsQuickMarkerMenu(dm, parent), _data(data), _row(row), + _graphSyncCBox(nullptr), + _listSyncCBox(nullptr), _hideTaskAction(this), _showTaskAction(this), _hideEventAction(this), _showEventAction(this), _hideCPUAction(this), + _showCPUAction(this), _addCPUPlotAction(this), _addTaskPlotAction(this), _removeCPUPlotAction(this), @@ -85,6 +88,37 @@ KsQuickContextMenu::KsQuickContextMenu(KsDataStore *data, size_t row, parentName = parent->metaObject()->className(); addSection("Pointer menu"); + + if (parentName == "KsTraceViewer") { + _graphSyncCBox = + KsUtils::addCheckBoxToMenu(this, "Apply filters to Graph"); + + connect(_graphSyncCBox, &QCheckBox::stateChanged, + &KsUtils::graphFilterSync); + + /* + * By defauls the filters will be append to the List (Table) + * only. + */ + KsUtils::listFilterSync(true); + KsUtils::graphFilterSync(false); + _graphSyncCBox->setChecked(false); + } + + if (parentName == "KsTraceGraph" && + (graphs = dynamic_cast(parent))) { + _listSyncCBox = + KsUtils::addCheckBoxToMenu(this, "Apply filters to List"); + + connect(_listSyncCBox, &QCheckBox::stateChanged, + &KsUtils::listFilterSync); + + /* By defauls the filters will be append to the Graph only. */ + KsUtils::graphFilterSync(true); + KsUtils::listFilterSync(false); + _listSyncCBox->setChecked(false); + } + descr = "Hide task ["; descr += taskName; descr += "-"; @@ -113,6 +147,9 @@ KsQuickContextMenu::KsQuickContextMenu(KsDataStore *data, size_t row, lamAddAction(&_hideCPUAction, &KsQuickContextMenu::_hideCPU); if (parentName == "KsTraceViewer") { + descr = QString("Show CPU [%1] only").arg(cpu); + lamAddAction(&_showCPUAction, &KsQuickContextMenu::_showCPU); + descr = "Add ["; descr += taskName; descr += "-"; @@ -198,6 +235,13 @@ void KsQuickContextMenu::_showEvent() _data->applyPosEventFilter(QVector(1, eventId)); } +void KsQuickContextMenu::_showCPU() +{ + int cpu = _data->rows()[_row]->cpu; + + _data->applyPosCPUFilter(QVector(1, cpu)); +} + void KsQuickContextMenu::_hideCPU() { kshark_context *kshark_ctx(nullptr); @@ -208,6 +252,7 @@ void KsQuickContextMenu::_hideCPU() vec =_getFilterVector(kshark_ctx->hide_cpu_filter, _data->rows()[_row]->cpu); + _data->applyNegCPUFilter(vec); } diff --git a/kernel-shark-qt/src/KsQuickContextMenu.hpp b/kernel-shark-qt/src/KsQuickContextMenu.hpp index 6ca1b08..f5a2a78 100644 --- a/kernel-shark-qt/src/KsQuickContextMenu.hpp +++ b/kernel-shark-qt/src/KsQuickContextMenu.hpp @@ -71,6 +71,8 @@ private: void _showEvent(); + void _showCPU(); + void _hideCPU(); void _addCPUPlot(); @@ -87,11 +89,13 @@ private: size_t _row; + QCheckBox *_graphSyncCBox, *_listSyncCBox; + QAction _hideTaskAction, _showTaskAction; QAction _hideEventAction, _showEventAction; - QAction _hideCPUAction; + QAction _hideCPUAction, _showCPUAction; QAction _addCPUPlotAction; From patchwork Mon Dec 17 17:56:01 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yordan Karadzhov X-Patchwork-Id: 10760197 Return-Path: Received: from mail-eopbgr700052.outbound.protection.outlook.com ([40.107.70.52]:10656 "EHLO NAM04-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727468AbeLQR4F (ORCPT ); Mon, 17 Dec 2018 12:56:05 -0500 From: Yordan Karadzhov To: "rostedt@goodmis.org" CC: "linux-trace-devel@vger.kernel.org" Subject: [PATCH 2/3] kernel-shark-qt: Better positioning of the Quick Context menu. Date: Mon, 17 Dec 2018 17:56:01 +0000 Message-ID: <20181217175516.2944-2-ykaradzhov@vmware.com> References: <20181217175516.2944-1-ykaradzhov@vmware.com> In-Reply-To: <20181217175516.2944-1-ykaradzhov@vmware.com> Content-Language: en-US MIME-Version: 1.0 Sender: linux-trace-devel-owner@vger.kernel.org List-ID: Content-Length: 3420 So far I wrongly assumed that the coordinates of the point provided by the customContextMenuRequested signal are given in the reference frame of the parent widget (KsTraceGraph or KsTraceViewer). In fact the signal is emitted by the child widget (KsGLWidget or KsTableView) and the coordinates are given in the reference frame of the child. This patch provides a proper positioning of the menu. Reported-by: Steven Rostedt (VMware) Signed-off-by: Yordan Karadzhov --- kernel-shark-qt/src/KsTraceGraph.cpp | 13 ++++++++----- kernel-shark-qt/src/KsTraceViewer.cpp | 13 +++++++++++-- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/kernel-shark-qt/src/KsTraceGraph.cpp b/kernel-shark-qt/src/KsTraceGraph.cpp index 858930c..5144f61 100644 --- a/kernel-shark-qt/src/KsTraceGraph.cpp +++ b/kernel-shark-qt/src/KsTraceGraph.cpp @@ -136,7 +136,7 @@ KsTraceGraph::KsTraceGraph(QWidget *parent) this, &KsTraceGraph::_updateTimeLegends); _glWindow.setContextMenuPolicy(Qt::CustomContextMenu); - connect(&_glWindow, &QTableView::customContextMenuRequested, + connect(&_glWindow, &QWidget::customContextMenuRequested, this, &KsTraceGraph::_onCustomContextMenu); _scrollArea.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); @@ -782,12 +782,15 @@ void KsTraceGraph::_onCustomContextMenu(const QPoint &point) connect(menu, &KsQuickMarkerMenu::deselect, this, &KsTraceGraph::deselect); - QPoint global = mapToGlobal(point); /* - * The global coordinates have to be corrected for the offset - * of the vertical scrollbar. + * Note that this slot was connected to the + * customContextMenuRequested signal of the OpenGL widget. + * Because of this the coordinates of the point are given with + * respect to the frame of this widget. */ - global.ry() -= _scrollArea.verticalScrollBar()->value(); + QPoint global = _glWindow.mapToGlobal(point); + global.ry() -= menu->sizeHint().height() / 2; + menu->exec(global); } } diff --git a/kernel-shark-qt/src/KsTraceViewer.cpp b/kernel-shark-qt/src/KsTraceViewer.cpp index 971793f..09f6a1e 100644 --- a/kernel-shark-qt/src/KsTraceViewer.cpp +++ b/kernel-shark-qt/src/KsTraceViewer.cpp @@ -150,7 +150,7 @@ KsTraceViewer::KsTraceViewer(QWidget *parent) this, &KsTraceViewer::_searchReset); _view.setContextMenuPolicy(Qt::CustomContextMenu); - connect(&_view, &QTableView::customContextMenuRequested, + connect(&_view, &QWidget::customContextMenuRequested, this, &KsTraceViewer::_onCustomContextMenu); connect(&_view, &QTableView::clicked, @@ -263,13 +263,22 @@ void KsTraceViewer::_onCustomContextMenu(const QPoint &point) size_t row = _proxyModel.mapRowFromSource(i.row()); KsQuickContextMenu menu(_data, row, _mState, this); + /* + * Note that this slot was connected to the + * customContextMenuRequested signal of the Table widget. + * Because of this the coordinates of the point are given with + * respect to the frame of this widget. + */ + QPoint global = _view.mapToGlobal(point); + global.ry() -= menu.sizeHint().height() / 2; + connect(&menu, &KsQuickContextMenu::addTaskPlot, this, &KsTraceViewer::addTaskPlot); connect(&menu, &KsQuickMarkerMenu::deselect, this, &KsTraceViewer::deselect); - menu.exec(mapToGlobal(point)); + menu.exec(global); } } From patchwork Mon Dec 17 17:56:02 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yordan Karadzhov X-Patchwork-Id: 10760199 Return-Path: Received: from mail-eopbgr700052.outbound.protection.outlook.com ([40.107.70.52]:10656 "EHLO NAM04-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726801AbeLQR4G (ORCPT ); Mon, 17 Dec 2018 12:56:06 -0500 From: Yordan Karadzhov To: "rostedt@goodmis.org" CC: "linux-trace-devel@vger.kernel.org" Subject: [PATCH 3/3] kernel-shark-qt: Make the Quick Contex menu less touchy Date: Mon, 17 Dec 2018 17:56:02 +0000 Message-ID: <20181217175516.2944-3-ykaradzhov@vmware.com> References: <20181217175516.2944-1-ykaradzhov@vmware.com> In-Reply-To: <20181217175516.2944-1-ykaradzhov@vmware.com> Content-Language: en-US MIME-Version: 1.0 Sender: linux-trace-devel-owner@vger.kernel.org List-ID: Content-Length: 1763 The menu is shifted just a bit so that it is not positioned under the mouse. This will prevent from an accidental selection of the menu item under the mouse. Reported-by: Steven Rostedt (VMware) Signed-off-by: Yordan Karadzhov --- kernel-shark-qt/src/KsTraceGraph.cpp | 7 +++++++ kernel-shark-qt/src/KsTraceViewer.cpp | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/kernel-shark-qt/src/KsTraceGraph.cpp b/kernel-shark-qt/src/KsTraceGraph.cpp index 5144f61..462918f 100644 --- a/kernel-shark-qt/src/KsTraceGraph.cpp +++ b/kernel-shark-qt/src/KsTraceGraph.cpp @@ -791,6 +791,13 @@ void KsTraceGraph::_onCustomContextMenu(const QPoint &point) QPoint global = _glWindow.mapToGlobal(point); global.ry() -= menu->sizeHint().height() / 2; + /* + * Shift the menu so that it is not positioned under the mouse. + * This will prevent from an accidental selection of the menu + * item under the mouse. + */ + global.rx() += FONT_WIDTH; + menu->exec(global); } } diff --git a/kernel-shark-qt/src/KsTraceViewer.cpp b/kernel-shark-qt/src/KsTraceViewer.cpp index 09f6a1e..d64c2af 100644 --- a/kernel-shark-qt/src/KsTraceViewer.cpp +++ b/kernel-shark-qt/src/KsTraceViewer.cpp @@ -272,6 +272,13 @@ void KsTraceViewer::_onCustomContextMenu(const QPoint &point) QPoint global = _view.mapToGlobal(point); global.ry() -= menu.sizeHint().height() / 2; + /* + * Shift the menu so that it is not positioned under the mouse. + * This will prevent from an accidental selection of the menu + * item under the mouse. + */ + global.rx() += FONT_WIDTH; + connect(&menu, &KsQuickContextMenu::addTaskPlot, this, &KsTraceViewer::addTaskPlot);