X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmain%2Fstats.c;h=c577ab77bb2112df29c52c41ae5502edeff20a30;hb=338d4282832c1e0002ccdeeb36555271959dd57b;hp=0c68d37715d9f5304b1252b5da4a5ef94b505e4d;hpb=9c3123113f395e7ea634c522e340604331359e7e;p=lttv.git diff --git a/ltt/branches/poly/lttv/main/stats.c b/ltt/branches/poly/lttv/main/stats.c index 0c68d377..c577ab77 100644 --- a/ltt/branches/poly/lttv/main/stats.c +++ b/ltt/branches/poly/lttv/main/stats.c @@ -18,7 +18,9 @@ #include +#include #include +#include #include #include #include @@ -52,7 +54,7 @@ find_event_tree(LttvTracefileStats *tfcs, GQuark process, GQuark cpu, static void init(LttvTracesetStats *self, LttvTraceset *ts) { - guint i, j, nb_trace, nb_control, nb_per_cpu, nb_tracefile; + guint i, j, nb_trace, nb_tracefile; LttvTraceContext *tc; @@ -74,17 +76,11 @@ init(LttvTracesetStats *self, LttvTraceset *ts) tcs = (LttvTraceStats *)tc = (LTTV_TRACESET_CONTEXT(self)->traces[i]); tcs->stats = g_object_new(LTTV_ATTRIBUTE_TYPE, NULL); - nb_control = ltt_trace_control_tracefile_number(tc->t); - nb_per_cpu = ltt_trace_per_cpu_tracefile_number(tc->t); - nb_tracefile = nb_control + nb_per_cpu; - for(j = 0 ; j < nb_tracefile ; j++) { - if(j < nb_control) { - tfcs = LTTV_TRACEFILE_STATS(tc->control_tracefiles[j]); - } - else { - tfcs = LTTV_TRACEFILE_STATS(tc->per_cpu_tracefiles[j - nb_control]); - } + nb_tracefile = ltt_trace_control_tracefile_number(tc->t) + + ltt_trace_per_cpu_tracefile_number(tc->t); + for(j = 0 ; j < nb_tracefile ; j++) { + tfcs = LTTV_TRACEFILE_STATS(tc->tracefiles[j]); tfcs->stats = g_object_new(LTTV_ATTRIBUTE_TYPE, NULL); find_event_tree(tfcs, LTTV_STATS_PROCESS_UNKNOWN, tfcs->parent.cpu_name, LTTV_STATE_MODE_UNKNOWN, @@ -120,17 +116,11 @@ fini(LttvTracesetStats *self) tcs = (LttvTraceStats *)tc = (LTTV_TRACESET_CONTEXT(self)->traces[i]); lttv_attribute_recursive_free(tcs->stats); - nb_tracefile = ltt_trace_control_tracefile_number(tc->t); - for(j = 0 ; j < nb_tracefile ; j++) { - tfcs = (LttvTracefileStats *)tfc = tc->control_tracefiles[j]; - lttv_attribute_recursive_free(tfcs->stats); - tfcs->current_events_tree = NULL; - tfcs->current_event_types_tree = NULL; - } + nb_tracefile = ltt_trace_control_tracefile_number(tc->t) + + ltt_trace_per_cpu_tracefile_number(tc->t); - nb_tracefile = ltt_trace_per_cpu_tracefile_number(tc->t); for(j = 0 ; j < nb_tracefile ; j++) { - tfcs = (LttvTracefileStats *)tfc = tc->per_cpu_tracefiles[j]; + tfcs = (LttvTracefileStats *)tfc = tc->tracefiles[j]; lttv_attribute_recursive_free(tfcs->stats); tfcs->current_events_tree = NULL; tfcs->current_event_types_tree = NULL; @@ -202,7 +192,7 @@ lttv_traceset_stats_get_type(void) (GClassInitFunc) traceset_stats_class_init, /* class_init */ NULL, /* class_finalize */ NULL, /* class_data */ - sizeof (LttvTracesetContext), + sizeof (LttvTracesetStats), 0, /* n_preallocs */ (GInstanceInitFunc) traceset_stats_instance_init /* instance_init */ }; @@ -478,7 +468,7 @@ gboolean before_schedchange(void *hook_data, void *call_data) /* get the information for the process scheduled in */ - process = lttv_state_find_process(&(tfcs->parent), pid_in); + process = lttv_state_find_process_or_create(&(tfcs->parent), pid_in); find_event_tree(tfcs, process->pid_time, tfcs->parent.cpu_name, process->state->t, process->state->n, &(tfcs->current_events_tree), @@ -630,7 +620,7 @@ lttv_stats_add_event_hooks(LttvTracesetStats *self) { LttvTraceset *traceset = self->parent.parent.ts; - guint i, j, k, nb_trace, nb_control, nb_per_cpu, nb_tracefile; + guint i, j, k, nb_trace, nb_tracefile; LttFacility *f; @@ -719,18 +709,11 @@ lttv_stats_add_event_hooks(LttvTracesetStats *self) /* Add these hooks to each before_event_by_id hooks list */ - nb_control = ltt_trace_control_tracefile_number(ts->parent.parent.t); - nb_per_cpu = ltt_trace_per_cpu_tracefile_number(ts->parent.parent.t); - nb_tracefile = nb_control + nb_per_cpu; - for(j = 0 ; j < nb_tracefile ; j++) { - if(j < nb_control) { - tfs = LTTV_TRACEFILE_STATS(ts->parent.parent.control_tracefiles[j]); - } - else { - tfs = LTTV_TRACEFILE_STATS(ts->parent.parent.per_cpu_tracefiles[ - j-nb_control]); - } + nb_tracefile = ltt_trace_control_tracefile_number(ts->parent.parent.t) + + ltt_trace_per_cpu_tracefile_number(ts->parent.parent.t); + for(j = 0 ; j < nb_tracefile ; j++) { + tfs = LTTV_TRACEFILE_STATS(ts->parent.parent.tracefiles[j]); lttv_hooks_add(tfs->parent.parent.after_event, every_event, NULL); for(k = 0 ; k < before_hooks->len ; k++) { @@ -761,7 +744,7 @@ lttv_stats_remove_event_hooks(LttvTracesetStats *self) { LttvTraceset *traceset = self->parent.parent.ts; - guint i, j, k, nb_trace, nb_control, nb_per_cpu, nb_tracefile; + guint i, j, k, nb_trace, nb_tracefile; LttvTraceStats *ts; @@ -787,18 +770,11 @@ lttv_stats_remove_event_hooks(LttvTracesetStats *self) /* Add these hooks to each before_event_by_id hooks list */ - nb_control = ltt_trace_control_tracefile_number(ts->parent.parent.t); - nb_per_cpu = ltt_trace_per_cpu_tracefile_number(ts->parent.parent.t); - nb_tracefile = nb_control + nb_per_cpu; - for(j = 0 ; j < nb_tracefile ; j++) { - if(j < nb_control) { - tfs = LTTV_TRACEFILE_STATS(ts->parent.parent.control_tracefiles[j]); - } - else { - tfs =LTTV_TRACEFILE_STATS(ts->parent.parent.per_cpu_tracefiles[ - j-nb_control]); - } + nb_tracefile = ltt_trace_control_tracefile_number(ts->parent.parent.t) + + ltt_trace_per_cpu_tracefile_number(ts->parent.parent.t); + for(j = 0 ; j < nb_tracefile ; j++) { + tfs = LTTV_TRACEFILE_STATS(ts->parent.parent.tracefiles[j]); lttv_hooks_remove_data(tfs->parent.parent.after_event, every_event, NULL); @@ -815,7 +791,7 @@ lttv_stats_remove_event_hooks(LttvTracesetStats *self) hook.id), hook.h, &g_array_index(after_hooks, LttvTraceHook, k)); } } - g_critical("lttv_stats_remove_event_hooks()"); + g_debug("lttv_stats_remove_event_hooks()"); g_array_free(before_hooks, TRUE); g_array_free(after_hooks, TRUE); } @@ -823,27 +799,6 @@ lttv_stats_remove_event_hooks(LttvTracesetStats *self) } -void lttv_stats_init(int argc, char **argv) -{ - LTTV_STATS_PROCESS_UNKNOWN = g_quark_from_string("unknown process"); - LTTV_STATS_PROCESSES = g_quark_from_string("processes"); - LTTV_STATS_CPU = g_quark_from_string("cpu"); - LTTV_STATS_MODE_TYPES = g_quark_from_string("mode_types"); - LTTV_STATS_MODES = g_quark_from_string("modes"); - LTTV_STATS_SUBMODES = g_quark_from_string("submodes"); - LTTV_STATS_EVENT_TYPES = g_quark_from_string("event_types"); - LTTV_STATS_CPU_TIME = g_quark_from_string("cpu time"); - LTTV_STATS_ELAPSED_TIME = g_quark_from_string("elapsed time"); - LTTV_STATS_EVENTS = g_quark_from_string("events"); - LTTV_STATS_EVENTS_COUNT = g_quark_from_string("events count"); - LTTV_STATS_BEFORE_HOOKS = g_quark_from_string("saved stats before hooks"); - LTTV_STATS_AFTER_HOOKS = g_quark_from_string("saved stats after hooks"); -} - -void lttv_stats_destroy() -{ -} - void lttv_stats_save_attribute(LttvAttribute *attr, char *indent, FILE * fp) { LttvAttributeType type; @@ -1149,7 +1104,7 @@ gboolean lttv_stats_load_statistics(LttvTracesetStats *self) char filename[BUF_SIZE]; GMarkupParseContext * context; - GError * error; + GError * error = NULL; GMarkupParser markup_parser = { stats_parser_start_element, @@ -1196,3 +1151,30 @@ gboolean lttv_stats_load_statistics(LttvTracesetStats *self) return TRUE; } + + +static void module_init() +{ + LTTV_STATS_PROCESS_UNKNOWN = g_quark_from_string("unknown process"); + LTTV_STATS_PROCESSES = g_quark_from_string("processes"); + LTTV_STATS_CPU = g_quark_from_string("cpu"); + LTTV_STATS_MODE_TYPES = g_quark_from_string("mode_types"); + LTTV_STATS_MODES = g_quark_from_string("modes"); + LTTV_STATS_SUBMODES = g_quark_from_string("submodes"); + LTTV_STATS_EVENT_TYPES = g_quark_from_string("event_types"); + LTTV_STATS_CPU_TIME = g_quark_from_string("cpu time"); + LTTV_STATS_ELAPSED_TIME = g_quark_from_string("elapsed time"); + LTTV_STATS_EVENTS = g_quark_from_string("events"); + LTTV_STATS_EVENTS_COUNT = g_quark_from_string("events count"); + LTTV_STATS_BEFORE_HOOKS = g_quark_from_string("saved stats before hooks"); + LTTV_STATS_AFTER_HOOKS = g_quark_from_string("saved stats after hooks"); +} + +static void module_destroy() +{ +} + + +LTTV_MODULE("stats", "Compute processes statistics", \ + "Accumulate statistics for event types, processes and CPUs", \ + module_init, module_destroy, "state");