浏览代码

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

This reverts commit c477768e6f926c38d4cdc236cab8376faf9f6789.

We want to add the sentinel anytime we pump inside SDL_WaitEventTimeout() to avoid pumping again the next time through, as a performance optimization.
Sam Lantinga 3 年之前
父节点
当前提交
289c3fbb64
共有 1 个文件被更改,包括 18 次插入12 次删除
  1. 18 12
      src/events/SDL_events.c

+ 18 - 12
src/events/SDL_events.c

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