From 20359fdc358744dee36b8e59c234e965fc7d2a69 Mon Sep 17 00:00:00 2001 From: Steven Rostedt Date: Mon, 5 Apr 2010 22:40:54 -0400 Subject: kernelshark: Make all saved filters under KernelShark Make the xml doc under ... for trace-view and trace-graph. Also pull out the task filters since the view and graph in kernelshark share the same filters. Signed-off-by: Steven Rostedt --- kernel-shark.c | 21 ++++++++---------- trace-filter.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ trace-filter.h | 6 ++++++ trace-graph-main.c | 10 ++++++++- trace-graph.c | 31 +++++++++------------------ trace-view-main.c | 19 +++++++++++------ trace-view.c | 29 +++---------------------- trace-view.h | 8 ++----- trace-xml.c | 15 +++++++------ trace-xml.h | 4 ++-- 10 files changed, 125 insertions(+), 80 deletions(-) diff --git a/kernel-shark.c b/kernel-shark.c index 7bc80fe..b0f1ecb 100644 --- a/kernel-shark.c +++ b/kernel-shark.c @@ -177,15 +177,10 @@ load_filters_clicked (gpointer data) warning("Could not open %s", filename); g_free(filename); - /* - * Just in case we are loading only a tree view filter, - * we will load the task filters for the tree view first. - * Then we load the graph next, and if the graph has - * trace filters, than those will override them. - */ - trace_view_load_filters(handle, trace_tree, - ginfo->task_filter, - ginfo->hide_tasks); + trace_filter_load_filters(handle, ginfo->task_filter, + ginfo->hide_tasks); + + trace_view_load_filters(handle, trace_tree); trace_graph_load_filters(ginfo, handle); tracecmd_xml_close(handle); @@ -205,16 +200,18 @@ save_filters_clicked (gpointer data) if (!filename) return; - handle = tracecmd_xml_create(filename); + handle = tracecmd_xml_create(filename, VERSION_STRING); if (!handle) warning("Could not create %s", filename); g_free(filename); - trace_view_save_filters(handle, trace_tree, - ginfo->task_filter, ginfo->hide_tasks); + trace_view_save_filters(handle, trace_tree); trace_graph_save_filters(ginfo, handle); + trace_filter_save_filters(handle, ginfo->task_filter, + ginfo->hide_tasks); + tracecmd_xml_close(handle); } diff --git a/trace-filter.c b/trace-filter.c index b6035ad..3f78637 100644 --- a/trace-filter.c +++ b/trace-filter.c @@ -2327,3 +2327,65 @@ int trace_filter_load_task_filter(struct filter_task *filter, return 0; } + +int trace_filter_load_filters(struct tracecmd_xml_handle *handle, + struct filter_task *task_filter, + struct filter_task *hide_tasks) +{ + struct tracecmd_xml_system *system; + struct tracecmd_xml_system_node *syschild; + const char *name; + + system = tracecmd_xml_find_system(handle, "TraceFilter"); + if (!system) + return -1; + + + syschild = tracecmd_xml_system_node(system); + if (!syschild) + goto out_free_sys; + + do { + name = tracecmd_xml_node_type(syschild); + + if (strcmp(name, "TaskFilter") == 0) + trace_filter_load_task_filter(task_filter, handle, syschild); + + else if (strcmp(name, "HideTasks") == 0) + trace_filter_load_task_filter(hide_tasks, handle, syschild); + + syschild = tracecmd_xml_node_next(syschild); + } while (syschild); + + tracecmd_xml_free_system(system); + + return 0; + + out_free_sys: + tracecmd_xml_free_system(system); + return -1; +} + +int trace_filter_save_filters(struct tracecmd_xml_handle *handle, + struct filter_task *task_filter, + struct filter_task *hide_tasks) +{ + + tracecmd_xml_start_system(handle, "TraceFilter"); + + if (task_filter && filter_task_count(task_filter)) { + tracecmd_xml_start_sub_system(handle, "TaskFilter"); + trace_filter_save_tasks(handle, task_filter); + tracecmd_xml_end_sub_system(handle); + } + + if (hide_tasks && filter_task_count(hide_tasks)) { + tracecmd_xml_start_sub_system(handle, "HideTasks"); + trace_filter_save_tasks(handle, hide_tasks); + tracecmd_xml_end_sub_system(handle); + } + + tracecmd_xml_end_system(handle); + + return 0; +} diff --git a/trace-filter.h b/trace-filter.h index fd60bce..e0f9f4a 100644 --- a/trace-filter.h +++ b/trace-filter.h @@ -148,6 +148,12 @@ int trace_filter_load_events(struct event_filter *event_filter, int trace_filter_load_task_filter(struct filter_task *filter, struct tracecmd_xml_handle *handle, struct tracecmd_xml_system_node *node); +int trace_filter_load_filters(struct tracecmd_xml_handle *handle, + struct filter_task *task_filter, + struct filter_task *hide_tasks); +int trace_filter_save_filters(struct tracecmd_xml_handle *handle, + struct filter_task *task_filter, + struct filter_task *hide_tasks); /* put here because there's no other place */ diff --git a/trace-graph-main.c b/trace-graph-main.c index 4a9fed1..0490a86 100644 --- a/trace-graph-main.c +++ b/trace-graph-main.c @@ -31,6 +31,8 @@ #include "trace-filter.h" #include "trace-gui.h" +#include "version.h" + #define version "0.1.1" #define TRACE_WIDTH 800 @@ -169,6 +171,9 @@ load_filters_clicked (gpointer data) warning("Could not open %s", filename); g_free(filename); + trace_filter_load_filters(handle, ginfo->task_filter, + ginfo->hide_tasks); + trace_graph_load_filters(ginfo, handle); tracecmd_xml_close(handle); @@ -186,11 +191,14 @@ save_filters_clicked (gpointer data) if (!filename) return; - handle = tracecmd_xml_create(filename); + handle = tracecmd_xml_create(filename, VERSION_STRING); if (!handle) warning("Could not create %s", filename); g_free(filename); + trace_filter_save_filters(handle, ginfo->task_filter, + ginfo->hide_tasks); + trace_graph_save_filters(ginfo, handle); tracecmd_xml_close(handle); diff --git a/trace-graph.c b/trace-graph.c index 9ec3924..e21ee33 100644 --- a/trace-graph.c +++ b/trace-graph.c @@ -32,8 +32,6 @@ #include "trace-hash.h" #include "trace-filter.h" -#include "version.h" - #include "util.h" #define DEBUG_LEVEL 0 @@ -2437,6 +2435,12 @@ int trace_graph_load_filters(struct graph_info *ginfo, struct tracecmd_xml_system_node *syschild; const char *name; + if (filter_task_count(ginfo->task_filter) || + filter_task_count(ginfo->hide_tasks)) + ginfo->filter_available = 1; + else + ginfo->filter_available = 0; + system = tracecmd_xml_find_system(handle, "TraceGraph"); if (!system) return -1; @@ -2451,12 +2455,6 @@ int trace_graph_load_filters(struct graph_info *ginfo, if (strcmp(name, "EventFilter") == 0) load_event_filter(ginfo, handle, syschild); - else if (strcmp(name, "TaskFilter") == 0) - trace_filter_load_task_filter(ginfo->task_filter, handle, syschild); - - else if (strcmp(name, "HideTasks") == 0) - trace_filter_load_task_filter(ginfo->hide_tasks, handle, syschild); - syschild = tracecmd_xml_node_next(syschild); } while (syschild); @@ -2474,6 +2472,9 @@ int trace_graph_load_filters(struct graph_info *ginfo, out_free_sys: tracecmd_xml_free_system(system); + if (ginfo->filter_enabled) + trace_graph_refresh(ginfo); + return -1; } @@ -2482,7 +2483,7 @@ int trace_graph_save_filters(struct graph_info *ginfo, { struct event_filter *event_filter; - tracecmd_xml_start_system(handle, "TraceGraph", VERSION_STRING); + tracecmd_xml_start_system(handle, "TraceGraph"); event_filter = ginfo->event_filter; @@ -2497,18 +2498,6 @@ int trace_graph_save_filters(struct graph_info *ginfo, tracecmd_xml_end_sub_system(handle); - if (ginfo->task_filter && filter_task_count(ginfo->task_filter)) { - tracecmd_xml_start_sub_system(handle, "TaskFilter"); - trace_filter_save_tasks(handle, ginfo->task_filter); - tracecmd_xml_end_sub_system(handle); - } - - if (ginfo->hide_tasks && filter_task_count(ginfo->hide_tasks)) { - tracecmd_xml_start_sub_system(handle, "HideTasks"); - trace_filter_save_tasks(handle, ginfo->hide_tasks); - tracecmd_xml_end_sub_system(handle); - } - tracecmd_xml_end_system(handle); return 0; diff --git a/trace-view-main.c b/trace-view-main.c index af9dc5d..e6c0361 100644 --- a/trace-view-main.c +++ b/trace-view-main.c @@ -29,9 +29,12 @@ #include "trace-cmd.h" #include "trace-view.h" #include "trace-xml.h" +#include "trace-filter.h" #include "trace-gui.h" #include "trace-compat.h" +#include "version.h" + #define version "0.1.1" #define TRACE_WIDTH 800 @@ -93,12 +96,16 @@ load_filters_clicked (gpointer data) return; handle = tracecmd_xml_open(filename); - if (!handle) + if (!handle) { warning("Could not open %s", filename); + return; + } g_free(filename); - trace_view_load_filters(handle, trace_tree, info->task_filter, - info->hide_tasks); + trace_filter_load_filters(handle, info->task_filter, + info->hide_tasks); + + trace_view_load_filters(handle, trace_tree); tracecmd_xml_close(handle); } @@ -116,13 +123,13 @@ save_filters_clicked (gpointer data) if (!filename) return; - handle = tracecmd_xml_create(filename); + handle = tracecmd_xml_create(filename, VERSION_STRING); if (!handle) warning("Could not create %s", filename); g_free(filename); - trace_view_save_filters(handle, trace_tree, - info->task_filter, info->hide_tasks); + trace_filter_save_filters(handle, info->task_filter, info->hide_tasks); + trace_view_save_filters(handle, trace_tree); tracecmd_xml_close(handle); } diff --git a/trace-view.c b/trace-view.c index c1ce4ff..8d121d1 100644 --- a/trace-view.c +++ b/trace-view.c @@ -29,7 +29,6 @@ #include "trace-local.h" #include "trace-view.h" #include "trace-compat.h" -#include "version.h" #include "cpu.h" #include "util.h" @@ -873,9 +872,7 @@ void trace_view_search_setup(GtkBox *box, GtkTreeView *treeview) } int trace_view_save_filters(struct tracecmd_xml_handle *handle, - GtkTreeView *trace_tree, - struct filter_task *task_filter, - struct filter_task *hide_tasks) + GtkTreeView *trace_tree) { struct event_filter *event_filter; GtkTreeModel *model; @@ -888,7 +885,7 @@ int trace_view_save_filters(struct tracecmd_xml_handle *handle, store = TRACE_VIEW_STORE(model); - tracecmd_xml_start_system(handle, "TraceView", VERSION_STRING); + tracecmd_xml_start_system(handle, "TraceView"); all_events = trace_view_store_get_all_events_enabled(store); event_filter = trace_view_store_get_event_filter(store); @@ -904,18 +901,6 @@ int trace_view_save_filters(struct tracecmd_xml_handle *handle, tracecmd_xml_end_sub_system(handle); - if (task_filter && filter_task_count(task_filter)) { - tracecmd_xml_start_sub_system(handle, "TaskFilter"); - trace_filter_save_tasks(handle, task_filter); - tracecmd_xml_end_sub_system(handle); - } - - if (hide_tasks && filter_task_count(hide_tasks)) { - tracecmd_xml_start_sub_system(handle, "HideTasks"); - trace_filter_save_tasks(handle, hide_tasks); - tracecmd_xml_end_sub_system(handle); - } - tracecmd_xml_end_system(handle); return 0; @@ -954,9 +939,7 @@ static int load_event_filter(TraceViewStore *store, } int trace_view_load_filters(struct tracecmd_xml_handle *handle, - GtkTreeView *trace_tree, - struct filter_task *task_filter, - struct filter_task *hide_tasks) + GtkTreeView *trace_tree) { struct tracecmd_xml_system *system; struct tracecmd_xml_system_node *syschild; @@ -984,12 +967,6 @@ int trace_view_load_filters(struct tracecmd_xml_handle *handle, if (strcmp(name, "EventFilter") == 0) load_event_filter(store, handle, syschild); - else if (strcmp(name, "TaskFilter") == 0) - trace_filter_load_task_filter(task_filter, handle, syschild); - - else if (strcmp(name, "HideTasks") == 0) - trace_filter_load_task_filter(hide_tasks, handle, syschild); - syschild = tracecmd_xml_node_next(syschild); } while (syschild); diff --git a/trace-view.h b/trace-view.h index b0ba7ed..81dac6f 100644 --- a/trace-view.h +++ b/trace-view.h @@ -67,12 +67,8 @@ void trace_view_search_setup(GtkBox *box, GtkTreeView *treeview); gint trace_view_get_selected_row(GtkWidget *treeview); int trace_view_save_filters(struct tracecmd_xml_handle *handle, - GtkTreeView *treeview, - struct filter_task *task_filter, - struct filter_task *hide_tasks); + GtkTreeView *treeview); int trace_view_load_filters(struct tracecmd_xml_handle *handle, - GtkTreeView *treeview, - struct filter_task *task_filter, - struct filter_task *hide_tasks); + GtkTreeView *treeview); #endif /* _TRACE_VIEW_H */ diff --git a/trace-xml.c b/trace-xml.c index 47cb3c9..62473fb 100644 --- a/trace-xml.c +++ b/trace-xml.c @@ -58,7 +58,8 @@ int tracecmd_xml_write_element(struct tracecmd_xml_handle *handle, return ret; } -struct tracecmd_xml_handle *tracecmd_xml_create(const char *name) +struct tracecmd_xml_handle *tracecmd_xml_create(const char *name, + const char *version) { struct tracecmd_xml_handle *handle; int ret; @@ -75,6 +76,11 @@ struct tracecmd_xml_handle *tracecmd_xml_create(const char *name) if (ret < 0) goto fail_close; + ret = xmlTextWriterStartElement(handle->writer, + BAD_CAST "KernelShark"); + if (ret < 0) + goto fail_close; + return handle; fail_close: @@ -85,7 +91,7 @@ struct tracecmd_xml_handle *tracecmd_xml_create(const char *name) } int tracecmd_xml_start_system(struct tracecmd_xml_handle *handle, - const char *system, const char *version) + const char *system) { int ret; @@ -95,10 +101,6 @@ int tracecmd_xml_start_system(struct tracecmd_xml_handle *handle, if (ret < 0) return ret; - ret = tracecmd_xml_write_element(handle, "Version", "%s", version); - if (ret < 0) - return ret; - return 0; } @@ -126,6 +128,7 @@ void tracecmd_xml_end_sub_system(struct tracecmd_xml_handle *handle) void tracecmd_xml_close(struct tracecmd_xml_handle *handle) { if (handle->writer) { + xmlTextWriterEndElement(handle->writer); xmlTextWriterEndDocument(handle->writer); xmlFreeTextWriter(handle->writer); } diff --git a/trace-xml.h b/trace-xml.h index 4006538..f84907d 100644 --- a/trace-xml.h +++ b/trace-xml.h @@ -25,12 +25,12 @@ struct tracecmd_xml_handle; struct tacecmd_xml_system; struct tacecmd_xml_system_node; -struct tracecmd_xml_handle *tracecmd_xml_create(const char *name); +struct tracecmd_xml_handle *tracecmd_xml_create(const char *name, const char *version); struct tracecmd_xml_handle *tracecmd_xml_open(const char *name); void tracecmd_xml_close(struct tracecmd_xml_handle *handle); int tracecmd_xml_start_system(struct tracecmd_xml_handle *handle, - const char *system, const char *version); + const char *system); void tracecmd_xml_end_system(struct tracecmd_xml_handle *handle); int tracecmd_xml_start_sub_system(struct tracecmd_xml_handle *handle, -- cgit v1.2.2