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 <ykaradzhov@xxxxxxxxxx> --- 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<KsTraceGraph *>(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<int>(1, eventId)); } +void KsQuickContextMenu::_showCPU() +{ + int cpu = _data->rows()[_row]->cpu; + + _data->applyPosCPUFilter(QVector<int>(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; -- 2.17.1