The methods can be used to easily retrieve a QVector<int> containing all CPU or Event IDs. We will later use these method in the GUI (following patch). Signed-off-by: Yordan Karadzhov (VMware) <y.karadz@xxxxxxxxx> --- kernel-shark/src/KsCaptureDialog.cpp | 6 ++--- kernel-shark/src/KsUtils.cpp | 38 ++++++++++++++++++++++++++++ kernel-shark/src/KsUtils.hpp | 4 +++ 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/kernel-shark/src/KsCaptureDialog.cpp b/kernel-shark/src/KsCaptureDialog.cpp index 69b9944..d6f8014 100644 --- a/kernel-shark/src/KsCaptureDialog.cpp +++ b/kernel-shark/src/KsCaptureDialog.cpp @@ -230,7 +230,7 @@ void KsCaptureControl::_importSettings() kshark_config_doc *conf, *jevents, *temp; QVector<bool> v(nEvts, false); tracecmd_filter_id *eventHash; - tep_event **events; + QVector<int> eventIds; QString fileName; auto lamImportError = [this] () { @@ -238,7 +238,7 @@ void KsCaptureControl::_importSettings() }; /** Get all available events. */ - events = tep_list_events(_localTEP, TEP_EVENT_SORT_SYSTEM); + eventIds = KsUtils::getEventIdList(TEP_EVENT_SORT_SYSTEM); /* Get the configuration document. */ fileName = KsUtils::getFile(this, "Import from Filter", @@ -277,7 +277,7 @@ void KsCaptureControl::_importSettings() } for (int i = 0; i < nEvts; ++i) { - if (tracecmd_filter_id_find(eventHash, events[i]->id)) + if (tracecmd_filter_id_find(eventHash, eventIds[i])) v[i] = true; } diff --git a/kernel-shark/src/KsUtils.cpp b/kernel-shark/src/KsUtils.cpp index e99509f..77d0c7c 100644 --- a/kernel-shark/src/KsUtils.cpp +++ b/kernel-shark/src/KsUtils.cpp @@ -15,6 +15,22 @@ namespace KsUtils { +/** @brief Get a sorted vector of CPU Ids. */ +QVector<int> getCPUList() +{ + kshark_context *kshark_ctx(nullptr); + int nCPUs; + + if (!kshark_instance(&kshark_ctx)) + return {}; + + nCPUs = tep_get_cpus(kshark_ctx->pevent); + QVector<int> allCPUs = QVector<int>(nCPUs); + std::iota(allCPUs.begin(), allCPUs.end(), 0); + + return allCPUs; +} + /** @brief Get a sorted vector of Task's Pids. */ QVector<int> getPidList() { @@ -37,6 +53,28 @@ QVector<int> getPidList() return pids; } +/** + * @brief Get a sorted vector of Event Ids. + */ +QVector<int> getEventIdList(tep_event_sort_type sortType) +{ + kshark_context *kshark_ctx(nullptr); + tep_event **events; + int nEvts; + + if (!kshark_instance(&kshark_ctx)) + return {}; + + nEvts = tep_get_events_count(kshark_ctx->pevent); + events = tep_list_events(kshark_ctx->pevent, sortType); + + QVector<int> allEvts(nEvts); + for (int i = 0; i < nEvts; ++i) + allEvts[i] = events[i]->id; + + return allEvts; +} + /** @brief Get a sorted vector of Id values of a filter. */ QVector<int> getFilterIds(tracecmd_filter_id *filter) { diff --git a/kernel-shark/src/KsUtils.hpp b/kernel-shark/src/KsUtils.hpp index db1bf5e..f44139b 100644 --- a/kernel-shark/src/KsUtils.hpp +++ b/kernel-shark/src/KsUtils.hpp @@ -82,8 +82,12 @@ std::chrono::high_resolution_clock::now() - t0).count() namespace KsUtils { +QVector<int> getCPUList(); + QVector<int> getPidList(); +QVector<int> getEventIdList(tep_event_sort_type sortType=TEP_EVENT_SORT_ID); + QVector<int> getFilterIds(tracecmd_filter_id *filter); /** @brief Geat the list of plugins. */ -- 2.20.1