X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=lttv%2Fmodules%2Ftext%2FbatchAnalysis.c;h=cfd2bab72bd4fbb994f60258e8f9caed3779bd39;hb=3685e022fa515d5d17a4b8a81fa596408d0cd4ab;hp=e150f4d18db9c473dc113c45e1f50dfd17529eda;hpb=ccf1db700d7477f4cd825ac435e2632443ee51f2;p=lttv.git diff --git a/lttv/modules/text/batchAnalysis.c b/lttv/modules/text/batchAnalysis.c index e150f4d1..cfd2bab7 100644 --- a/lttv/modules/text/batchAnalysis.c +++ b/lttv/modules/text/batchAnalysis.c @@ -24,17 +24,23 @@ #endif #include +#include #include #include #include #include #include -#include +#include #include +#ifdef BABEL_CLEANUP #include #include +#endif #include +#ifdef BABEL_CLEANUP_SYNC #include +#endif +#include static LttvTraceset *traceset; @@ -48,17 +54,32 @@ static LttvHooks *event_hook, *main_hooks; -static char *a_trace; +static char *trace_path; static gboolean a_stats; +static gboolean a_live; +static int a_live_update_period; + +#define DEFAULT_LIVE_UPDATE_PERIOD 1 void lttv_trace_option(void *hook_data) { - LttTrace *trace; - - trace = ltt_trace_open(a_trace); + //LttTrace *trace; + //trace_collection *trace; + //format *fmt = bt_lookup_format(g_quark_from_static_string("ctf")); + /* + if(a_live) { + //trace = ltt_trace_open_live(a_trace); + } else { + bt_create_context(); + //trace = bt_add_trace(a_trace,"ctf"); + } if(trace == NULL) g_critical("cannot open trace %s", a_trace); - lttv_traceset_add(traceset, lttv_trace_new(trace)); + lttv_traceset_add(traceset, lttv_trace_new(trace));*/ + + if(lttv_traceset_add_path(traceset, trace_path) < 0) { + g_error("Cannot add trace %s", trace_path); + } } @@ -68,17 +89,18 @@ static gboolean process_traceset(void *hook_data, void *call_data) LttvIAttribute *attributes = LTTV_IATTRIBUTE(lttv_global_attributes()); - LttvTracesetStats *tscs; +#ifdef BABEL_CLEANUP + LttvTracesetStats *tscs = NULL; LttvTracesetState *tss; LttvTracesetContext *tc; - +#endif LttTime start, end; gboolean retval; g_info("BatchAnalysis begin process traceset"); - +#ifdef BABEL_CLEANUP if (a_stats) { tscs = g_object_new(LTTV_TRACESET_STATS_TYPE, NULL); tss = &tscs->parent; @@ -91,12 +113,13 @@ static gboolean process_traceset(void *hook_data, void *call_data) lttv_context_init(tc, traceset); - /* Disabled by Mathieu, does not build on x86_64 */ - /* syncTraceset(tc); */ - lttv_state_add_event_hooks(tc); + syncTraceset(tc); + + lttv_state_add_event_hooks(tss); if(a_stats) lttv_stats_add_event_hooks(tscs); + retval= lttv_iattribute_find_by_path(attributes, "filter/expression", LTTV_POINTER, &value_expression); g_assert(retval); @@ -116,16 +139,16 @@ static gboolean process_traceset(void *hook_data, void *call_data) //g_debug("Filter string: %s",((GString*)*(value_expression.v_pointer))->str); lttv_filter_append_expression(*(value_filter.v_pointer),((GString*)*(value_expression.v_pointer))->str); - +#endif //lttv_traceset_context_add_hooks(tc, //before_traceset, after_traceset, NULL, before_trace, after_trace, //NULL, before_tracefile, after_tracefile, NULL, before_event, after_event); - lttv_process_traceset_begin(tc, + + lttv_state_add_event_hooks(traceset); + lttv_process_traceset_begin(traceset, before_traceset, before_trace, - before_tracefile, - event_hook, - NULL); + event_hook); start.tv_sec = 0; start.tv_nsec = 0; @@ -133,35 +156,50 @@ static gboolean process_traceset(void *hook_data, void *call_data) end.tv_nsec = G_MAXULONG; g_info("BatchAnalysis process traceset"); - - lttv_process_traceset_seek_time(tc, start); - lttv_process_traceset_middle(tc, - end, - G_MAXULONG, - NULL); + + lttv_process_traceset_seek_time(traceset, start); + /* Read as long a we do not reach the end (0) */ + unsigned int count; + unsigned int updated_count; + do { + count = lttv_process_traceset_middle(traceset, + end, + G_MAXULONG, + NULL); + +#ifdef BABEL_CLEANUP + updated_count = lttv_process_traceset_update(tc); +#endif + + sleep(a_live_update_period); + } while(count != 0 +#ifdef BABEL_CLEANUP + || updated_count > 0 +#endif + ); //lttv_traceset_context_remove_hooks(tc, //before_traceset, after_traceset, NULL, before_trace, after_trace, //NULL, before_tracefile, after_tracefile, NULL, before_event, after_event); - lttv_process_traceset_end(tc, + lttv_process_traceset_end(traceset, after_traceset, after_trace, - after_tracefile, - event_hook, - NULL); + event_hook); g_info("BatchAnalysis destroy context"); - +#ifdef BABEL_CLEANUP lttv_filter_destroy(*(value_filter.v_pointer)); + lttv_state_remove_event_hooks(tss); if(a_stats) lttv_stats_remove_event_hooks(tscs); + lttv_context_fini(tc); if (a_stats) g_object_unref(tscs); else g_object_unref(tss); - +#endif g_info("BatchAnalysis end process traceset"); return FALSE; } @@ -179,7 +217,7 @@ static void init() lttv_option_add("trace", 't', "add a trace to the trace set to analyse", "pathname of the directory containing the trace", - LTTV_OPT_STRING, &a_trace, lttv_trace_option, NULL); + LTTV_OPT_STRING, &trace_path, lttv_trace_option, NULL); a_stats = FALSE; lttv_option_add("stats", 's', @@ -187,6 +225,20 @@ static void init() "", LTTV_OPT_NONE, &a_stats, NULL, NULL); + a_live = FALSE; + lttv_option_add("live", 0, + "define if the traceset is receiving live informations", + "", + LTTV_OPT_NONE, &a_live, NULL, NULL); + + a_live_update_period = DEFAULT_LIVE_UPDATE_PERIOD; + lttv_option_add("live-period", 0, + "period to update a live trace", + "in seconds", + LTTV_OPT_INT, + &a_live_update_period, + NULL, NULL); + traceset = lttv_traceset_new(); @@ -244,14 +296,18 @@ static void init() static void destroy() { +#ifdef BABEL_CLEANUP guint i, nb; LttvTrace *trace; +#endif g_info("Destroy batchAnalysis.c"); lttv_option_remove("trace"); lttv_option_remove("stats"); + lttv_option_remove("live"); + lttv_option_remove("live-period"); lttv_hooks_destroy(before_traceset); lttv_hooks_destroy(after_traceset); @@ -264,18 +320,18 @@ static void destroy() lttv_hooks_destroy(event_hook); lttv_hooks_remove_data(main_hooks, process_traceset, NULL); +#ifdef BABEL_CLEANUP nb = lttv_traceset_number(traceset); for(i = 0 ; i < nb ; i++) { trace = lttv_traceset_get(traceset, i); ltt_trace_close(lttv_trace(trace)); - /* This will be done by lttv_traceset_destroy */ - //lttv_trace_destroy(trace); + lttv_trace_destroy(trace); } - +#endif lttv_traceset_destroy(traceset); } LTTV_MODULE("batchAnalysis", "Batch processing of a trace", \ "Run through a trace calling all the registered hooks", \ - /* init, destroy, "state", "stats", "option","textFilter", "sync") */ - init, destroy, "state", "stats", "option","textFilter") + init, destroy, "state", "option") +//TODO ybrosseau 2012-05-15 reenable textFilter, stats, sync