- LttvTraceset *traceset = self->parent.parent.ts;
-
- guint i, j, k, nb_trace, nb_tracefile;
-
- LttvTraceStats *ts;
-
- LttvTracefileStats *tfs;
-
- GArray *hooks, *before_hooks, *after_hooks;
-
- LttvTraceHook *th;
-
- LttvAttributeValue val;
-
- nb_trace = lttv_traceset_number(traceset);
- for(i = 0 ; i < nb_trace ; i++) {
- ts = (LttvTraceStats *)self->parent.parent.traces[i];
-
- /* Find the eventtype id for the following events and register the
- associated by id hooks. */
-
- hooks = g_array_sized_new(FALSE, FALSE, sizeof(LttvTraceHook), 12);
-
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_KERNEL,
- LTT_EVENT_SYSCALL_ENTRY,
- FIELD_ARRAY(LTT_FIELD_SYSCALL_ID),
- before_syscall_entry, NULL,
- &hooks);
-
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_KERNEL,
- LTT_EVENT_SYSCALL_EXIT,
- NULL,
- before_syscall_exit, NULL,
- &hooks);
-
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_KERNEL,
- LTT_EVENT_TRAP_ENTRY,
- FIELD_ARRAY(LTT_FIELD_TRAP_ID),
- before_trap_entry, NULL,
- &hooks);
-
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_KERNEL,
- LTT_EVENT_TRAP_EXIT,
- NULL,
- before_trap_exit, NULL,
- &hooks);
-
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_KERNEL,
- LTT_EVENT_IRQ_ENTRY,
- FIELD_ARRAY(LTT_FIELD_IRQ_ID),
- before_irq_entry, NULL,
- &hooks);
-
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_KERNEL,
- LTT_EVENT_IRQ_EXIT,
- NULL,
- before_irq_exit, NULL,
- &hooks);
-
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_KERNEL,
- LTT_EVENT_SOFT_IRQ_ENTRY,
- FIELD_ARRAY(LTT_FIELD_SOFT_IRQ_ID),
- before_soft_irq_entry, NULL,
- &hooks);
-
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_KERNEL,
- LTT_EVENT_SOFT_IRQ_EXIT,
- NULL,
- before_soft_irq_exit, NULL,
- &hooks);
-
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_KERNEL,
- LTT_EVENT_SCHED_SCHEDULE,
- FIELD_ARRAY(LTT_FIELD_PREV_PID, LTT_FIELD_NEXT_PID, LTT_FIELD_PREV_STATE),
- before_schedchange, NULL,
- &hooks);
-
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_USERSPACE,
- LTT_EVENT_FUNCTION_ENTRY,
- FIELD_ARRAY(LTT_FIELD_THIS_FN, LTT_FIELD_CALL_SITE),
- before_function_entry, NULL,
- &hooks);
-
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_USERSPACE,
- LTT_EVENT_FUNCTION_EXIT,
- FIELD_ARRAY(LTT_FIELD_THIS_FN, LTT_FIELD_CALL_SITE),
- before_function_exit, NULL,
- &hooks);
-
- /* statedump-related hooks */
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_TASK_STATE,
- LTT_EVENT_PROCESS_STATE,
- FIELD_ARRAY(LTT_FIELD_PID, LTT_FIELD_PARENT_PID, LTT_FIELD_NAME),
- before_enum_process_state, NULL,
- &hooks);
-
- before_hooks = hooks;
-
- hooks = g_array_sized_new(FALSE, FALSE, sizeof(LttvTraceHook), 16);
-
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_KERNEL,
- LTT_EVENT_SYSCALL_ENTRY,
- FIELD_ARRAY(LTT_FIELD_SYSCALL_ID),
- after_syscall_entry, NULL,
- &hooks);
-
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_KERNEL,
- LTT_EVENT_SYSCALL_EXIT,
- NULL,
- after_syscall_exit, NULL,
- &hooks);
-
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_KERNEL,
- LTT_EVENT_TRAP_ENTRY,
- FIELD_ARRAY(LTT_FIELD_TRAP_ID),
- after_trap_entry, NULL,
- &hooks);
-
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_KERNEL,
- LTT_EVENT_TRAP_EXIT,
- NULL,
- after_trap_exit, NULL,
- &hooks);
-
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_KERNEL,
- LTT_EVENT_IRQ_ENTRY,
- FIELD_ARRAY(LTT_FIELD_IRQ_ID),
- after_irq_entry, NULL,
- &hooks);
-
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_KERNEL,
- LTT_EVENT_IRQ_EXIT,
- NULL,
- after_irq_exit, NULL,
- &hooks);
-
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_KERNEL,
- LTT_EVENT_SOFT_IRQ_ENTRY,
- FIELD_ARRAY(LTT_FIELD_SOFT_IRQ_ID),
- after_soft_irq_entry, NULL,
- &hooks);
-
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_KERNEL,
- LTT_EVENT_SOFT_IRQ_EXIT,
- NULL,
- after_soft_irq_exit, NULL,
- &hooks);
-
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_KERNEL,
- LTT_EVENT_SCHED_SCHEDULE,
- FIELD_ARRAY(LTT_FIELD_PREV_PID, LTT_FIELD_NEXT_PID, LTT_FIELD_PREV_STATE),
- after_schedchange, NULL,
- &hooks);
-
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_KERNEL,
- LTT_EVENT_PROCESS_FORK,
- FIELD_ARRAY(LTT_FIELD_PARENT_PID, LTT_FIELD_CHILD_PID),
- process_fork, NULL,
- &hooks);
-
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_KERNEL,
- LTT_EVENT_PROCESS_EXIT,
- FIELD_ARRAY(LTT_FIELD_PID),
- process_exit, NULL,
- &hooks);
-
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_KERNEL,
- LTT_EVENT_PROCESS_FREE,
- FIELD_ARRAY(LTT_FIELD_PID),
- process_free, NULL,
- &hooks);
-
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_USERSPACE,
- LTT_EVENT_FUNCTION_ENTRY,
- FIELD_ARRAY(LTT_FIELD_THIS_FN, LTT_FIELD_CALL_SITE),
- after_function_entry, NULL,
- &hooks);
-
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_USERSPACE,
- LTT_EVENT_FUNCTION_EXIT,
- FIELD_ARRAY(LTT_FIELD_THIS_FN, LTT_FIELD_CALL_SITE),
- after_function_exit, NULL,
- &hooks);
-
- /* statedump-related hooks */
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_TASK_STATE,
- LTT_EVENT_PROCESS_STATE,
- FIELD_ARRAY(LTT_FIELD_PID, LTT_FIELD_PARENT_PID, LTT_FIELD_NAME),
- after_enum_process_state, NULL,
- &hooks);
-
- lttv_trace_find_hook(ts->parent.parent.t,
- LTT_CHANNEL_GLOBAL_STATE,
- LTT_EVENT_STATEDUMP_END,
- NULL,
- after_statedump_end, NULL,
- &hooks);
-
- after_hooks = hooks;
-
- /* Add these hooks to each event_by_id hooks list */
-
- 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));
- lttv_hooks_add(tfs->parent.parent.event, every_event, NULL,
- LTTV_PRIO_DEFAULT);
-
- for(k = 0 ; k < before_hooks->len ; k++) {
- th = &g_array_index(before_hooks, LttvTraceHook, k);
- if (th->mdata == tfs->parent.parent.tf->mdata)
- lttv_hooks_add(
- lttv_hooks_by_id_find(tfs->parent.parent.event_by_id, th->id),
- th->h,
- th,
- LTTV_PRIO_STATS_BEFORE_STATE);
- }
- for(k = 0 ; k < after_hooks->len ; k++) {
- th = &g_array_index(after_hooks, LttvTraceHook, k);
- if (th->mdata == tfs->parent.parent.tf->mdata)
- lttv_hooks_add(
- lttv_hooks_by_id_find(tfs->parent.parent.event_by_id, th->id),
- th->h,
- th,
- LTTV_PRIO_STATS_AFTER_STATE);
- }
- }
- lttv_attribute_find(self->parent.parent.a, LTTV_STATS_BEFORE_HOOKS,
- LTTV_POINTER, &val);
- *(val.v_pointer) = before_hooks;
- lttv_attribute_find(self->parent.parent.a, LTTV_STATS_AFTER_HOOKS,
- LTTV_POINTER, &val);
- *(val.v_pointer) = after_hooks;
- }
+ LttvTraceset *traceset = self->parent.parent.ts;
+
+ guint i, j, k, nb_trace, nb_tracefile;
+
+ LttvTraceStats *ts;
+
+ LttvTracefileStats *tfs;
+
+ GArray *hooks, *before_hooks, *after_hooks;
+
+ LttvTraceHook *th;
+
+ LttvAttributeValue val;
+
+ nb_trace = lttv_traceset_number(traceset);
+ for(i = 0 ; i < nb_trace ; i++) {
+ ts = (LttvTraceStats *)self->parent.parent.traces[i];
+
+ /* Find the eventtype id for the following events and register the
+ associated by id hooks. */
+
+ hooks = g_array_sized_new(FALSE, FALSE, sizeof(LttvTraceHook), 12);
+
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_KERNEL,
+ LTT_EVENT_SYSCALL_ENTRY,
+ FIELD_ARRAY(LTT_FIELD_SYSCALL_ID),
+ before_syscall_entry, NULL,
+ &hooks);
+
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_KERNEL,
+ LTT_EVENT_SYSCALL_EXIT,
+ NULL,
+ before_syscall_exit, NULL,
+ &hooks);
+
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_KERNEL,
+ LTT_EVENT_TRAP_ENTRY,
+ FIELD_ARRAY(LTT_FIELD_TRAP_ID),
+ before_trap_entry, NULL,
+ &hooks);
+
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_KERNEL,
+ LTT_EVENT_TRAP_EXIT,
+ NULL,
+ before_trap_exit, NULL,
+ &hooks);
+
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_KERNEL,
+ LTT_EVENT_IRQ_ENTRY,
+ FIELD_ARRAY(LTT_FIELD_IRQ_ID),
+ before_irq_entry, NULL,
+ &hooks);
+
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_KERNEL,
+ LTT_EVENT_IRQ_EXIT,
+ NULL,
+ before_irq_exit, NULL,
+ &hooks);
+
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_KERNEL,
+ LTT_EVENT_SOFT_IRQ_ENTRY,
+ FIELD_ARRAY(LTT_FIELD_SOFT_IRQ_ID),
+ before_soft_irq_entry, NULL,
+ &hooks);
+
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_KERNEL,
+ LTT_EVENT_SOFT_IRQ_EXIT,
+ NULL,
+ before_soft_irq_exit, NULL,
+ &hooks);
+
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_KERNEL,
+ LTT_EVENT_SCHED_SCHEDULE,
+ FIELD_ARRAY(LTT_FIELD_PREV_PID, LTT_FIELD_NEXT_PID, LTT_FIELD_PREV_STATE),
+ before_schedchange, NULL,
+ &hooks);
+
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_USERSPACE,
+ LTT_EVENT_FUNCTION_ENTRY,
+ FIELD_ARRAY(LTT_FIELD_THIS_FN, LTT_FIELD_CALL_SITE),
+ before_function_entry, NULL,
+ &hooks);
+
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_USERSPACE,
+ LTT_EVENT_FUNCTION_EXIT,
+ FIELD_ARRAY(LTT_FIELD_THIS_FN, LTT_FIELD_CALL_SITE),
+ before_function_exit, NULL,
+ &hooks);
+
+ /* statedump-related hooks */
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_TASK_STATE,
+ LTT_EVENT_PROCESS_STATE,
+ FIELD_ARRAY(LTT_FIELD_PID, LTT_FIELD_PARENT_PID, LTT_FIELD_NAME),
+ before_enum_process_state, NULL,
+ &hooks);
+
+ before_hooks = hooks;
+
+ hooks = g_array_sized_new(FALSE, FALSE, sizeof(LttvTraceHook), 16);
+
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_KERNEL,
+ LTT_EVENT_SYSCALL_ENTRY,
+ FIELD_ARRAY(LTT_FIELD_SYSCALL_ID),
+ after_syscall_entry, NULL,
+ &hooks);
+
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_KERNEL,
+ LTT_EVENT_SYSCALL_EXIT,
+ NULL,
+ after_syscall_exit, NULL,
+ &hooks);
+
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_KERNEL,
+ LTT_EVENT_TRAP_ENTRY,
+ FIELD_ARRAY(LTT_FIELD_TRAP_ID),
+ after_trap_entry, NULL,
+ &hooks);
+
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_KERNEL,
+ LTT_EVENT_TRAP_EXIT,
+ NULL,
+ after_trap_exit, NULL,
+ &hooks);
+
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_KERNEL,
+ LTT_EVENT_IRQ_ENTRY,
+ FIELD_ARRAY(LTT_FIELD_IRQ_ID),
+ after_irq_entry, NULL,
+ &hooks);
+
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_KERNEL,
+ LTT_EVENT_IRQ_EXIT,
+ NULL,
+ after_irq_exit, NULL,
+ &hooks);
+
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_KERNEL,
+ LTT_EVENT_SOFT_IRQ_ENTRY,
+ FIELD_ARRAY(LTT_FIELD_SOFT_IRQ_ID),
+ after_soft_irq_entry, NULL,
+ &hooks);
+
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_KERNEL,
+ LTT_EVENT_SOFT_IRQ_EXIT,
+ NULL,
+ after_soft_irq_exit, NULL,
+ &hooks);
+
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_KERNEL,
+ LTT_EVENT_SCHED_SCHEDULE,
+ FIELD_ARRAY(LTT_FIELD_PREV_PID, LTT_FIELD_NEXT_PID, LTT_FIELD_PREV_STATE),
+ after_schedchange, NULL,
+ &hooks);
+
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_KERNEL,
+ LTT_EVENT_PROCESS_FORK,
+ FIELD_ARRAY(LTT_FIELD_PARENT_PID, LTT_FIELD_CHILD_PID),
+ process_fork, NULL,
+ &hooks);
+
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_KERNEL,
+ LTT_EVENT_PROCESS_EXIT,
+ FIELD_ARRAY(LTT_FIELD_PID),
+ process_exit, NULL,
+ &hooks);
+
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_KERNEL,
+ LTT_EVENT_PROCESS_FREE,
+ FIELD_ARRAY(LTT_FIELD_PID),
+ process_free, NULL,
+ &hooks);
+
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_USERSPACE,
+ LTT_EVENT_FUNCTION_ENTRY,
+ FIELD_ARRAY(LTT_FIELD_THIS_FN, LTT_FIELD_CALL_SITE),
+ after_function_entry, NULL,
+ &hooks);
+
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_USERSPACE,
+ LTT_EVENT_FUNCTION_EXIT,
+ FIELD_ARRAY(LTT_FIELD_THIS_FN, LTT_FIELD_CALL_SITE),
+ after_function_exit, NULL,
+ &hooks);
+
+ /* statedump-related hooks */
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_TASK_STATE,
+ LTT_EVENT_PROCESS_STATE,
+ FIELD_ARRAY(LTT_FIELD_PID, LTT_FIELD_PARENT_PID, LTT_FIELD_NAME),
+ after_enum_process_state, NULL,
+ &hooks);
+
+ lttv_trace_find_hook(ts->parent.parent.t,
+ LTT_CHANNEL_GLOBAL_STATE,
+ LTT_EVENT_STATEDUMP_END,
+ NULL,
+ after_statedump_end, NULL,
+ &hooks);
+
+ after_hooks = hooks;
+
+ /* Add these hooks to each event_by_id hooks list */
+
+ 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));
+ lttv_hooks_add(tfs->parent.parent.event, every_event, NULL,
+ LTTV_PRIO_DEFAULT);
+
+ for(k = 0 ; k < before_hooks->len ; k++) {
+ th = &g_array_index(before_hooks, LttvTraceHook, k);
+ if (th->mdata == tfs->parent.parent.tf->mdata)
+ lttv_hooks_add(
+ lttv_hooks_by_id_find(tfs->parent.parent.event_by_id, th->id),
+ th->h,
+ th,
+ LTTV_PRIO_STATS_BEFORE_STATE);
+ }
+ for(k = 0 ; k < after_hooks->len ; k++) {
+ th = &g_array_index(after_hooks, LttvTraceHook, k);
+ if (th->mdata == tfs->parent.parent.tf->mdata)
+ lttv_hooks_add(
+ lttv_hooks_by_id_find(tfs->parent.parent.event_by_id, th->id),
+ th->h,
+ th,
+ LTTV_PRIO_STATS_AFTER_STATE);
+ }
+ }
+ lttv_attribute_find(self->parent.parent.a, LTTV_STATS_BEFORE_HOOKS,
+ LTTV_POINTER, &val);
+ *(val.v_pointer) = before_hooks;
+ lttv_attribute_find(self->parent.parent.a, LTTV_STATS_AFTER_HOOKS,
+ LTTV_POINTER, &val);
+ *(val.v_pointer) = after_hooks;
+ }