X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmain.c;h=7da2a99d46452f7e614875b51ece887249b166ef;hb=d888c9c8f4c3e7b4e1516fca135b5be62f7aeea3;hp=b484bbc1e58b5bcef54bcd8e207af3c9b8046181;hpb=4accaa97805e5d7fe37cb6b9f60c9e62869afdb3;p=lttv.git diff --git a/ltt/branches/poly/lttv/main.c b/ltt/branches/poly/lttv/main.c index b484bbc1..7da2a99d 100644 --- a/ltt/branches/poly/lttv/main.c +++ b/ltt/branches/poly/lttv/main.c @@ -1,50 +1,56 @@ -#include "lttv.h" -#include "trace.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include -/* The main program maintains a few central data structures and relies - on modules for the rest. These data structures may be accessed by modules - through an exported API */ +void lttv_option_init(int argc, char **argv); +void lttv_option_destroy(); -/* Extensible array of popt command line options. Modules add options as - they are loaded and initialized. */ +void lttv_module_init(int argc, char **argv); +void lttv_module_destroy(); +void lttv_state_init(int argc, char **argv); +void lttv_state_destroy(); -static lttv_attributes *attributes_global; +/* The main program maintains a few central data structures and relies + on modules for the rest. These data structures may be accessed by modules + through an exported API */ -static lttv_hooks - *hooks_init_after, - *hooks_program_before, - *hooks_program_main, - *hooks_program_after; +static LttvIAttribute *attributes; -// trace sets has to be put one in each new window_traceset -static lttv_trace_set *traces; +static LttvHooks + *before_options, + *after_options, + *before_main, + *after_main; -static char *aModule, *aPath, *aTrace; +static char + *a_module, + *a_module_path; -static int aArgc; +static int a_argc; -static char **aArgv; +static char **a_argv; static void lttv_module_option(void *hook_data); static void lttv_module_path_option(void *hook_data); -static void lttv_trace_option(void *hook_data); - -#ifdef MEMDEBUG -extern struct GMemVTable *glib_mem_profiler_table; -#endif +static void lttv_help(void); /* Since everything is done in modules, the main program only takes care of the infrastructure. */ int main(int argc, char **argv) { - aArgc = argc; - aArgv = argv; + LttvAttributeValue value; #ifdef MEMDEBUG g_mem_set_vtable(glib_mem_profiler_table); @@ -52,35 +58,35 @@ int main(int argc, char **argv) { g_mem_profile(); #endif - attributes_global = lttv_attributes_new(); - -// traces = lttv_trace_set_new(); -// lttv_attributes_set_pointer_pathname(attributes_global, "trace_set/default", traces); + g_type_init(); + //g_type_init_with_debug_flags (G_TYPE_DEBUG_OBJECTS | G_TYPE_DEBUG_SIGNALS); - /* Initialize the hooks */ + attributes = LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE, NULL)); - hooks_init_after = lttv_hooks_new(); - lttv_attributes_set_pointer_pathname(attributes_global, "hooks/init/after", - hooks_init_after); + before_options = lttv_hooks_new(); + after_options = lttv_hooks_new(); + before_main = lttv_hooks_new(); + after_main = lttv_hooks_new(); + g_assert(lttv_iattribute_find_by_path(attributes, "hooks/options/before", + LTTV_POINTER, &value)); + *(value.v_pointer) = before_options; + g_assert(lttv_iattribute_find_by_path(attributes, "hooks/options/after", + LTTV_POINTER, &value)); + *(value.v_pointer) = after_options; + g_assert(lttv_iattribute_find_by_path(attributes, "hooks/main/before", + LTTV_POINTER, &value)); + *(value.v_pointer) = before_main; + g_assert(lttv_iattribute_find_by_path(attributes, "hooks/main/after", + LTTV_POINTER, &value)); + *(value.v_pointer) = after_main; - hooks_program_before = lttv_hooks_new(); - lttv_attributes_set_pointer_pathname(attributes_global, "hooks/program/before", - hooks_program_before); - - hooks_program_main = lttv_hooks_new(); - lttv_attributes_set_pointer_pathname(attributes_global, "hooks/program/main", - hooks_program_main); - - hooks_program_after = lttv_hooks_new(); - lttv_attributes_set_pointer_pathname(attributes_global, "hooks/program/after", - hooks_program_after); /* Initialize the command line options processing */ lttv_option_init(argc,argv); lttv_module_init(argc,argv); - // FIXME lttv_analyse_init(argc,argv); + lttv_state_init(argc,argv); /* Initialize the module loading */ @@ -89,56 +95,62 @@ int main(int argc, char **argv) { /* Add some built-in options */ lttv_option_add("module",'m', "load a module", "name of module to load", - LTTV_OPT_STRING, &aModule, lttv_module_option, NULL); + LTTV_OPT_STRING, &a_module, lttv_module_option, NULL); lttv_option_add("modules-path", 'L', "add a directory to the module search path", - "directory to add to the path", LTTV_OPT_STRING, &aPath, + "directory to add to the path", LTTV_OPT_STRING, &a_module_path, lttv_module_path_option, NULL); + + lttv_option_add("help",'h', "basic help", "none", + LTTV_OPT_NONE, NULL, lttv_help, NULL); + + + lttv_hooks_call(before_options, NULL); + lttv_option_parse(argc, argv); + lttv_hooks_call(after_options, NULL); - lttv_option_add("trace", 't', - "add a trace to the trace set to analyse", - "pathname of the directory containing the trace", - LTTV_OPT_STRING, &aTrace, lttv_trace_option, NULL); - - lttv_hooks_call(hooks_init_after, NULL); - - lttv_hooks_call(hooks_program_before, NULL); - lttv_hooks_call(hooks_program_main, NULL); - lttv_hooks_call(hooks_program_after, NULL); + lttv_hooks_call(before_main, NULL); + lttv_hooks_call(after_main, NULL); - /* Finalize the command line options processing */ + lttv_state_destroy(); lttv_module_destroy(); lttv_option_destroy(); - // FIXME lttv_analyse_destroy(); - lttv_attributes_destroy(attributes_global); + + lttv_hooks_destroy(before_options); + lttv_hooks_destroy(after_options); + lttv_hooks_destroy(before_main); + lttv_hooks_destroy(after_main); + g_object_unref(attributes); #ifdef MEMDEBUG g_message("Memory summary after main"); g_mem_profile(); #endif +} + - +LttvAttribute *lttv_global_attributes() +{ + return (LttvAttribute*)attributes; } + void lttv_module_option(void *hook_data) { - lttv_module_load(aModule,aArgc,aArgv,STANDALONE); + lttv_module_load(a_module,a_argc,a_argv); } void lttv_module_path_option(void *hook_data) { - lttv_module_path_add(aPath); + lttv_module_path_add(a_module_path); } - -void lttv_trace_option(void *hook_data) -{ -// lttv_trace *trace; - -// trace = lttv_trace_open(aTrace); -// if(trace == NULL) g_critical("cannot open trace %s", aTrace); -// lttv_trace_set_add(traces, trace); +void lttv_help() +{ + printf("Linux Trace Toolkit Visualizer\n"); + printf("\n"); + lttv_option_show_help(); + printf("\n"); } -