Emit sched fake events as well
This commit is contained in:
parent
9b39e4d69e
commit
b60c6da764
1
emu.c
1
emu.c
@ -113,6 +113,7 @@ hook_post(struct ovni_emu *emu)
|
||||
switch(emu->cur_ev->header.model)
|
||||
{
|
||||
case 'O': hook_post_ovni(emu); break;
|
||||
case 'V': hook_post_nosv(emu); break;
|
||||
default:
|
||||
//dbg("unknown model %c\n", emu->cur_ev->model);
|
||||
break;
|
||||
|
@ -290,7 +290,8 @@ hook_emit_nosv(struct ovni_emu *emu)
|
||||
hook_emit_nosv_ss(emu);
|
||||
}
|
||||
|
||||
struct hook_entry pre_hooks[] = {
|
||||
{ "VTc", pre_task_create },
|
||||
{ "VTx", pre_task_create },
|
||||
};
|
||||
void
|
||||
hook_post_nosv(struct ovni_emu *emu)
|
||||
{
|
||||
hook_post_nosv_ss(emu);
|
||||
}
|
||||
|
@ -57,6 +57,15 @@ ss_ev(struct ovni_ethread *th, int ev)
|
||||
th->ss_event = ev;
|
||||
}
|
||||
|
||||
static int
|
||||
ss_last_st(struct ovni_ethread *th)
|
||||
{
|
||||
if(th->nss == 0)
|
||||
return ST_NULL;
|
||||
|
||||
return th->ss[th->nss - 1];
|
||||
}
|
||||
|
||||
/* --------------------------- pre ------------------------------- */
|
||||
|
||||
static void
|
||||
@ -121,12 +130,32 @@ emit_thread_state(struct ovni_emu *emu, struct ovni_ethread *th,
|
||||
int type, int st)
|
||||
{
|
||||
int row;
|
||||
|
||||
|
||||
row = th->gindex + 1;
|
||||
|
||||
prv_ev_thread(emu, row, type, st);
|
||||
}
|
||||
|
||||
static void
|
||||
emit_thread_event(struct ovni_emu *emu, struct ovni_ethread *th,
|
||||
int type, int st)
|
||||
{
|
||||
int64_t t0, t1;
|
||||
int row;
|
||||
int prev_st;
|
||||
|
||||
row = th->gindex + 1;
|
||||
|
||||
t0 = emu->delta_time - 1;
|
||||
t1 = emu->delta_time;
|
||||
|
||||
prev_st = ss_last_st(th);
|
||||
|
||||
/* Fake event using 1 nanosecond in the past */
|
||||
prv_ev_thread_raw(emu, row, t0, type, st);
|
||||
prv_ev_thread_raw(emu, row, t1, type, prev_st);
|
||||
}
|
||||
|
||||
void
|
||||
hook_emit_nosv_ss(struct ovni_emu *emu)
|
||||
{
|
||||
@ -134,23 +163,16 @@ hook_emit_nosv_ss(struct ovni_emu *emu)
|
||||
|
||||
th = emu->cur_thread;
|
||||
|
||||
// /* Only emit a state if needed */
|
||||
// if(th->ss_event != EV_NULL)
|
||||
// {
|
||||
// emit_thread_state(emu, th, PTT_SUBSYSTEM,
|
||||
// th->ss_event);
|
||||
// }
|
||||
// else
|
||||
/* Only emit a state if needed */
|
||||
if(th->ss_event != EV_NULL)
|
||||
{
|
||||
emit_thread_event(emu, th, PTT_SUBSYSTEM,
|
||||
th->ss_event);
|
||||
|
||||
if(th->nss > 0)
|
||||
{
|
||||
emit_thread_state(emu, th, PTT_SUBSYSTEM,
|
||||
th->ss[th->nss - 1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
emit_thread_state(emu, th, PTT_SUBSYSTEM, ST_NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
emit_thread_state(emu, th, PTT_SUBSYSTEM, ss_last_st(th));
|
||||
}
|
||||
|
||||
/* --------------------------- post ------------------------------- */
|
||||
|
3
pcf.c
3
pcf.c
@ -119,6 +119,9 @@ struct event_value thread_ss_values[] = {
|
||||
{ ST_SCHED_HUNGRY, "Scheduler: Hungry" },
|
||||
{ ST_SCHED_SERVING, "Scheduler: Serving" },
|
||||
{ ST_SCHED_SUBMITTING, "Scheduler: Submitting" },
|
||||
{ EV_SCHED_SEND, "EV Scheduler: Send task" },
|
||||
{ EV_SCHED_RECV, "EV Scheduler: Recv task" },
|
||||
{ EV_SCHED_SELF, "EV Scheduler: Self-assign task" },
|
||||
{ -1, NULL },
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user