LTTV_STATE_USER_THREAD,
LTTV_STATE_KERNEL_THREAD;
+LttvCPUMode
+ LTTV_CPU_UNKNOWN,
+ LTTV_CPU_IDLE,
+ LTTV_CPU_BUSY,
+ LTTV_CPU_IRQ;
+
static GQuark
LTTV_STATE_TRACEFILES,
LTTV_STATE_PROCESSES,
tcs->usertraces = NULL;
tcs->running_process = g_new(LttvProcessState*,
ltt_trace_get_num_cpu(tc->t));
+ tcs->cpu_states = g_new(LttvCPUState,
+ ltt_trace_get_num_cpu(tc->t));
restore_init_state(tcs);
for(j = 0 ; j < nb_tracefile ; j++) {
tfcs =
LttvTracefileContext*, j));
tfcs->tracefile_name = ltt_tracefile_name(tfcs->parent.tf);
tfcs->cpu = ltt_tracefile_cpu(tfcs->parent.tf);
+ tfcs->cpu_state = &(tcs->cpu_states[tfcs->cpu]);
if(ltt_tracefile_tid(tfcs->parent.tf) != 0) {
/* It's a Usertrace */
guint tid = ltt_tracefile_tid(tfcs->parent.tf);
/* Do something with the info about being in user or system mode when int? */
push_state(s, LTTV_STATE_IRQ, submode);
+
+ /* update cpu status */
+ s->cpu_state->previous_state = s->cpu_state->present_state;
+ s->cpu_state->present_state = LTTV_CPU_IRQ;
+
return FALSE;
}
LttvTracefileState *s = (LttvTracefileState *)call_data;
pop_state(s, LTTV_STATE_IRQ);
+
+ /* update cpu status */
+ s->cpu_state->present_state = s->cpu_state->previous_state;
+
return FALSE;
}
process->usertrace->cpu = cpu;
// process->last_cpu_index = ltt_tracefile_num(((LttvTracefileContext*)s)->tf);
process->state->change = s->parent.timestamp;
+
+ /* update cpu status */
+ if(pid_in == 0)
+ s->cpu_state->present_state = LTTV_CPU_IDLE;
+ else
+ s->cpu_state->present_state = LTTV_CPU_BUSY;
+
return FALSE;
}
LTT_FIELD_THIS_FN = g_quark_from_string("this_fn");
LTT_FIELD_CALL_SITE = g_quark_from_string("call_site");
+ LTTV_CPU_UNKNOWN = g_quark_from_string("unknown");
+ LTTV_CPU_IDLE = g_quark_from_string("idle");
+ LTTV_CPU_BUSY = g_quark_from_string("busy");
+ LTTV_CPU_IRQ = g_quark_from_string("irq");
}
static void module_destroy()