Revert "We only need to add the sentinel at the top of SDL_WaitEventTimeout()"

This reverts commit c477768e6f.

We want to add the sentinel anytime we pump inside SDL_WaitEventTimeout() to avoid pumping again the next time through, as a performance optimization.
This commit is contained in:
Sam Lantinga 2022-01-07 17:07:22 -08:00
parent 1085c317a5
commit 289c3fbb64
1 changed files with 18 additions and 12 deletions

View File

@ -809,7 +809,7 @@ SDL_FlushEvents(Uint32 minType, Uint32 maxType)
/* Run the system dependent event loops */
void
SDL_PumpEvents()
SDL_PumpEventsInternal(SDL_bool push_sentinel)
{
SDL_VideoDevice *_this = SDL_GetVideoDevice();
@ -836,6 +836,20 @@ SDL_PumpEvents()
#endif
SDL_SendPendingSignalEvents(); /* in case we had a signal handler fire, etc. */
if (push_sentinel && SDL_GetEventState(SDL_POLLSENTINEL) == SDL_ENABLE) {
SDL_Event sentinel;
SDL_zero(sentinel);
sentinel.type = SDL_POLLSENTINEL;
SDL_PushEvent(&sentinel);
}
}
void
SDL_PumpEvents()
{
SDL_PumpEventsInternal(SDL_FALSE);
}
/* Public functions */
@ -877,7 +891,7 @@ SDL_WaitEventTimeout_Device(_THIS, SDL_Window *wakeup_window, SDL_Event * event,
c) Periodic processing that takes place in some platform PumpEvents() functions happens
d) Signals received in WaitEventTimeout() are turned into SDL events
*/
SDL_PumpEvents();
SDL_PumpEventsInternal(SDL_TRUE);
if (!_this->wakeup_lock || SDL_LockMutex(_this->wakeup_lock) == 0) {
int status = SDL_PeepEvents(event, 1, SDL_GETEVENT, SDL_FIRSTEVENT, SDL_LASTEVENT);
@ -976,15 +990,7 @@ SDL_WaitEventTimeout(SDL_Event * event, int timeout)
/* If there isn't a poll sentinel event pending, pump events and add one */
if (SDL_AtomicGet(&SDL_sentinel_pending) == 0) {
SDL_PumpEvents();
if (SDL_GetEventState(SDL_POLLSENTINEL) == SDL_ENABLE) {
SDL_Event sentinel;
SDL_zero(sentinel);
sentinel.type = SDL_POLLSENTINEL;
SDL_PushEvent(&sentinel);
}
SDL_PumpEventsInternal(SDL_TRUE);
}
/* First check for existing events */
@ -1031,7 +1037,7 @@ SDL_WaitEventTimeout(SDL_Event * event, int timeout)
}
for (;;) {
SDL_PumpEvents();
SDL_PumpEventsInternal(SDL_TRUE);
switch (SDL_PeepEvents(event, 1, SDL_GETEVENT, SDL_FIRSTEVENT, SDL_LASTEVENT)) {
case -1:
return 0;