Commit 49440828 authored by Steven Rostedt (Red Hat)'s avatar Steven Rostedt (Red Hat) Committed by Jiri Olsa

tools lib traceevent: Add options to function plugin

Add the options "parent" and "indent" to the function plugin.

When parent is set, the output looks like this:

function:             fsnotify_modify <-- vfs_write
function:             zone_statistics <-- get_page_from_freelist
function:                __inc_zone_state <-- zone_statistics
function:                inotify_inode_queue_event <-- fsnotify_modify
function:                fsnotify_parent <-- fsnotify_modify
function:                __inc_zone_state <-- zone_statistics
function:                   __fsnotify_parent <-- fsnotify_parent
function:                   inotify_dentry_parent_queue_event <-- fsnotify_parent
function:             add_to_page_cache_lru <-- do_read_cache_page

When it's not set, it looks like:

function:             fsnotify_modify
function:             zone_statistics
function:                __inc_zone_state
function:                inotify_inode_queue_event
function:                fsnotify_parent
function:                __inc_zone_state
function:                   __fsnotify_parent
function:                   inotify_dentry_parent_queue_event
function:             add_to_page_cache_lru

When the otpion "indent" is not set, it looks like this:

function:             fsnotify_modify <-- vfs_write
function:             zone_statistics <-- get_page_from_freelist
function:             __inc_zone_state <-- zone_statistics
function:             inotify_inode_queue_event <-- fsnotify_modify
function:             fsnotify_parent <-- fsnotify_modify
function:             __inc_zone_state <-- zone_statistics
function:             __fsnotify_parent <-- fsnotify_parent
function:             inotify_dentry_parent_queue_event <-- fsnotify_parent
function:             add_to_page_cache_lru <-- do_read_cache_page
Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
Acked-by: default avatarNamhyung Kim <namhyung@kernel.org>
Link: http://lkml.kernel.org/r/20140603032224.056940410@goodmis.orgSigned-off-by: default avatarJiri Olsa <jolsa@kernel.org>
parent 5827f2fa
...@@ -33,6 +33,29 @@ static int cpus = -1; ...@@ -33,6 +33,29 @@ static int cpus = -1;
#define STK_BLK 10 #define STK_BLK 10
struct pevent_plugin_option plugin_options[] =
{
{
.name = "parent",
.plugin_alias = "ftrace",
.description =
"Print parent of functions for function events",
},
{
.name = "indent",
.plugin_alias = "ftrace",
.description =
"Try to show function call indents, based on parents",
.set = 1,
},
{
.name = NULL,
}
};
static struct pevent_plugin_option *ftrace_parent = &plugin_options[0];
static struct pevent_plugin_option *ftrace_indent = &plugin_options[1];
static void add_child(struct func_stack *stack, const char *child, int pos) static void add_child(struct func_stack *stack, const char *child, int pos)
{ {
int i; int i;
...@@ -119,6 +142,7 @@ static int function_handler(struct trace_seq *s, struct pevent_record *record, ...@@ -119,6 +142,7 @@ static int function_handler(struct trace_seq *s, struct pevent_record *record,
parent = pevent_find_function(pevent, pfunction); parent = pevent_find_function(pevent, pfunction);
if (parent && ftrace_indent->set)
index = add_and_get_index(parent, func, record->cpu); index = add_and_get_index(parent, func, record->cpu);
trace_seq_printf(s, "%*s", index*3, ""); trace_seq_printf(s, "%*s", index*3, "");
...@@ -128,11 +152,13 @@ static int function_handler(struct trace_seq *s, struct pevent_record *record, ...@@ -128,11 +152,13 @@ static int function_handler(struct trace_seq *s, struct pevent_record *record,
else else
trace_seq_printf(s, "0x%llx", function); trace_seq_printf(s, "0x%llx", function);
if (ftrace_parent->set) {
trace_seq_printf(s, " <-- "); trace_seq_printf(s, " <-- ");
if (parent) if (parent)
trace_seq_printf(s, "%s", parent); trace_seq_printf(s, "%s", parent);
else else
trace_seq_printf(s, "0x%llx", pfunction); trace_seq_printf(s, "0x%llx", pfunction);
}
return 0; return 0;
} }
...@@ -141,6 +167,9 @@ int PEVENT_PLUGIN_LOADER(struct pevent *pevent) ...@@ -141,6 +167,9 @@ int PEVENT_PLUGIN_LOADER(struct pevent *pevent)
{ {
pevent_register_event_handler(pevent, -1, "ftrace", "function", pevent_register_event_handler(pevent, -1, "ftrace", "function",
function_handler, NULL); function_handler, NULL);
traceevent_plugin_add_options("ftrace", plugin_options);
return 0; return 0;
} }
...@@ -157,6 +186,8 @@ void PEVENT_PLUGIN_UNLOADER(struct pevent *pevent) ...@@ -157,6 +186,8 @@ void PEVENT_PLUGIN_UNLOADER(struct pevent *pevent)
free(fstack[i].stack); free(fstack[i].stack);
} }
traceevent_plugin_remove_options(plugin_options);
free(fstack); free(fstack);
fstack = NULL; fstack = NULL;
cpus = -1; cpus = -1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment