3 #include <lttv/module.h>
5 #include <lttv/iattribute.h>
6 #include <lttv/attribute.h>
7 #include <lttv/option.h>
8 #include <lttv/traceset.h>
11 void lttv_option_init(int argc
, char **argv
);
12 void lttv_option_destroy();
14 void lttv_module_init(int argc
, char **argv
);
15 void lttv_module_destroy();
17 void lttv_state_init(int argc
, char **argv
);
18 void lttv_state_destroy();
20 /* The main program maintains a few central data structures and relies
21 on modules for the rest. These data structures may be accessed by modules
22 through an exported API */
24 static LttvIAttribute
*attributes
;
40 static void lttv_module_option(void *hook_data
);
42 static void lttv_module_path_option(void *hook_data
);
45 /* Since everything is done in modules, the main program only takes care
46 of the infrastructure. */
48 int main(int argc
, char **argv
) {
50 LttvAttributeValue value
;
53 g_mem_set_vtable(glib_mem_profiler_table
);
54 g_message("Memory summary before main");
59 //g_type_init_with_debug_flags (G_TYPE_DEBUG_OBJECTS | G_TYPE_DEBUG_SIGNALS);
61 attributes
= LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE
, NULL
));
63 before_options
= lttv_hooks_new();
64 after_options
= lttv_hooks_new();
65 before_main
= lttv_hooks_new();
66 after_main
= lttv_hooks_new();
68 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/options/before",
69 LTTV_POINTER
, &value
));
70 *(value
.v_pointer
) = before_options
;
71 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/options/after",
72 LTTV_POINTER
, &value
));
73 *(value
.v_pointer
) = after_options
;
74 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/main/before",
75 LTTV_POINTER
, &value
));
76 *(value
.v_pointer
) = before_main
;
77 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/main/after",
78 LTTV_POINTER
, &value
));
79 *(value
.v_pointer
) = after_main
;
82 /* Initialize the command line options processing */
84 lttv_option_init(argc
,argv
);
85 lttv_module_init(argc
,argv
);
86 lttv_state_init(argc
,argv
);
88 /* Initialize the module loading */
90 lttv_module_path_add("/usr/lib/lttv/plugins");
92 /* Add some built-in options */
94 lttv_option_add("module",'m', "load a module", "name of module to load",
95 LTTV_OPT_STRING
, &a_module
, lttv_module_option
, NULL
);
97 lttv_option_add("modules-path", 'L',
98 "add a directory to the module search path",
99 "directory to add to the path", LTTV_OPT_STRING
, &a_module_path
,
100 lttv_module_path_option
, NULL
);
102 lttv_hooks_call(before_options
, NULL
);
103 lttv_option_parse(argc
, argv
);
104 lttv_hooks_call(after_options
, NULL
);
106 lttv_hooks_call(before_main
, NULL
);
107 lttv_hooks_call(after_main
, NULL
);
109 lttv_state_destroy();
110 lttv_module_destroy();
111 lttv_option_destroy();
113 lttv_hooks_destroy(before_options
);
114 lttv_hooks_destroy(after_options
);
115 lttv_hooks_destroy(before_main
);
116 lttv_hooks_destroy(after_main
);
117 g_object_unref(attributes
);
120 g_message("Memory summary after main");
126 LttvAttribute
*lttv_global_attributes()
128 return (LttvAttribute
*)attributes
;
132 void lttv_module_option(void *hook_data
)
134 lttv_module_load(a_module
,a_argc
,a_argv
);
138 void lttv_module_path_option(void *hook_data
)
140 lttv_module_path_add(a_module_path
);
This page took 0.078556 seconds and 4 git commands to generate.