From: "Yordan Karadzhov (VMware)" <y.karadz@gmail.com>
To: rostedt@goodmis.org
Cc: linux-trace-devel@vger.kernel.org,
"Yordan Karadzhov (VMware)" <y.karadz@gmail.com>
Subject: [PATCH v2 20/27] kernel-shark: Update KsCaptureDialog
Date: Thu, 11 Feb 2021 12:31:58 +0200 [thread overview]
Message-ID: <20210211103205.418588-21-y.karadz@gmail.com> (raw)
In-Reply-To: <20210211103205.418588-1-y.karadz@gmail.com>
The compilation of KsCaptureDialog.cpp and kshark-record.cpp is
re-enabled and all functionalities are made compatible with the new
version of the C API of libkshark (KernelShark 2.0).
Signed-off-by: Yordan Karadzhov (VMware) <y.karadz@gmail.com>
---
src/CMakeLists.txt | 10 ++---
src/KsCaptureDialog.cpp | 90 ++++++++++++++++++++++-------------------
src/KsCaptureDialog.hpp | 4 +-
3 files changed, 56 insertions(+), 48 deletions(-)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 6bb94d6..28f44fe 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -75,7 +75,7 @@ if (Qt5Widgets_FOUND AND Qt5Network_FOUND AND TT_FONT_FILE)
KsTraceGraph.hpp
KsTraceViewer.hpp
# KsMainWindow.hpp
-# KsCaptureDialog.hpp
+ KsCaptureDialog.hpp
KsQuickContextMenu.hpp
KsAdvFilteringDialog.hpp)
@@ -91,7 +91,7 @@ if (Qt5Widgets_FOUND AND Qt5Network_FOUND AND TT_FONT_FILE)
KsTraceGraph.cpp
KsTraceViewer.cpp
# KsMainWindow.cpp
-# KsCaptureDialog.cpp
+ KsCaptureDialog.cpp
KsQuickContextMenu.cpp
KsAdvFilteringDialog.cpp)
@@ -106,9 +106,9 @@ if (Qt5Widgets_FOUND AND Qt5Network_FOUND AND TT_FONT_FILE)
# add_executable(${KS_APP_NAME} kernelshark.cpp)
# target_link_libraries(${KS_APP_NAME} kshark-gui)
-# message(STATUS "kshark-record")
-# add_executable(kshark-record kshark-record.cpp)
-# target_link_libraries(kshark-record kshark-gui)
+ message(STATUS "kshark-record")
+ add_executable(kshark-record kshark-record.cpp)
+ target_link_libraries(kshark-record kshark-gui)
# install(TARGETS ${KS_APP_NAME} kshark-record kshark-gui
# RUNTIME DESTINATION ${_INSTALL_PREFIX}/bin/
diff --git a/src/KsCaptureDialog.cpp b/src/KsCaptureDialog.cpp
index 7253ab6..ca4c2bc 100644
--- a/src/KsCaptureDialog.cpp
+++ b/src/KsCaptureDialog.cpp
@@ -14,6 +14,7 @@
// KernelShark
#include "libkshark.h"
+#include "libkshark-tepdata.h"
#include "KsUtils.hpp"
#include "KsCmakeDef.hpp"
#include "KsCaptureDialog.hpp"
@@ -24,11 +25,6 @@ extern "C" {
#include <sys/types.h>
}
-static inline tep_handle *local_events()
-{
- return tracefs_local_events(tracefs_tracing_dir());
-}
-
/**
* @brief Create KsCommandLineEdit.
*
@@ -48,11 +44,28 @@ QSize KsCommandLineEdit::sizeHint() const
return {FONT_WIDTH * 30, FONT_HEIGHT * 3};
}
+static kshark_data_stream *_initLocalStream()
+{
+ kshark_context *kshark_ctx(nullptr);
+ kshark_data_stream *stream;
+ int sd;
+
+ if (!kshark_instance(&kshark_ctx))
+ return nullptr;
+
+ sd = kshark_add_stream(kshark_ctx);
+ stream = kshark_ctx->stream[sd];
+
+ kshark_tep_init_local(stream);
+
+ return stream;
+}
+
/** @brief Create KsCaptureControl widget. */
KsCaptureControl::KsCaptureControl(QWidget *parent)
: QWidget(parent),
- _localTEP(local_events()),
- _eventsWidget(_localTEP, this),
+ _stream(_initLocalStream()),
+ _eventsWidget(_stream),
_pluginsLabel("Plugin: ", this),
_outputLabel("Output file: ", this),
_commandLabel("Command: ", this),
@@ -80,7 +93,7 @@ KsCaptureControl::KsCaptureControl(QWidget *parent)
_topLayout.addWidget(line);
};
- if (pluginList.count() == 0 || !_localTEP) {
+ if (pluginList.count() == 0 || !kshark_get_tep(_stream)) {
/*
* No plugins or events have been found. Most likely this is
* because the process has no Root privileges or because
@@ -88,7 +101,7 @@ KsCaptureControl::KsCaptureControl(QWidget *parent)
*/
QString message("Error: No events or plugins found.\n");
- if (!_localTEP)
+ if (!kshark_get_tep(_stream))
message += "Cannot find or mount tracing directory.\n";
// geteuid() returns 0 if running as effective id of root
@@ -202,23 +215,19 @@ QStringList KsCaptureControl::getArgs()
QStringList KsCaptureControl::_getPlugins()
{
QStringList pluginList;
- char **all_plugins;
+ char **all_tracers;
- all_plugins = tracefs_tracers(tracefs_tracing_dir());
+ all_tracers = kshark_tracecmd_local_plugins();
- if (!all_plugins)
+ if (!all_tracers)
return pluginList;
- for (int i = 0; all_plugins[i]; ++i) {
- /*
- * TODO plugin selection here.
- * printf("plugin %i %s\n", i, all_plugins[i]);
- */
- pluginList << all_plugins[i];
- free(all_plugins[i]);
+ for (int i = 0; all_tracers[i]; ++i) {
+ pluginList << all_tracers[i];
+ free(all_tracers[i]);
}
- free (all_plugins);
+ free(all_tracers);
std::sort(pluginList.begin(), pluginList.end());
return pluginList;
@@ -226,20 +235,17 @@ QStringList KsCaptureControl::_getPlugins()
void KsCaptureControl::_importSettings()
{
- int nEvts = tep_get_events_count(_localTEP), nIds;
+ QVector<int> event_ids = _eventsWidget.getIds();
+ QVector<int> status(_stream->n_events, 0);
kshark_config_doc *conf, *jevents, *temp;
- QVector<bool> v(nEvts, false);
- tracecmd_filter_id *eventHash;
- QVector<int> eventIds;
+ kshark_hash_id *eventHash;
QString fileName;
+ int nIds;
auto lamImportError = [this] () {
emit print("ERROR: Unable to load the configuration file.\n");
};
- /** Get all available events. */
- eventIds = KsUtils::getEventIdList(TEP_EVENT_SORT_SYSTEM);
-
/* Get the configuration document. */
fileName = KsUtils::getFile(this, "Import from Filter",
"Kernel Shark Config files (*.json);;",
@@ -267,8 +273,9 @@ void KsCaptureControl::_importSettings()
return;
}
- eventHash = tracecmd_filter_id_hash_alloc();
- nIds = kshark_import_event_filter(_localTEP, eventHash, "Events", jevents);
+ eventHash = kshark_get_filter(_stream, KS_SHOW_EVENT_FILTER);
+ nIds = kshark_import_event_filter(_stream, KS_SHOW_EVENT_FILTER,
+ "Events", jevents);
if (nIds < 0) {
QString err("WARNING: ");
err += "Some of the imported events are not available on this system.\n";
@@ -276,13 +283,12 @@ void KsCaptureControl::_importSettings()
emit print(err);
}
- for (int i = 0; i < nEvts; ++i) {
- if (tracecmd_filter_id_find(eventHash, eventIds[i]))
- v[i] = true;
+ for (int i = 0; i < _stream->n_events; ++i) {
+ if (kshark_hash_id_find(eventHash, event_ids[i]))
+ status[i] = true;
}
- _eventsWidget.set(v);
- tracecmd_filter_id_hash_free(eventHash);
+ _eventsWidget.set(status);
/** Get all available plugins. */
temp = kshark_string_config_alloc();
@@ -294,9 +300,9 @@ void KsCaptureControl::_importSettings()
if (pluginIndex >= 0) {
_pluginsComboBox.setCurrentText(KS_C_STR_CAST(temp->conf_doc));
} else {
- QString err("WARNING: The traceer plugin \"");
+ QString err("WARNING: The tracer plugin \"");
err += plugin;
- err += "\" is not available on this machine\n";
+ err += "\" is not available on this machine!\n";
emit print(err);
}
}
@@ -329,18 +335,20 @@ void KsCaptureControl::_exportSettings()
events = kshark_filter_config_new(KS_CONFIG_JSON);
/*
- * Use the tracecmd_filter_id to save all selected events in the
+ * Use the kshark_hash_id to save all selected events in the
* configuration file.
*/
ids = _eventsWidget.getCheckedIds();
- tracecmd_filter_id *eventHash = tracecmd_filter_id_hash_alloc();
+ kshark_hash_id *eventHash = kshark_get_filter(_stream,
+ KS_SHOW_EVENT_FILTER);
+
for (auto const &id: ids)
- tracecmd_filter_id_add(eventHash, id);
+ kshark_hash_id_add(eventHash, id);
- kshark_export_event_filter(_localTEP, eventHash, "Events", events);
+ kshark_export_event_filter(_stream, KS_SHOW_EVENT_FILTER, "Events", events);
kshark_config_doc_add(conf, "Events", events);
- tracecmd_filter_id_hash_free(eventHash);
+ kshark_hash_id_free(eventHash);
/* Save the plugin. */
plugin = _pluginsComboBox.currentText();
diff --git a/src/KsCaptureDialog.hpp b/src/KsCaptureDialog.hpp
index 3fd3d8d..0c85101 100644
--- a/src/KsCaptureDialog.hpp
+++ b/src/KsCaptureDialog.hpp
@@ -61,9 +61,9 @@ signals:
void print(const QString &message);
private:
- tep_handle *_localTEP;
+ kshark_data_stream *_stream;
- KsEventsCheckBoxWidget _eventsWidget;
+ KsWidgetsLib::KsEventsCheckBoxWidget _eventsWidget;
QVBoxLayout _topLayout;
--
2.25.1
next prev parent reply other threads:[~2021-02-11 10:39 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-11 10:31 [PATCH v2 00/27] Complete the KernelShark v2 transformation Yordan Karadzhov (VMware)
2021-02-11 10:31 ` [PATCH v2 01/27] kernel-shark: Add get_stream_object() Yordan Karadzhov (VMware)
2021-02-11 10:31 ` [PATCH v2 02/27] kernel-shark: Do proper reset in kshark_close_all() Yordan Karadzhov (VMware)
2021-02-11 10:31 ` [PATCH v2 03/27] kernel-shark: Restore the counting of event handlers Yordan Karadzhov (VMware)
2021-02-11 10:31 ` [PATCH v2 04/27] kernel-shark: Fix a misleading comment Yordan Karadzhov (VMware)
2021-02-11 10:31 ` [PATCH v2 05/27] kernel-shark: Count the number of readout interfaces Yordan Karadzhov (VMware)
2021-02-11 10:31 ` [PATCH v2 06/27] kernel-shark: Update KsUtils Yordan Karadzhov (VMware)
2021-02-11 10:31 ` [PATCH v2 07/27] kernel-shark: Update KsModels and KsSearchFSM Yordan Karadzhov (VMware)
2021-02-11 10:31 ` [PATCH v2 08/27] kernel-shark: Add trace data files for CI testing Yordan Karadzhov (VMware)
2021-02-11 10:31 ` [PATCH v2 09/27] kernel-shark: Add plugin tests Yordan Karadzhov (VMware)
2021-02-11 10:31 ` [PATCH v2 10/27] kernel-shark: Add model tests Yordan Karadzhov (VMware)
2021-02-11 10:31 ` [PATCH v2 11/27] kernel-shark: Update KsWidgetsLib Yordan Karadzhov (VMware)
2021-02-11 10:31 ` [PATCH v2 12/27] kernel-shark: Add combo point to Mark Yordan Karadzhov (VMware)
2021-02-11 10:31 ` [PATCH v2 13/27] kernel-shark: Add new methods to KsPlot::Mark Yordan Karadzhov (VMware)
2021-02-11 10:31 ` [PATCH v2 14/27] kernel-shark: Update the plotting example Yordan Karadzhov (VMware)
2021-02-11 10:31 ` [PATCH v2 15/27] kernel-shark: Search for font with Cmake at pre-build Yordan Karadzhov (VMware)
2021-02-11 10:31 ` [PATCH v2 16/27] kernel-shark: Update KsDualMarker and KsGLWidget Yordan Karadzhov (VMware)
2021-02-11 10:31 ` [PATCH v2 17/27] kernel-shark: Update KsTraceGraph and KsQuickContextMenu Yordan Karadzhov (VMware)
2021-02-11 10:31 ` [PATCH v2 18/27] kernel-shark: Update KsTraceViewer Yordan Karadzhov (VMware)
2021-02-11 10:31 ` [PATCH v2 19/27] kernel-shark: Update KsAdvFilteringDialog Yordan Karadzhov (VMware)
2021-02-11 10:31 ` Yordan Karadzhov (VMware) [this message]
2021-02-11 10:31 ` [PATCH v2 21/27] kernel-shark: Update KsSession Yordan Karadzhov (VMware)
2021-02-11 10:32 ` [PATCH v2 22/27] kernel-shark: Update MissedEvents plugin Yordan Karadzhov (VMware)
2021-02-11 10:32 ` [PATCH v2 23/27] kernel-shark: Update KsMainWindow and kernelshark.cpp Yordan Karadzhov (VMware)
2021-02-11 10:32 ` [PATCH v2 24/27] kernel-shark: Clickable sched_event plugin shapes Yordan Karadzhov (VMware)
2021-02-11 10:32 ` [PATCH v2 25/27] kernel-shark: Show Task plots from command lime Yordan Karadzhov (VMware)
2021-02-11 10:32 ` [PATCH v2 26/27] kernel-shark: Add pkg-config configuration for libkshark Yordan Karadzhov (VMware)
2021-02-11 10:32 ` [PATCH v2 27/27] kernel-shark: Install libkshark-tepdata.h Yordan Karadzhov (VMware)
2021-02-11 15:02 ` [PATCH v2 00/27] Complete the KernelShark v2 transformation Steven Rostedt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210211103205.418588-21-y.karadz@gmail.com \
--to=y.karadz@gmail.com \
--cc=linux-trace-devel@vger.kernel.org \
--cc=rostedt@goodmis.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).