@@ -23,3 +23,7 @@ target_link_libraries(dplot kshark-plot)
message(STATUS "widgetdemo")
add_executable(widgetdemo widgetdemo.cpp)
target_link_libraries(widgetdemo kshark-gui)
+
+add_library(hello SHARED hello_kernel.c)
+set_target_properties(hello PROPERTIES PREFIX "plugin-")
+target_link_libraries(hello kshark-plot)
new file mode 100644
@@ -0,0 +1,67 @@
+// SPDX-License-Identifier: LGPL-2.1
+
+/*
+ * Copyright (C) 2019 VMware Inc, Yordan Karadzhov <ykaradzhov@vmware.com>
+ */
+
+/**
+ * @file hello_kernel.c
+ * @brief Example plugin.
+ */
+
+// C
+#ifndef _GNU_SOURCE
+/** Use GNU C Library. */
+#define _GNU_SOURCE
+#endif
+#include <stdio.h>
+
+// KernelShark
+#include "libkshark.h"
+#include "libkshark-plot.h"
+#include "libkshark-plugin.h"
+
+char *font_file;
+struct ksplot_font mono_oblique_16;
+
+static void nop_action(struct kshark_context *kshark_ctx,
+ struct tep_record *record,
+ struct kshark_entry *entry)
+{}
+
+static void draw_hello(struct kshark_cpp_argv *argv_c,
+ int val, int draw_action)
+{
+ if (!ksplot_font_is_loaded(&mono_oblique_16))
+ ksplot_init_font(&mono_oblique_16, 16, font_file);
+
+ ksplot_print_text(&mono_oblique_16, NULL, 100, 30, "hello kernel!");
+}
+
+/** Load this plugin. */
+int KSHARK_PLUGIN_INITIALIZER(struct kshark_context *kshark_ctx)
+{
+ font_file = ksplot_find_font_file("FreeMono", "FreeMonoOblique");
+ if (!font_file)
+ return 0;
+
+ kshark_register_event_handler(&kshark_ctx->event_handlers,
+ KS_PLUGIN_NO_EVENT,
+ nop_action,
+ draw_hello);
+
+ return 1;
+}
+
+/** Unload this plugin. */
+int KSHARK_PLUGIN_DEINITIALIZER(struct kshark_context *kshark_ctx)
+{
+ kshark_unregister_event_handler(&kshark_ctx->event_handlers,
+ KS_PLUGIN_NO_EVENT,
+ nop_action,
+ draw_hello);
+
+ free(font_file);
+
+ return 1;
+}
@@ -103,6 +103,9 @@ enum kshark_plugin_actions {
KSHARK_PLUGIN_CPU_DRAW,
};
+/** No event identifier associated with the plugin. */
+#define KS_PLUGIN_NO_EVENT (-ENODEV)
+
/**
* Plugin Event handler structure, defining the properties of the required
* kshark_entry.
This plugin is meant to be used for demonstration purposes only, or as part of a tutorial describing how to write a new plugin. Signed-off-by: Yordan Karadzhov (VMware) <y.karadz@gmail.com> --- kernel-shark/examples/CMakeLists.txt | 4 ++ kernel-shark/examples/hello_kernel.c | 67 ++++++++++++++++++++++++++++ kernel-shark/src/libkshark-plugin.h | 3 ++ 3 files changed, 74 insertions(+) create mode 100644 kernel-shark/examples/hello_kernel.c