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 22/27] kernel-shark: Update MissedEvents plugin
Date: Thu, 11 Feb 2021 12:32:00 +0200 [thread overview]
Message-ID: <20210211103205.418588-23-y.karadz@gmail.com> (raw)
In-Reply-To: <20210211103205.418588-1-y.karadz@gmail.com>
General revision of the MissedEvents plugin that uses
the new generic methods for visualization of trace event.
Signed-off-by: Yordan Karadzhov (VMware) <y.karadz@gmail.com>
---
src/plugins/CMakeLists.txt | 6 +-
src/plugins/MissedEvents.cpp | 105 ++++++++++++++--------------------
src/plugins/missed_events.c | 25 ++++----
src/plugins/missed_events.h | 4 +-
tests/libkshark-gui-tests.cpp | 4 +-
5 files changed, 62 insertions(+), 82 deletions(-)
diff --git a/src/plugins/CMakeLists.txt b/src/plugins/CMakeLists.txt
index 108bc5f..dc0c320 100644
--- a/src/plugins/CMakeLists.txt
+++ b/src/plugins/CMakeLists.txt
@@ -22,9 +22,9 @@ BUILD_PLUGIN(NAME sched_events
SOURCE sched_events.c SchedEvents.cpp)
list(APPEND PLUGIN_LIST "sched_events")
-# BUILD_PLUGIN(NAME missed_events
-# SOURCE missed_events.c MissedEvents.cpp)
-# list(APPEND PLUGIN_LIST "missed_events")
+BUILD_PLUGIN(NAME missed_events
+ SOURCE missed_events.c MissedEvents.cpp)
+list(APPEND PLUGIN_LIST "missed_events")
install(TARGETS ${PLUGIN_LIST}
LIBRARY DESTINATION ${KS_PLUGIN_INSTALL_PREFIX}
diff --git a/src/plugins/MissedEvents.cpp b/src/plugins/MissedEvents.cpp
index 05dfcb5..cf0ed34 100644
--- a/src/plugins/MissedEvents.cpp
+++ b/src/plugins/MissedEvents.cpp
@@ -26,12 +26,8 @@ using namespace KsPlot;
*/
class MissedEventsMark : public PlotObject {
public:
- /** Create a default Missed events marker. */
- MissedEventsMark() : _base(0, 0), _height(0)
- {
- _color = {0, 0, 255};
- _size = 2;
- }
+ /** No default constructor. */
+ MissedEventsMark() = delete;
/**
* @brief Create and position a Missed events marker.
@@ -40,17 +36,7 @@ public:
* @param h: vertical size (height) of the marker.
*/
MissedEventsMark(const Point &p, int h)
- : _base(p.x(), p.y()), _height(h)
- {
- _color = {0, 0, 255};
- _size = 2;
- }
-
- /** Set the Base point of the marker. */
- void setBase(const Point &p) {_base.set(p.x(), p.y());}
-
- /** Set the vertical size (height) point of the marker. */
- void setHeight(int h) {_height = h;}
+ : _base(p.x(), p.y()), _height(h) {}
private:
/** Base point of the Mark's line. */
@@ -76,61 +62,38 @@ void MissedEventsMark::_draw(const Color &col, float size) const
rec.draw();
}
+static PlotObject *makeShape(std::vector<const Graph *> graph,
+ std::vector<int> bin,
+ std::vector<kshark_data_field_int64 *>,
+ Color col, float size)
+{
+ MissedEventsMark *mark = new MissedEventsMark(graph[0]->bin(bin[0])._base,
+ graph[0]->height());
+ mark->_size = size;
+ mark->_color = col;
+
+ return mark;
+}
+
//! @cond Doxygen_Suppress
#define PLUGIN_MAX_ENTRIES 10000
-#define KS_TASK_COLLECTION_MARGIN 25
-
//! @endcond
-static void pluginDraw(kshark_context *kshark_ctx,
- KsCppArgV *argvCpp,
- int val, int draw_action)
-{
- int height = argvCpp->_graph->getHeight();
- const kshark_entry *entry(nullptr);
- MissedEventsMark *mark;
- ssize_t index;
-
- int nBins = argvCpp->_graph->size();
- for (int bin = 0; bin < nBins; ++bin) {
- if (draw_action == KSHARK_PLUGIN_TASK_DRAW)
- entry = ksmodel_get_task_missed_events(argvCpp->_histo,
- bin, val,
- nullptr,
- &index);
- if (draw_action == KSHARK_PLUGIN_CPU_DRAW)
- entry = ksmodel_get_cpu_missed_events(argvCpp->_histo,
- bin, val,
- nullptr,
- &index);
-
- if (entry) {
- mark = new MissedEventsMark(argvCpp->_graph->getBin(bin)._base,
- height);
-
- argvCpp->_shapes->push_front(mark);
- }
- }
-}
-
/**
* @brief Plugin's draw function.
*
* @param argv_c: A C pointer to be converted to KsCppArgV (C++ struct).
+ * @param sd: Data stream identifier.
* @param val: Process or CPU Id value.
* @param draw_action: Draw action identifier.
*/
void draw_missed_events(kshark_cpp_argv *argv_c,
- int val, int draw_action)
+ int sd, int val, int draw_action)
{
- kshark_context *kshark_ctx(NULL);
-
- if (!kshark_instance(&kshark_ctx))
- return;
-
KsCppArgV *argvCpp = KS_ARGV_TO_CPP(argv_c);
+ IsApplicableFunc checkEntry;
/*
* Plotting the "Missed events" makes sense only in the case of a deep
@@ -141,9 +104,29 @@ void draw_missed_events(kshark_cpp_argv *argv_c,
if (argvCpp->_histo->tot_count > PLUGIN_MAX_ENTRIES)
return;
- try {
- pluginDraw(kshark_ctx, argvCpp, val, draw_action);
- } catch (const std::exception &exc) {
- std::cerr << "Exception in MissedEvents\n" << exc.what();
- }
+ if (!(draw_action & KSHARK_CPU_DRAW) &&
+ !(draw_action & KSHARK_TASK_DRAW))
+ return;
+
+ if (draw_action & KSHARK_CPU_DRAW)
+ checkEntry = [=] (kshark_data_container *, ssize_t bin) {
+ return !!ksmodel_get_cpu_missed_events(argvCpp->_histo,
+ bin, sd, val,
+ nullptr,
+ nullptr);
+ };
+
+ else if (draw_action & KSHARK_TASK_DRAW)
+ checkEntry = [=] (kshark_data_container *, ssize_t bin) {
+ return !!ksmodel_get_task_missed_events(argvCpp->_histo,
+ bin, sd, val,
+ nullptr,
+ nullptr);
+ };
+
+ eventPlot(argvCpp,
+ checkEntry,
+ makeShape,
+ {0, 0, 255}, // Blue
+ -1); // Default size
}
diff --git a/src/plugins/missed_events.c b/src/plugins/missed_events.c
index cf652bf..8fe9780 100644
--- a/src/plugins/missed_events.c
+++ b/src/plugins/missed_events.c
@@ -10,32 +10,27 @@
* ring buffer.
*/
+// C
+#include <stdio.h>
+
// KernelShark
+#include "libkshark.h"
#include "plugins/missed_events.h"
-static void nop_action(struct kshark_context *kshark_ctx,
- struct tep_record *record,
- struct kshark_entry *entry)
-{}
-
/** Load this plugin. */
-int KSHARK_PLUGIN_INITIALIZER(struct kshark_context *kshark_ctx)
+int KSHARK_PLOT_PLUGIN_INITIALIZER(struct kshark_data_stream *stream)
{
- kshark_register_event_handler(&kshark_ctx->event_handlers,
- KS_EVENT_OVERFLOW,
- nop_action,
- draw_missed_events);
+ printf("--> missed_events init %i\n", stream->stream_id);
+ kshark_register_draw_handler(stream, draw_missed_events);
return 1;
}
/** Unload this plugin. */
-int KSHARK_PLUGIN_DEINITIALIZER(struct kshark_context *kshark_ctx)
+int KSHARK_PLOT_PLUGIN_DEINITIALIZER(struct kshark_data_stream *stream)
{
- kshark_unregister_event_handler(&kshark_ctx->event_handlers,
- KS_EVENT_OVERFLOW,
- nop_action,
- draw_missed_events);
+ printf("<-- missed_events close %i\n", stream->stream_id);
+ kshark_unregister_draw_handler(stream, draw_missed_events);
return 1;
}
diff --git a/src/plugins/missed_events.h b/src/plugins/missed_events.h
index e05d79a..10bc549 100644
--- a/src/plugins/missed_events.h
+++ b/src/plugins/missed_events.h
@@ -14,14 +14,14 @@
#define _KS_PLUGIN_M_EVTS_H
// KernelShark
-#include "libkshark.h"
+#include "libkshark-plugin.h"
#ifdef __cplusplus
extern "C" {
#endif
void draw_missed_events(struct kshark_cpp_argv *argv,
- int pid, int draw_action);
+ int sd, int pid, int draw_action);
#ifdef __cplusplus
}
diff --git a/tests/libkshark-gui-tests.cpp b/tests/libkshark-gui-tests.cpp
index dedd69f..5a0ca01 100644
--- a/tests/libkshark-gui-tests.cpp
+++ b/tests/libkshark-gui-tests.cpp
@@ -146,7 +146,9 @@ BOOST_AUTO_TEST_CASE(KsUtils_KsDataStore)
BOOST_AUTO_TEST_CASE(KsUtils_getPluginList)
{
- QStringList plugins{"sched_events"};
+ QStringList plugins{"sched_events",
+ "missed_events"
+ };
BOOST_CHECK(getPluginList() == plugins);
}
--
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 ` [PATCH v2 20/27] kernel-shark: Update KsCaptureDialog Yordan Karadzhov (VMware)
2021-02-11 10:31 ` [PATCH v2 21/27] kernel-shark: Update KsSession Yordan Karadzhov (VMware)
2021-02-11 10:32 ` Yordan Karadzhov (VMware) [this message]
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-23-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).