From patchwork Fri Jan 4 19:57:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yordan Karadzhov X-Patchwork-Id: 10760211 Return-Path: Received: from mail-eopbgr790047.outbound.protection.outlook.com ([40.107.79.47]:5504 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725930AbfADT5y (ORCPT ); Fri, 4 Jan 2019 14:57:54 -0500 From: Yordan Karadzhov To: "rostedt@goodmis.org" CC: "linux-trace-devel@vger.kernel.org" Subject: [PATCH 1/4] kernel-shark-qt: Rearrange the "Filter" top menu Date: Fri, 4 Jan 2019 19:57:51 +0000 Message-ID: <20190104195726.24264-1-ykaradzhov@vmware.com> Content-Language: en-US MIME-Version: 1.0 Sender: linux-trace-devel-owner@vger.kernel.org List-ID: Content-Length: 3216 The "Filter" top menu contains only "Show Task" and "Show CPU" menu actions ("Hide" versions are removed). The code that adds the "Hide" actions is only commented out, because we may change our opinion in the future. Signed-off-by: Yordan Karadzhov --- kernel-shark-qt/src/KsMainWindow.cpp | 42 ++++++++++++++++++++++++++-- kernel-shark-qt/src/KsMainWindow.hpp | 4 +++ 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/kernel-shark-qt/src/KsMainWindow.cpp b/kernel-shark-qt/src/KsMainWindow.cpp index a375126..3eb3692 100644 --- a/kernel-shark-qt/src/KsMainWindow.cpp +++ b/kernel-shark-qt/src/KsMainWindow.cpp @@ -54,6 +54,7 @@ KsMainWindow::KsMainWindow(QWidget *parent) _showEventsAction("Show events", this), _showTasksAction("Show tasks", this), _hideTasksAction("Hide tasks", this), + _showCPUsAction("Show CPUs", this), _hideCPUsAction("Hide CPUs", this), _advanceFilterAction("Advance Filtering", this), _clearAllFilters("Clear all filters", this), @@ -208,6 +209,9 @@ void KsMainWindow::_createActions() connect(&_hideTasksAction, &QAction::triggered, this, &KsMainWindow::_hideTasks); + connect(&_showCPUsAction, &QAction::triggered, + this, &KsMainWindow::_showCPUs); + connect(&_hideCPUsAction, &QAction::triggered, this, &KsMainWindow::_hideCPUs); @@ -322,8 +326,9 @@ void KsMainWindow::_createMenus() filter->addAction(&_showEventsAction); filter->addAction(&_showTasksAction); - filter->addAction(&_hideTasksAction); - filter->addAction(&_hideCPUsAction); +// filter->addAction(&_hideTasksAction); + filter->addAction(&_showCPUsAction); +// filter->addAction(&_hideCPUsAction); filter->addAction(&_advanceFilterAction); filter->addAction(&_clearAllFilters); @@ -621,6 +626,39 @@ void KsMainWindow::_hideTasks() dialog->show(); } +void KsMainWindow::_showCPUs() +{ + kshark_context *kshark_ctx(nullptr); + KsCheckBoxWidget *cpu_cbd; + KsCheckBoxDialog *dialog; + + if (!kshark_instance(&kshark_ctx)) + return; + + cpu_cbd = new KsCPUCheckBoxWidget(_data.tep(), this); + dialog = new KsCheckBoxDialog(cpu_cbd, this); + + if (!kshark_ctx->show_cpu_filter || + !kshark_ctx->show_cpu_filter->count) { + cpu_cbd->setDefault(true); + } else { + int nCPUs = tep_get_cpus(_data.tep()); + QVector v(nCPUs, false); + + for (int i = 0; i < nCPUs; ++i) { + if (tracecmd_filter_id_find(kshark_ctx->show_cpu_filter, i)) + v[i] = true; + } + + cpu_cbd->set(v); + } + + connect(dialog, &KsCheckBoxDialog::apply, + &_data, &KsDataStore::applyPosCPUFilter); + + dialog->show(); +} + void KsMainWindow::_hideCPUs() { kshark_context *kshark_ctx(nullptr); diff --git a/kernel-shark-qt/src/KsMainWindow.hpp b/kernel-shark-qt/src/KsMainWindow.hpp index 301acc9..c29829a 100644 --- a/kernel-shark-qt/src/KsMainWindow.hpp +++ b/kernel-shark-qt/src/KsMainWindow.hpp @@ -120,6 +120,8 @@ private: QAction _hideTasksAction; + QAction _showCPUsAction; + QAction _hideCPUsAction; QAction _advanceFilterAction; @@ -173,6 +175,8 @@ private: void _hideTasks(); + void _showCPUs(); + void _hideCPUs(); void _advancedFiltering(); From patchwork Fri Jan 4 19:57:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yordan Karadzhov X-Patchwork-Id: 10760217 Return-Path: Received: from mail-eopbgr790047.outbound.protection.outlook.com ([40.107.79.47]:5504 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726050AbfADT7r (ORCPT ); Fri, 4 Jan 2019 14:59:47 -0500 From: Yordan Karadzhov To: "rostedt@goodmis.org" CC: "linux-trace-devel@vger.kernel.org" Subject: [PATCH 2/4] kernel-shark-qt: Cosmetic modifications in KsQuickContextMenu Date: Fri, 4 Jan 2019 19:57:52 +0000 Message-ID: <20190104195726.24264-2-ykaradzhov@vmware.com> References: <20190104195726.24264-1-ykaradzhov@vmware.com> In-Reply-To: <20190104195726.24264-1-ykaradzhov@vmware.com> Content-Language: en-US MIME-Version: 1.0 Sender: linux-trace-devel-owner@vger.kernel.org List-ID: Content-Length: 5663 This patch does the following minor modifications in KsQuickContextMenu: 1. Removes the "Apply to list/graph" check-boxes. 2. Swaps the position of the Show / Hide actions 3. Adds "clear all filters" action. The code that adds the check-boxes is commented out, because we may change our opinion in the future. Signed-off-by: Yordan Karadzhov --- kernel-shark-qt/src/KsQuickContextMenu.cpp | 94 ++++++++++++---------- kernel-shark-qt/src/KsQuickContextMenu.hpp | 4 +- 2 files changed, 54 insertions(+), 44 deletions(-) diff --git a/kernel-shark-qt/src/KsQuickContextMenu.cpp b/kernel-shark-qt/src/KsQuickContextMenu.cpp index 6c9c9ef..3d190f3 100644 --- a/kernel-shark-qt/src/KsQuickContextMenu.cpp +++ b/kernel-shark-qt/src/KsQuickContextMenu.cpp @@ -62,7 +62,7 @@ KsQuickContextMenu::KsQuickContextMenu(KsDataStore *data, size_t row, _addTaskPlotAction(this), _removeCPUPlotAction(this), _removeTaskPlotAction(this), - _deselectAction(this) + _clearAllFilters(this) { typedef void (KsQuickContextMenu::*mfp)(); QString taskName, parentName, descr; @@ -87,37 +87,45 @@ KsQuickContextMenu::KsQuickContextMenu(KsDataStore *data, size_t row, parentName = parent->metaObject()->className(); - addSection("Pointer menu"); + addSection("Pointer filter menu"); + +// if (parentName == "KsTraceViewer" && +// list = dynamic_cast(parent))) { +// _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); +// } - 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 = "Show task ["; + descr += taskName; + descr += "-"; + descr += QString("%1").arg(pid); + descr += "] only"; + lamAddAction(&_showTaskAction, &KsQuickContextMenu::_showTask); descr = "Hide task ["; descr += taskName; @@ -126,30 +134,30 @@ KsQuickContextMenu::KsQuickContextMenu(KsDataStore *data, size_t row, descr += "]"; lamAddAction(&_hideTaskAction, &KsQuickContextMenu::_hideTask); - descr = "Show task ["; - descr += taskName; - descr += "-"; - descr += QString("%1").arg(pid); + descr = "Show event ["; + descr += kshark_get_event_name_easy(_data->rows()[_row]); descr += "] only"; - lamAddAction(&_showTaskAction, &KsQuickContextMenu::_showTask); + lamAddAction(&_showEventAction, &KsQuickContextMenu::_showEvent); descr = "Hide event ["; descr += kshark_get_event_name_easy(_data->rows()[_row]); descr += "]"; lamAddAction(&_hideEventAction, &KsQuickContextMenu::_hideEvent); - descr = "Show event ["; - descr += kshark_get_event_name_easy(_data->rows()[_row]); - descr += "] only"; - lamAddAction(&_showEventAction, &KsQuickContextMenu::_showEvent); + if (parentName == "KsTraceViewer") { + descr = QString("Show CPU [%1] only").arg(cpu); + lamAddAction(&_showCPUAction, &KsQuickContextMenu::_showCPU); + } descr = QString("Hide CPU [%1]").arg(_data->rows()[_row]->cpu); lamAddAction(&_hideCPUAction, &KsQuickContextMenu::_hideCPU); - if (parentName == "KsTraceViewer") { - descr = QString("Show CPU [%1] only").arg(cpu); - lamAddAction(&_showCPUAction, &KsQuickContextMenu::_showCPU); + descr = "Clear all filters"; + lamAddAction(&_clearAllFilters, &KsQuickContextMenu::_clearFilters); + addSection("Pointer plot menu"); + + if (parentName == "KsTraceViewer") { descr = "Add ["; descr += taskName; descr += "-"; diff --git a/kernel-shark-qt/src/KsQuickContextMenu.hpp b/kernel-shark-qt/src/KsQuickContextMenu.hpp index f5a2a78..df8a65b 100644 --- a/kernel-shark-qt/src/KsQuickContextMenu.hpp +++ b/kernel-shark-qt/src/KsQuickContextMenu.hpp @@ -85,6 +85,8 @@ private: QVector _getFilterVector(tracecmd_filter_id *filter, int newId); + void _clearFilters() {_data->clearAllFilters();} + KsDataStore *_data; size_t _row; @@ -105,7 +107,7 @@ private: QAction _removeTaskPlotAction; - QAction _deselectAction; + QAction _clearAllFilters; }; /** From patchwork Fri Jan 4 19:57:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yordan Karadzhov X-Patchwork-Id: 10760213 Return-Path: Received: from mail-eopbgr810042.outbound.protection.outlook.com ([40.107.81.42]:30548 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725930AbfADT61 (ORCPT ); Fri, 4 Jan 2019 14:58:27 -0500 From: Yordan Karadzhov To: "rostedt@goodmis.org" CC: "linux-trace-devel@vger.kernel.org" Subject: [PATCH 3/4] kernel-shark-qt: Make the selection in the Table less touchy Date: Fri, 4 Jan 2019 19:57:53 +0000 Message-ID: <20190104195726.24264-3-ykaradzhov@vmware.com> References: <20190104195726.24264-1-ykaradzhov@vmware.com> In-Reply-To: <20190104195726.24264-1-ykaradzhov@vmware.com> Content-Language: en-US MIME-Version: 1.0 Sender: linux-trace-devel-owner@vger.kernel.org List-ID: Content-Length: 2088 This patch aims to make the selection in the table by using the mouse more intuitive (less touchy). First of all, it disables the auto-scrolling in horizontal direction. In addition to this, it makes sure that all columns of the table have proper sizes when the main window gets resized by the user. Signed-off-by: Yordan Karadzhov --- kernel-shark-qt/src/KsTraceViewer.cpp | 18 ++++++++++++++++++ kernel-shark-qt/src/KsTraceViewer.hpp | 2 ++ 2 files changed, 20 insertions(+) diff --git a/kernel-shark-qt/src/KsTraceViewer.cpp b/kernel-shark-qt/src/KsTraceViewer.cpp index d64c2af..2418de3 100644 --- a/kernel-shark-qt/src/KsTraceViewer.cpp +++ b/kernel-shark-qt/src/KsTraceViewer.cpp @@ -30,6 +30,23 @@ void KsTableView::mousePressEvent(QMouseEvent *e) { QTableView::mousePressEvent(e); } +/** + * Reimplemented the handler for Auto-scrolling. With this we disable + * the Horizontal Auto-scrolling. + */ +void KsTableView::scrollTo(const QModelIndex &index, ScrollHint hint) +{ + int bottomMargin(2); + + if (hint == QAbstractItemView::EnsureVisible && + index.row() > indexAt(rect().topLeft()).row() && + index.row() < indexAt(rect().bottomLeft()).row() - bottomMargin) + return; + + QTableView::scrollTo(index, hint); +} + + /** Create a default (empty) Trace viewer widget. */ KsTraceViewer::KsTraceViewer(QWidget *parent) : QWidget(parent), @@ -588,6 +605,7 @@ void KsTraceViewer::resizeEvent(QResizeEvent* event) int nColumns = _tableHeader.count(); int tableSize(0), viewSize, freeSpace; + _resizeToContents(); for (int c = 0; c < nColumns; ++c) { tableSize += _view.columnWidth(c); } diff --git a/kernel-shark-qt/src/KsTraceViewer.hpp b/kernel-shark-qt/src/KsTraceViewer.hpp index a89fce1..a8c1fe6 100644 --- a/kernel-shark-qt/src/KsTraceViewer.hpp +++ b/kernel-shark-qt/src/KsTraceViewer.hpp @@ -33,6 +33,8 @@ public: : QTableView(parent) {}; void mousePressEvent(QMouseEvent *event) override; + + void scrollTo(const QModelIndex &index, ScrollHint hint) override; }; /** From patchwork Fri Jan 4 19:57:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yordan Karadzhov X-Patchwork-Id: 10760215 Return-Path: Received: from mail-eopbgr810042.outbound.protection.outlook.com ([40.107.81.42]:30548 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726074AbfADT62 (ORCPT ); Fri, 4 Jan 2019 14:58:28 -0500 From: Yordan Karadzhov To: "rostedt@goodmis.org" CC: "linux-trace-devel@vger.kernel.org" Subject: [PATCH 4/4] kernel-shark-qt: Do not auto-scrolling when the marker switches Date: Fri, 4 Jan 2019 19:57:55 +0000 Message-ID: <20190104195726.24264-4-ykaradzhov@vmware.com> References: <20190104195726.24264-1-ykaradzhov@vmware.com> In-Reply-To: <20190104195726.24264-1-ykaradzhov@vmware.com> Content-Language: en-US MIME-Version: 1.0 Sender: linux-trace-devel-owner@vger.kernel.org List-ID: Content-Length: 1469 In some cases, the auto-scrolling (inside the table) to the position of the marker, when the user switches between MarkerA and MarkerB can be very annoying. This patch disables this vertical auto-scrolling. Jumping to the position of the Active marker is still possible, but the user has to do a second click on the MarkerA/MarkerB button. Signed-off-by: Yordan Karadzhov --- kernel-shark-qt/src/KsTraceViewer.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/kernel-shark-qt/src/KsTraceViewer.cpp b/kernel-shark-qt/src/KsTraceViewer.cpp index 2418de3..f02fbbb 100644 --- a/kernel-shark-qt/src/KsTraceViewer.cpp +++ b/kernel-shark-qt/src/KsTraceViewer.cpp @@ -578,13 +578,18 @@ void KsTraceViewer::markSwitch() */ size_t row =_mState->getMarker(state)._pos; - QModelIndex index = _proxyModel.mapFromSource(_model.index(row, 0)); + QModelIndex index = + _proxyModel.mapFromSource(_model.index(row, 0)); /* * The row of the active marker will be colored according to - * the assigned property of the current state of the Dual marker. + * the assigned property of the current state of the Dual + * marker. Auto-scrolling is temporarily disabled because we + * do not want to scroll to the position of the marker yet. */ + _view.setAutoScroll(false); _view.selectRow(index.row()); + _view.setAutoScroll(true); } else { _view.clearSelection(); }