aboutsummaryrefslogtreecommitdiffstats
path: root/trace-view.c
diff options
context:
space:
mode:
Diffstat (limited to 'trace-view.c')
-rw-r--r--trace-view.c116
1 files changed, 116 insertions, 0 deletions
diff --git a/trace-view.c b/trace-view.c
index c183b19..094f226 100644
--- a/trace-view.c
+++ b/trace-view.c
@@ -918,3 +918,119 @@ int trace_view_save_filters(struct tracecmd_xml_handle *handle,
918 918
919 return 0; 919 return 0;
920} 920}
921
922static int load_event_filter(TraceViewStore *store,
923 struct tracecmd_xml_handle *handle,
924 struct tracecmd_xml_system_node *node)
925{
926 struct tracecmd_xml_system_node *child;
927 struct event_filter *event_filter;
928 const char *name;
929 const char *value;
930
931 event_filter = trace_view_store_get_event_filter(store);
932
933 child = tracecmd_xml_node_child(node);
934 name = tracecmd_xml_node_type(child);
935 if (strcmp(name, "FilterType") != 0)
936 return -1;
937
938 value = tracecmd_xml_node_value(handle, child);
939 /* Do nothing with all events enabled */
940 if (strcmp(value, "all events") == 0)
941 return 0;
942
943 node = tracecmd_xml_node_next(child);
944 if (!node)
945 return -1;
946
947 trace_view_store_clear_all_events_enabled(store);
948
949 trace_filter_load_events(event_filter, handle, node);
950
951 return 0;
952}
953
954static int load_task_filter(TraceViewStore *store,
955 struct tracecmd_xml_handle *handle,
956 struct tracecmd_xml_system_node *node)
957{
958 struct tracecmd_xml_system_node *child;
959 const char *name;
960 const char *value;
961
962 child = tracecmd_xml_node_child(node);
963 name = tracecmd_xml_node_type(child);
964 if (strcmp(name, "FilterType") == 0) {
965 value = tracecmd_xml_node_value(handle, child);
966 printf("value = %s\n", value);
967 }
968
969 return 0;
970}
971
972static int load_hide_tasks(TraceViewStore *store,
973 struct tracecmd_xml_handle *handle,
974 struct tracecmd_xml_system_node *node)
975{
976 struct tracecmd_xml_system_node *child;
977 const char *name;
978 const char *value;
979
980 child = tracecmd_xml_node_child(node);
981 name = tracecmd_xml_node_type(child);
982 if (strcmp(name, "FilterType") == 0) {
983 value = tracecmd_xml_node_value(handle, child);
984 printf("value = %s\n", value);
985 }
986
987 return 0;
988}
989
990int trace_view_load_filters(struct tracecmd_xml_handle *handle,
991 GtkTreeView *trace_tree)
992{
993 struct tracecmd_xml_system *system;
994 struct tracecmd_xml_system_node *syschild;
995 GtkTreeModel *model;
996 TraceViewStore *store;
997 const char *name;
998
999 model = gtk_tree_view_get_model(trace_tree);
1000 if (!model)
1001 return -1;
1002
1003 store = TRACE_VIEW_STORE(model);
1004
1005 system = tracecmd_xml_find_system(handle, "TraceView");
1006 if (!system)
1007 return -1;
1008
1009 syschild = tracecmd_xml_system_node(system);
1010 if (!syschild)
1011 goto out_free_sys;
1012
1013 do {
1014 name = tracecmd_xml_node_type(syschild);
1015
1016 if (strcmp(name, "EventFilter") == 0)
1017 load_event_filter(store, handle, syschild);
1018
1019 else if (strcmp(name, "TaskFilter") == 0)
1020 load_task_filter(store, handle, syschild);
1021
1022 else if (strcmp(name, "HideTasks") == 0)
1023 load_hide_tasks(store, handle, syschild);
1024
1025 syschild = tracecmd_xml_node_next(syschild);
1026 } while (syschild);
1027
1028 tracecmd_xml_free_system(system);
1029
1030 update_rows(trace_tree, store);
1031 return 0;
1032
1033 out_free_sys:
1034 tracecmd_xml_free_system(system);
1035 return -1;
1036}