lua RockEv timing fixes
just a few tweaks to the RockEv backend to allow tighter event timing originally there was a timeout where events would be consolidated prior to running the event thread, this slowed the faster events but it turns out this isn't really a big waster of time The callback from C => lua is a far bigger bottleneck Change-Id: Iffacbe49c4b83155099b1304590450f746576fa4
This commit is contained in:
parent
59454f93b3
commit
df1b3c1d2c
1 changed files with 3 additions and 6 deletions
|
@ -139,7 +139,6 @@ struct event_data {
|
||||||
long *event_stack;
|
long *event_stack;
|
||||||
volatile long *get_tick;
|
volatile long *get_tick;
|
||||||
struct thread_status status;
|
struct thread_status status;
|
||||||
char next_event;
|
|
||||||
/* callbacks */
|
/* callbacks */
|
||||||
struct cb_data *cb[EVENT_CT];
|
struct cb_data *cb[EVENT_CT];
|
||||||
};
|
};
|
||||||
|
@ -232,7 +231,7 @@ static void lua_interrupt_set(lua_State *L, int hookmask)
|
||||||
oldmask = lua_gethookmask(L);
|
oldmask = lua_gethookmask(L);
|
||||||
oldcount = lua_gethookcount(L);
|
oldcount = lua_gethookcount(L);
|
||||||
hook = lua_interrupt_callback;
|
hook = lua_interrupt_callback;
|
||||||
count = 1;
|
count = 10;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -278,7 +277,7 @@ static void rev_timer_isr(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
set_evt(ev_flag);
|
set_evt(ev_flag);
|
||||||
if (--ev_data.next_event <= 0 && ev_data.status.event)
|
if (ev_data.status.event)
|
||||||
lua_interrupt_set(ev_data.L, ENABLE_LUA_HOOK);
|
lua_interrupt_set(ev_data.L, ENABLE_LUA_HOOK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -342,7 +341,6 @@ skip_callback:
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
lua_interrupt_set(ev_data.L, DISABLE_LUA_HOOK);
|
lua_interrupt_set(ev_data.L, DISABLE_LUA_HOOK);
|
||||||
ev_data.next_event = EV_TICKS;
|
|
||||||
rb->yield();
|
rb->yield();
|
||||||
} while (!has_thread_status(THREAD_QUIT) && (is_suspend(THREAD_EVENT_ALL)
|
} while (!has_thread_status(THREAD_QUIT) && (is_suspend(THREAD_EVENT_ALL)
|
||||||
|| !ev_data.status.event));
|
|| !ev_data.status.event));
|
||||||
|
@ -540,7 +538,6 @@ static void init_event_data(lua_State *L, struct event_data *ev_data)
|
||||||
ev_data->status.thread = 0;
|
ev_data->status.thread = 0;
|
||||||
|
|
||||||
/*ev_data->event_stack = NULL;*/
|
/*ev_data->event_stack = NULL;*/
|
||||||
ev_data->next_event = EV_TICKS;
|
|
||||||
/* callbacks */
|
/* callbacks */
|
||||||
for (unsigned int i= 0; i < EVENT_CT; i++)
|
for (unsigned int i= 0; i < EVENT_CT; i++)
|
||||||
ev_data->cb[i] = NULL;
|
ev_data->cb[i] = NULL;
|
||||||
|
@ -587,7 +584,7 @@ static int rockev_register(lua_State *L)
|
||||||
event_ticks = luaL_optinteger(L, 3, EV_INPUT);
|
event_ticks = luaL_optinteger(L, 3, EV_INPUT);
|
||||||
break;
|
break;
|
||||||
case CUSTOMEVENT:
|
case CUSTOMEVENT:
|
||||||
event_ticks = luaL_optinteger(L, 3, EV_TIMER_TICKS);
|
event_ticks = luaL_optinteger(L, 3, EV_TICKS);
|
||||||
ev_flag = 0; /* don't remove suspend */
|
ev_flag = 0; /* don't remove suspend */
|
||||||
break;
|
break;
|
||||||
case PLAYBKEVENT: /* see register_playbk_events() for flags */
|
case PLAYBKEVENT: /* see register_playbk_events() for flags */
|
||||||
|
|
Loading…
Reference in a new issue