| /* SPDX-License-Identifier: LGPL-2.1 */ | |
| /* | |
| * Copyright (C) 2016 Red Hat Inc, Steven Rostedt <srostedt@redhat.com> | |
| */ | |
| /** | |
| * @file libkshark-plugin.h | |
| * @brief KernelShark plugins. | |
| */ | |
| #ifndef _KSHARK_PLUGIN_H | |
| #define _KSHARK_PLUGIN_H | |
| #ifdef __cplusplus | |
| extern "C" { | |
| #endif // __cplusplus | |
| // trace-cmd | |
| #include "traceevent/event-parse.h" | |
| /* Quiet warnings over documenting simple structures */ | |
| //! @cond Doxygen_Suppress | |
| #define KSHARK_PLUGIN_INITIALIZER kshark_plugin_initializer | |
| #define KSHARK_PLUGIN_DEINITIALIZER kshark_plugin_deinitializer | |
| #define _MAKE_STR(x) #x | |
| #define MAKE_STR(x) _MAKE_STR(x) | |
| #define KSHARK_PLUGIN_INITIALIZER_NAME MAKE_STR(KSHARK_PLUGIN_INITIALIZER) | |
| #define KSHARK_PLUGIN_DEINITIALIZER_NAME MAKE_STR(KSHARK_PLUGIN_DEINITIALIZER) | |
| struct kshark_context; | |
| struct kshark_entry; | |
| //! @endcond | |
| /** | |
| * A function type to be used when defining load/reload/unload plugin | |
| * functions. | |
| */ | |
| typedef int (*kshark_plugin_load_func)(struct kshark_context *); | |
| struct kshark_trace_histo; | |
| /** | |
| * Structure representing the C arguments of the drawing function of | |
| * a plugin. | |
| */ | |
| struct kshark_cpp_argv { | |
| /** Pointer to the model descriptor object. */ | |
| struct kshark_trace_histo *histo; | |
| }; | |
| /** A function type to be used when defining plugin functions for drawing. */ | |
| typedef void | |
| (*kshark_plugin_draw_handler_func)(struct kshark_cpp_argv *argv, | |
| int val, int draw_action); | |
| /** | |
| * A function type to be used when defining plugin functions for data | |
| * manipulation. | |
| */ | |
| typedef void | |
| (*kshark_plugin_event_handler_func)(struct kshark_context *kshark_ctx, | |
| struct tep_record *rec, | |
| struct kshark_entry *e); | |
| /** Plugin action identifier. */ | |
| enum kshark_plugin_actions { | |
| /** | |
| * Load plugins action. This action identifier is used when handling | |
| * plugins. | |
| */ | |
| KSHARK_PLUGIN_INIT, | |
| /** | |
| * Reload plugins action. This action identifier is used when handling | |
| * plugins. | |
| */ | |
| KSHARK_PLUGIN_UPDATE, | |
| /** | |
| * Unload plugins action. This action identifier is used when handling | |
| * plugins. | |
| */ | |
| KSHARK_PLUGIN_CLOSE, | |
| /** | |
| * Task draw action. This action identifier is used by the plugin draw | |
| * function. | |
| */ | |
| KSHARK_PLUGIN_TASK_DRAW, | |
| /** | |
| * CPU draw action. This action identifier is used by the plugin draw | |
| * function. | |
| */ | |
| KSHARK_PLUGIN_CPU_DRAW, | |
| }; | |
| /** | |
| * Plugin Event handler structure, defining the properties of the required | |
| * kshark_entry. | |
| */ | |
| struct kshark_event_handler { | |
| /** Pointer to the next Plugin Event handler. */ | |
| struct kshark_event_handler *next; | |
| /** Unique Id ot the trace event type. */ | |
| int id; | |
| /** | |
| * Event action function. This action can be used to modify the content | |
| * of all kshark_entries having Event Ids equal to "id". | |
| */ | |
| kshark_plugin_event_handler_func event_func; | |
| /** | |
| * Draw action function. This action can be used to draw additional | |
| * graphical elements (shapes) for all kshark_entries having Event Ids | |
| * equal to "id". | |
| */ | |
| kshark_plugin_draw_handler_func draw_func; | |
| }; | |
| struct kshark_event_handler * | |
| kshark_find_event_handler(struct kshark_event_handler *handlers, int event_id); | |
| int kshark_register_event_handler(struct kshark_event_handler **handlers, | |
| int event_id, | |
| kshark_plugin_event_handler_func evt_func, | |
| kshark_plugin_draw_handler_func dw_func); | |
| void kshark_unregister_event_handler(struct kshark_event_handler **handlers, | |
| int event_id, | |
| kshark_plugin_event_handler_func evt_func, | |
| kshark_plugin_draw_handler_func dw_func); | |
| void kshark_free_event_handler_list(struct kshark_event_handler *handlers); | |
| /** Linked list of plugins. */ | |
| struct kshark_plugin_list { | |
| /** Pointer to the next Plugin. */ | |
| struct kshark_plugin_list *next; | |
| /** The plugin object file to load. */ | |
| char *file; | |
| /** Plugin Event handler. */ | |
| void *handle; | |
| /** Callback function for initialization of the plugin. */ | |
| kshark_plugin_load_func init; | |
| /** Callback function for deinitialization of the plugin. */ | |
| kshark_plugin_load_func close; | |
| }; | |
| int kshark_register_plugin(struct kshark_context *kshark_ctx, | |
| const char *file); | |
| void kshark_unregister_plugin(struct kshark_context *kshark_ctx, | |
| const char *file); | |
| void kshark_free_plugin_list(struct kshark_plugin_list *plugins); | |
| int kshark_handle_plugins(struct kshark_context *kshark_ctx, | |
| enum kshark_plugin_actions task_id); | |
| #ifdef __cplusplus | |
| } | |
| #endif // __cplusplus | |
| #endif // _KSHARK_PLUGIN_H |