X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Flttv%2Fstats.c;h=53337786e3e84d6804957eed2f9aaa1ebb51e37f;hb=79257ba540581e198c9d9b047fe0738a25c324ff;hp=bfd88d4637562de4954f9ab4d193467e5bb5cb1f;hpb=cb03932ac8527313696af07dba4404603620c844;p=lttv.git diff --git a/ltt/branches/poly/lttv/lttv/stats.c b/ltt/branches/poly/lttv/lttv/stats.c index bfd88d46..53337786 100644 --- a/ltt/branches/poly/lttv/lttv/stats.c +++ b/ltt/branches/poly/lttv/lttv/stats.c @@ -28,6 +28,7 @@ #include #include #include +#include #define BUF_SIZE 256 @@ -68,6 +69,7 @@ init(LttvTracesetStats *self, LttvTraceset *ts) LttvTracefileContext *tfc; + LttvTracefileContext **tfs; LttvTracefileStats *tfcs; LttTime timestamp = {0,0}; @@ -96,8 +98,8 @@ init(LttvTracesetStats *self, LttvTraceset *ts) nb_trace = lttv_traceset_number(ts); for(i = 0 ; i < nb_trace ; i++) { - tc = (LTTV_TRACESET_CONTEXT(self)->traces[i]); - tcs = (LttvTraceStats *)tc; + tc = self->parent.parent.traces[i]; + tcs = LTTV_TRACE_STATS(tc); tcs->stats = lttv_attribute_find_subdir(tcs->parent.parent.t_a,LTTV_STATS); tracefiles_stats = lttv_attribute_find_subdir(tcs->parent.parent.t_a, @@ -113,8 +115,9 @@ init(LttvTracesetStats *self, LttvTraceset *ts) nb_tracefile = tc->tracefiles->len; for(j = 0 ; j < nb_tracefile ; j++) { - tfcs = LTTV_TRACEFILE_STATS(g_array_index(tc->tracefiles, - LttvTracefileContext*, j)); + tfs = &g_array_index(tc->tracefiles, + LttvTracefileContext*, j); + tfcs = LTTV_TRACEFILE_STATS(*tfs); tfcs->stats = lttv_attribute_find_subdir(tracefiles_stats, tfcs->parent.cpu_name); find_event_tree(tfcs, LTTV_STATS_PROCESS_UNKNOWN, @@ -372,7 +375,7 @@ find_event_tree(LttvTracefileStats *tfcs, { LttvAttribute *a; - LttvTraceStats *tcs = LTTV_TRACE_STATS(tfcs->parent.parent.t_context); + LttvTraceStats *tcs = (LttvTraceStats*)tfcs->parent.parent.t_context; a = lttv_attribute_find_subdir(tcs->stats, LTTV_STATS_PROCESSES); a = lttv_attribute_find_subdir(a, pid_time); a = lttv_attribute_find_subdir(a, LTTV_STATS_CPU); @@ -522,17 +525,17 @@ gboolean before_schedchange(void *hook_data, void *call_data) LttEvent *e = ltt_tracefile_get_event(tfcs->parent.parent.tf); - LttvTraceHookByFacility *thf = - lttv_trace_hook_get_fac((LttvTraceHook *)hook_data, - ltt_event_facility_id(e)); + LttvTraceHookByFacility *thf = (LttvTraceHookByFacility *)hook_data; - guint pid_in, pid_out, state_out; + guint pid_in, pid_out; + + gint state_out; LttvProcessState *process; pid_out = ltt_event_get_unsigned(e, thf->f1); pid_in = ltt_event_get_unsigned(e, thf->f2); - state_out = ltt_event_get_unsigned(e, thf->f3); + state_out = ltt_event_get_int(e, thf->f3); /* compute the time for the process to schedule out */ @@ -743,16 +746,10 @@ void lttv_stats_add_event_hooks(LttvTracesetStats *self) guint i, j, k, l, nb_trace, nb_tracefile; - LttFacility *f; - - LttEventType *et; - LttvTraceStats *ts; LttvTracefileStats *tfs; - void *hook_data; - GArray *hooks, *before_hooks, *after_hooks; LttvTraceHook *hook; @@ -761,6 +758,8 @@ void lttv_stats_add_event_hooks(LttvTracesetStats *self) LttvAttributeValue val; + gint ret; + nb_trace = lttv_traceset_number(traceset); for(i = 0 ; i < nb_trace ; i++) { ts = (LttvTraceStats *)self->parent.parent.traces[i]; @@ -771,98 +770,123 @@ void lttv_stats_add_event_hooks(LttvTracesetStats *self) hooks = g_array_sized_new(FALSE, FALSE, sizeof(LttvTraceHook), 7); g_array_set_size(hooks, 7); - lttv_trace_find_hook(ts->parent.parent.t, + ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_KERNEL, LTT_EVENT_SYSCALL_ENTRY, LTT_FIELD_SYSCALL_ID, 0, 0, - before_syscall_entry, + before_syscall_entry, NULL, &g_array_index(hooks, LttvTraceHook, 0)); + g_assert(!ret); - lttv_trace_find_hook(ts->parent.parent.t, + ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_KERNEL, LTT_EVENT_SYSCALL_EXIT, 0, 0, 0, - before_syscall_exit, + before_syscall_exit, NULL, &g_array_index(hooks, LttvTraceHook, 1)); + g_assert(!ret); - lttv_trace_find_hook(ts->parent.parent.t, + ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_KERNEL, LTT_EVENT_TRAP_ENTRY, LTT_FIELD_TRAP_ID, 0, 0, - before_trap_entry, + before_trap_entry, NULL, &g_array_index(hooks, LttvTraceHook, 2)); + g_assert(!ret); - lttv_trace_find_hook(ts->parent.parent.t, + ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_KERNEL, LTT_EVENT_TRAP_EXIT, 0, 0, 0, - before_trap_exit, &g_array_index(hooks, LttvTraceHook, 3)); + before_trap_exit, NULL, + &g_array_index(hooks, LttvTraceHook, 3)); + g_assert(!ret); - lttv_trace_find_hook(ts->parent.parent.t, + ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_KERNEL, LTT_EVENT_IRQ_ENTRY, LTT_FIELD_IRQ_ID, 0, 0, - before_irq_entry, &g_array_index(hooks, LttvTraceHook, 4)); + before_irq_entry, NULL, + &g_array_index(hooks, LttvTraceHook, 4)); + g_assert(!ret); - lttv_trace_find_hook(ts->parent.parent.t, + ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_KERNEL, LTT_EVENT_IRQ_EXIT, 0, 0, 0, - before_irq_exit, &g_array_index(hooks, LttvTraceHook, 5)); + before_irq_exit, NULL, + &g_array_index(hooks, LttvTraceHook, 5)); + g_assert(!ret); - lttv_trace_find_hook(ts->parent.parent.t, + ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_PROCESS, LTT_EVENT_SCHEDCHANGE, LTT_FIELD_OUT, LTT_FIELD_IN, LTT_FIELD_OUT_STATE, - before_schedchange, + before_schedchange, NULL, &g_array_index(hooks, LttvTraceHook, 6)); + g_assert(!ret); before_hooks = hooks; hooks = g_array_sized_new(FALSE, FALSE, sizeof(LttvTraceHook), 9); g_array_set_size(hooks, 9); - lttv_trace_find_hook(ts->parent.parent.t, + ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_KERNEL, LTT_EVENT_SYSCALL_ENTRY, LTT_FIELD_SYSCALL_ID, 0, 0, - after_syscall_entry, + after_syscall_entry, NULL, &g_array_index(hooks, LttvTraceHook, 0)); + g_assert(!ret); - lttv_trace_find_hook(ts->parent.parent.t, + ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_KERNEL, LTT_EVENT_SYSCALL_EXIT, 0, 0, 0, - after_syscall_exit, + after_syscall_exit, NULL, &g_array_index(hooks, LttvTraceHook, 1)); + g_assert(!ret); - lttv_trace_find_hook(ts->parent.parent.t, + ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_KERNEL, LTT_EVENT_TRAP_ENTRY, LTT_FIELD_TRAP_ID, 0, 0, - after_trap_entry, &g_array_index(hooks, LttvTraceHook, 2)); + after_trap_entry, NULL, + &g_array_index(hooks, LttvTraceHook, 2)); + g_assert(!ret); - lttv_trace_find_hook(ts->parent.parent.t, + ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_KERNEL, LTT_EVENT_TRAP_EXIT, 0, 0, 0, - after_trap_exit, &g_array_index(hooks, LttvTraceHook, 3)); + after_trap_exit, NULL, + &g_array_index(hooks, LttvTraceHook, 3)); + g_assert(!ret); - lttv_trace_find_hook(ts->parent.parent.t, + ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_KERNEL, LTT_EVENT_IRQ_ENTRY, LTT_FIELD_IRQ_ID, 0, 0, - after_irq_entry, &g_array_index(hooks, LttvTraceHook, 4)); + after_irq_entry, NULL, + &g_array_index(hooks, LttvTraceHook, 4)); + g_assert(!ret); - lttv_trace_find_hook(ts->parent.parent.t, + ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_KERNEL, LTT_EVENT_IRQ_EXIT, 0, 0, 0, - after_irq_exit, &g_array_index(hooks, LttvTraceHook, 5)); + after_irq_exit, NULL, + &g_array_index(hooks, LttvTraceHook, 5)); + g_assert(!ret); - lttv_trace_find_hook(ts->parent.parent.t, + ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_PROCESS, LTT_EVENT_FORK, LTT_FIELD_PARENT_PID, LTT_FIELD_CHILD_PID, 0, - process_fork, + process_fork, NULL, &g_array_index(hooks, LttvTraceHook, 6)); + g_assert(!ret); - lttv_trace_find_hook(ts->parent.parent.t, + ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_PROCESS, LTT_EVENT_EXIT, LTT_FIELD_PID, 0, 0, - process_exit, &g_array_index(hooks, LttvTraceHook, 7)); + process_exit, NULL, + &g_array_index(hooks, LttvTraceHook, 7)); + g_assert(!ret); - lttv_trace_find_hook(ts->parent.parent.t, + ret = lttv_trace_find_hook(ts->parent.parent.t, LTT_FACILITY_PROCESS, LTT_EVENT_FREE, LTT_FIELD_PID, 0, 0, - process_free, &g_array_index(hooks, LttvTraceHook, 7)); + process_free, NULL, + &g_array_index(hooks, LttvTraceHook, 8)); + g_assert(!ret); after_hooks = hooks; @@ -872,8 +896,8 @@ void lttv_stats_add_event_hooks(LttvTracesetStats *self) nb_tracefile = ts->parent.parent.tracefiles->len; for(j = 0 ; j < nb_tracefile ; j++) { - tfs = LTTV_TRACEFILE_STATS(&g_array_index(ts->parent.parent.tracefiles, - LttvTracefileContext, j)); + tfs = LTTV_TRACEFILE_STATS(g_array_index(ts->parent.parent.tracefiles, + LttvTracefileContext*, j)); lttv_hooks_add(tfs->parent.parent.event, every_event, NULL, LTTV_PRIO_DEFAULT); @@ -884,7 +908,7 @@ void lttv_stats_add_event_hooks(LttvTracesetStats *self) lttv_hooks_add( lttv_hooks_by_id_find(tfs->parent.parent.event_by_id, thf->id), thf->h, - &g_array_index(before_hooks, LttvTraceHook, k), + thf, LTTV_PRIO_STATS_BEFORE_STATE); } } @@ -895,7 +919,7 @@ void lttv_stats_add_event_hooks(LttvTracesetStats *self) lttv_hooks_add( lttv_hooks_by_id_find(tfs->parent.parent.event_by_id, thf->id), thf->h, - &g_array_index(after_hooks, LttvTraceHook, k), + thf, LTTV_PRIO_STATS_AFTER_STATE); } } @@ -941,7 +965,7 @@ void lttv_stats_remove_event_hooks(LttvTracesetStats *self) nb_trace = lttv_traceset_number(traceset); for(i = 0 ; i < nb_trace ; i++) { - ts = LTTV_TRACE_STATS(self->parent.parent.traces[i]); + ts = (LttvTraceStats*)self->parent.parent.traces[i]; lttv_attribute_find(self->parent.parent.a, LTTV_STATS_BEFORE_HOOKS, LTTV_POINTER, &val); before_hooks = *(val.v_pointer); @@ -966,7 +990,7 @@ void lttv_stats_remove_event_hooks(LttvTracesetStats *self) lttv_hooks_remove_data( lttv_hooks_by_id_find(tfs->parent.parent.event_by_id, thf->id), thf->h, - &g_array_index(before_hooks, LttvTraceHook, k)); + thf); } } for(k = 0 ; k < after_hooks->len ; k++) { @@ -976,7 +1000,7 @@ void lttv_stats_remove_event_hooks(LttvTracesetStats *self) lttv_hooks_remove_data( lttv_hooks_by_id_find(tfs->parent.parent.event_by_id, thf->id), thf->h, - &g_array_index(after_hooks, LttvTraceHook, k)); + thf); } } }