The methods are added to the public interface of the KsMainWindow class and can be used to pre-select the CPU and Task plots to be shown, before opening the GUI. Signed-off-by: Yordan Karadzhov (VMware) <y.karadz@xxxxxxxxx> --- kernel-shark/src/KsGLWidget.cpp | 6 ++--- kernel-shark/src/KsMainWindow.cpp | 39 +++++++++++++++++++++++++++++++ kernel-shark/src/KsMainWindow.hpp | 4 ++++ 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/kernel-shark/src/KsGLWidget.cpp b/kernel-shark/src/KsGLWidget.cpp index e930006..f5a96ac 100644 --- a/kernel-shark/src/KsGLWidget.cpp +++ b/kernel-shark/src/KsGLWidget.cpp @@ -369,9 +369,9 @@ void KsGLWidget::loadData(KsDataStore *data) _model.fill(_data->rows(), _data->size()); /* Make a default CPU list. All CPUs will be plotted. */ - _cpuList = {}; - for (int i = 0; i < nCPUs; ++i) - _cpuList.append(i); + if (_cpuList.isEmpty()) + for (int i = 0; i < nCPUs; ++i) + _cpuList.append(i); /* Make a default task list. No tasks will be plotted. */ _taskList = {}; diff --git a/kernel-shark/src/KsMainWindow.cpp b/kernel-shark/src/KsMainWindow.cpp index a5a399c..333e14b 100644 --- a/kernel-shark/src/KsMainWindow.cpp +++ b/kernel-shark/src/KsMainWindow.cpp @@ -172,6 +172,45 @@ KsMainWindow::~KsMainWindow() kshark_free(kshark_ctx); } +/** Set the list ot CPU cores to be plotted. */ +void KsMainWindow::setCPUPlots(QVector<int> cpus) +{ + int nCPUs = tep_get_cpus(_data.tep()); + auto lamCPUCheck = [=] (int cpu) { + if (cpu >= nCPUs) { + qWarning() << "Warning: No CPU" << cpu << "found in the data."; + return true; + } + + return false; + }; + + cpus.erase(std::remove_if(cpus.begin(), cpus.end(), lamCPUCheck), + cpus.end()); + + _graph.cpuReDraw(cpus); +} + +/** Set the list ot tasks (pids) to be plotted. */ +void KsMainWindow::setTaskPlots(QVector<int> pids) +{ + QVector<int> allPids = KsUtils::getPidList(); + auto lamPidCheck = [=] (int pid) { + int i = allPids.indexOf(pid); + if (i < 0) { + qWarning() << "Warning: No Pid" << pid << "found in the data."; + return true; + } + + return false; + }; + + pids.erase(std::remove_if(pids.begin(), pids.end(), lamPidCheck), + pids.end()); + + _graph.taskReDraw(pids); +} + /** * Reimplemented event handler used to update the geometry of the window on * resize events. diff --git a/kernel-shark/src/KsMainWindow.hpp b/kernel-shark/src/KsMainWindow.hpp index eef4f96..774e1c9 100644 --- a/kernel-shark/src/KsMainWindow.hpp +++ b/kernel-shark/src/KsMainWindow.hpp @@ -61,6 +61,10 @@ public: _plugins.unregisterPlugin(plugin); } + void setCPUPlots(QVector<int> cpus); + + void setTaskPlots(QVector<int> pids); + void resizeEvent(QResizeEvent* event); /** Set the Full Screen mode. */ -- 2.20.1