#include <ltt/facility.h>
#include <ltt/trace.h>
#include <ltt/event.h>
+#include <ltt/type.h>
#define BUF_SIZE 256
LttvTracefileContext*, j);
tfcs = LTTV_TRACEFILE_STATS(*tfs);
tfcs->stats = lttv_attribute_find_subdir(tracefiles_stats,
- tfcs->parent.cpu_name);
+ ltt_tracefile_long_name(tfcs->parent.parent.tf));
find_event_tree(tfcs, LTTV_STATS_PROCESS_UNKNOWN,
- tfcs->parent.cpu_name, LTTV_STATE_MODE_UNKNOWN,
+ ltt_tracefile_long_name(tfcs->parent.parent.tf),
+ LTTV_STATE_MODE_UNKNOWN,
LTTV_STATE_SUBMODE_UNKNOWN, &tfcs->current_events_tree,
&tfcs->current_event_types_tree);
}
static void update_event_tree(LttvTracefileStats *tfcs)
{
- LttvExecutionState *es = tfcs->parent.process->state;
+ LttvTraceState *ts = (LttvTraceState *)tfcs->parent.parent.t_context;
+ guint cpu = ltt_tracefile_num(tfcs->parent.parent.tf);
+ LttvProcessState *process = ts->running_process[cpu];
+ LttvExecutionState *es = process->state;
- find_event_tree(tfcs, tfcs->parent.process->pid_time,
- tfcs->parent.cpu_name,
+ find_event_tree(tfcs, process->pid_time,
+ ltt_tracefile_long_name(tfcs->parent.parent.tf),
es->t, es->n, &(tfcs->current_events_tree),
&(tfcs->current_event_types_tree));
}
static void mode_change(LttvTracefileStats *tfcs)
{
+ LttvTraceState *ts = (LttvTraceState *)tfcs->parent.parent.t_context;
+ guint cpu = ltt_tracefile_num(tfcs->parent.parent.tf);
+ LttvProcessState *process = ts->running_process[cpu];
LttvAttributeValue cpu_time;
LttTime delta;
lttv_attribute_find(tfcs->current_events_tree, LTTV_STATS_CPU_TIME,
LTTV_TIME, &cpu_time);
delta = ltt_time_sub(tfcs->parent.parent.timestamp,
- tfcs->parent.process->state->change);
+ process->state->change);
*(cpu_time.v_time) = ltt_time_add(*(cpu_time.v_time), delta);
}
static void mode_end(LttvTracefileStats *tfcs)
{
+ LttvTraceState *ts = (LttvTraceState *)tfcs->parent.parent.t_context;
+ guint cpu = ltt_tracefile_num(tfcs->parent.parent.tf);
+ LttvProcessState *process = ts->running_process[cpu];
LttvAttributeValue elapsed_time, cpu_time;
LttTime delta;
lttv_attribute_find(tfcs->current_events_tree, LTTV_STATS_ELAPSED_TIME,
LTTV_TIME, &elapsed_time);
delta = ltt_time_sub(tfcs->parent.parent.timestamp,
- tfcs->parent.process->state->entry);
+ process->state->entry);
*(elapsed_time.v_time) = ltt_time_add(*(elapsed_time.v_time), delta);
lttv_attribute_find(tfcs->current_events_tree, LTTV_STATS_CPU_TIME,
LTTV_TIME, &cpu_time);
delta = ltt_time_sub(tfcs->parent.parent.timestamp,
- tfcs->parent.process->state->change);
+ process->state->change);
*(cpu_time.v_time) = ltt_time_add(*(cpu_time.v_time), delta);
}
{
LttvTracefileStats *tfcs = (LttvTracefileStats *)call_data;
+ LttvTraceState *ts = (LttvTraceState*)tfcs->parent.parent.t_context;
+
LttEvent *e = ltt_tracefile_get_event(tfcs->parent.parent.tf);
LttvTraceHookByFacility *thf = (LttvTraceHookByFacility *)hook_data;
/* get the information for the process scheduled in */
- process = lttv_state_find_process_or_create(&(tfcs->parent), pid_in);
+ process = lttv_state_find_process_or_create(ts,
+ ANY_CPU, pid_in, &tfcs->parent.parent.timestamp);
- find_event_tree(tfcs, process->pid_time, tfcs->parent.cpu_name,
+ find_event_tree(tfcs, process->pid_time,
+ ltt_tracefile_long_name(tfcs->parent.parent.tf),
process->state->t, process->state->n, &(tfcs->current_events_tree),
&(tfcs->current_event_types_tree));
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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, 8));
+ process_free, NULL,
+ &g_array_index(hooks, LttvTraceHook, 8));
g_assert(!ret);