X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=lttv%2Fmodules%2Ftext%2FbatchAnalysis.c;h=6d6bfe0a70ff754c7dcc5c02a2434b29a53e2163;hb=922581a4a91dcb870a6168112a6198a1afacf0bb;hp=3ee4d021fc6539c4f804b086fd2bac7596a8f99e;hpb=70407e861d8430dbe06cc52e6fe4ed5c9cd0872a;p=lttv.git diff --git a/lttv/modules/text/batchAnalysis.c b/lttv/modules/text/batchAnalysis.c index 3ee4d021..6d6bfe0a 100644 --- a/lttv/modules/text/batchAnalysis.c +++ b/lttv/modules/text/batchAnalysis.c @@ -24,6 +24,7 @@ #endif #include +#include #include #include #include @@ -34,7 +35,9 @@ #include #include #include -#include +#include + +#include static LttvTraceset *traceset; @@ -51,14 +54,33 @@ static LttvHooks static char *a_trace; 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(bt_context_add_trace(lttv_traceset_get_context(traceset), + a_trace, + "ctf", + NULL, + NULL, + NULL) < 0) { + printf("Cannot add trace %s", a_trace); + } } @@ -68,7 +90,7 @@ static gboolean process_traceset(void *hook_data, void *call_data) LttvIAttribute *attributes = LTTV_IATTRIBUTE(lttv_global_attributes()); - LttvTracesetStats *tscs; + LttvTracesetStats *tscs = NULL; LttvTracesetState *tss; @@ -93,7 +115,7 @@ static gboolean process_traceset(void *hook_data, void *call_data) syncTraceset(tc); - lttv_state_add_event_hooks(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", @@ -132,12 +154,21 @@ 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); + /* Read as long a we do not reach the end (0) */ + unsigned int count; + unsigned int updated_count; + do { + count = lttv_process_traceset_middle(tc, + end, + G_MAXULONG, + NULL); + + updated_count = lttv_process_traceset_update(tc); + + sleep(a_live_update_period); + } while(count != 0 || updated_count > 0); //lttv_traceset_context_remove_hooks(tc, @@ -186,6 +217,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(); @@ -251,6 +296,8 @@ static void destroy() 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);