1 /* This file is part of the Linux Trace Toolkit viewer
2 * Copyright (C) 2003-2004 Michel Dagenais
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License Version 2 as
6 * published by the Free Software Foundation;
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
20 #include <lttv/hook.h>
21 #include <lttv/module.h>
22 #include <lttv/lttv.h>
23 #include <lttv/iattribute.h>
24 #include <lttv/attribute.h>
25 #include <lttv/option.h>
26 #include <lttv/traceset.h>
27 #include <ltt/trace.h>
31 void lttv_option_init(int argc
, char **argv
);
32 void lttv_option_destroy();
34 void lttv_module_init(int argc
, char **argv
);
35 void lttv_module_destroy();
37 void lttv_state_init(int argc
, char **argv
);
38 void lttv_state_destroy();
40 void lttv_stats_init(int argc
, char **argv
);
41 void lttv_stats_destroy();
43 /* The main program maintains a few central data structures and relies
44 on modules for the rest. These data structures may be accessed by modules
45 through an exported API */
47 static LttvIAttribute
*attributes
;
67 static void lttv_module_option(void *hook_data
);
69 static void lttv_module_path_option(void *hook_data
);
71 static void lttv_verbose(void *hook_data
);
73 static void lttv_debug(void *hook_data
);
75 static void lttv_help(void *hook_data
);
77 /* This is the handler to specify when we dont need all the debugging
78 messages. It receives the message and does nothing. */
80 void ignore_and_drop_message(const gchar
*log_domain
, GLogLevelFlags log_level
,
81 const gchar
*message
, gpointer user_data
) {
85 /* Since everything is done in modules, the main program only takes care
86 of the infrastructure. */
88 int main(int argc
, char **argv
) {
90 LttvAttributeValue value
;
93 g_mem_set_vtable(glib_mem_profiler_table
);
94 g_message("Memory summary before main");
98 g_log_set_handler(NULL
, G_LOG_LEVEL_INFO
, ignore_and_drop_message
, NULL
);
99 g_log_set_handler(NULL
, G_LOG_LEVEL_DEBUG
, ignore_and_drop_message
, NULL
);
102 //g_type_init_with_debug_flags (G_TYPE_DEBUG_OBJECTS | G_TYPE_DEBUG_SIGNALS);
104 attributes
= LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE
, NULL
));
106 before_options
= lttv_hooks_new();
107 after_options
= lttv_hooks_new();
108 before_main
= lttv_hooks_new();
109 after_main
= lttv_hooks_new();
111 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/options/before",
112 LTTV_POINTER
, &value
));
113 *(value
.v_pointer
) = before_options
;
114 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/options/after",
115 LTTV_POINTER
, &value
));
116 *(value
.v_pointer
) = after_options
;
117 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/main/before",
118 LTTV_POINTER
, &value
));
119 *(value
.v_pointer
) = before_main
;
120 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/main/after",
121 LTTV_POINTER
, &value
));
122 *(value
.v_pointer
) = after_main
;
125 /* Initialize the command line options processing */
129 lttv_option_init(argc
,argv
);
130 lttv_module_init(argc
,argv
);
131 lttv_state_init(argc
,argv
);
132 lttv_stats_init(argc
,argv
);
134 /* Initialize the module loading */
136 lttv_module_path_add(PACKAGE_PLUGIN_DIR
);
138 /* Add some built-in options */
140 lttv_option_add("module",'m', "load a module", "name of module to load",
141 LTTV_OPT_STRING
, &a_module
, lttv_module_option
, NULL
);
143 lttv_option_add("modules-path", 'L',
144 "add a directory to the module search path",
145 "directory to add to the path", LTTV_OPT_STRING
, &a_module_path
,
146 lttv_module_path_option
, NULL
);
148 lttv_option_add("help",'h', "basic help", "none",
149 LTTV_OPT_NONE
, NULL
, lttv_help
, NULL
);
152 lttv_option_add("verbose",'v', "print information messages", "none",
153 LTTV_OPT_NONE
, NULL
, lttv_verbose
, NULL
);
156 lttv_option_add("debug",'d', "print debugging messages", "none",
157 LTTV_OPT_NONE
, NULL
, lttv_debug
, NULL
);
160 lttv_hooks_call(before_options
, NULL
);
161 lttv_option_parse(argc
, argv
);
162 lttv_hooks_call(after_options
, NULL
);
164 lttv_hooks_call(before_main
, NULL
);
165 lttv_hooks_call(after_main
, NULL
);
167 lttv_stats_destroy();
168 lttv_state_destroy();
169 lttv_module_destroy();
170 lttv_option_destroy();
172 lttv_hooks_destroy(before_options
);
173 lttv_hooks_destroy(after_options
);
174 lttv_hooks_destroy(before_main
);
175 lttv_hooks_destroy(after_main
);
176 g_object_unref(attributes
);
179 g_message("Memory summary after main");
185 LttvAttribute
*lttv_global_attributes()
187 return (LttvAttribute
*)attributes
;
191 void lttv_module_option(void *hook_data
)
193 lttv_module_load(a_module
,a_argc
,a_argv
);
197 void lttv_module_path_option(void *hook_data
)
199 lttv_module_path_add(a_module_path
);
203 void lttv_verbose(void *hook_data
)
205 g_log_set_handler(NULL
, G_LOG_LEVEL_INFO
, g_log_default_handler
, NULL
);
206 g_info("Logging set to include INFO level messages");
209 void lttv_debug(void *hook_data
)
211 g_log_set_handler(NULL
, G_LOG_LEVEL_DEBUG
, g_log_default_handler
, NULL
);
212 g_info("Logging set to include DEBUG level messages");
215 void lttv_help(void *hook_data
)
217 printf("Linux Trace Toolkit Visualizer\n");
219 lttv_option_show_help();
225 - Make it easier to change modules from builtin to externally loaded.
227 have: MODULE_INFO(name, init, destroy, { require} ) in each module.
228 Maintain the list of builtin modules and search these first (or
229 optionally last). Add the lib prefix if needed to avoid having to
230 specify libbatchAnalysis instead of batchAnalysis.
232 - Define formally traceset/trace in the GUI for the user and decide how
233 trace/traceset sharing goes in the application.
235 - Use appropriately the new functions in time.h
237 - remove the separate tracefiles (control/per cpu) arrays/loops in context.
239 - split processTrace into context.c and processTrace.c
241 - check spelling conventions.
243 - get all the copyright notices.
245 - remove all the warnings.
247 - get all the .h files properly doxygen commented to produce useful documents.
249 - have an intro/architecture document.
251 - write a tutorial */
This page took 0.035025 seconds and 5 git commands to generate.