Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
Don't block Android event loop until all relevant events reach the app.
Browse files Browse the repository at this point in the history
  • Loading branch information
gabomdq committed Sep 27, 2012
1 parent cc4f35c commit 18729b7
Showing 1 changed file with 22 additions and 1 deletion.
23 changes: 22 additions & 1 deletion src/video/android/SDL_androidevents.c
Expand Up @@ -23,11 +23,15 @@
#if SDL_VIDEO_DRIVER_ANDROID

#include "SDL_androidevents.h"
#include "SDL_events.h"

void
Android_PumpEvents(_THIS)
{
static int isPaused = 0;
#if SDL_ANDROID_BLOCK_ON_PAUSE
static int isPausing = 0;
#endif
/* No polling necessary */

/*
Expand All @@ -36,10 +40,12 @@ Android_PumpEvents(_THIS)
* When the resume semaphore is signaled, SDL_GL_CreateContext is called which in turn calls Java code
* SDLActivity::createGLContext -> SDLActivity:: initEGL -> SDLActivity::createEGLSurface -> SDLActivity::createEGLContext
*/
if (isPaused) {

#if SDL_ANDROID_BLOCK_ON_PAUSE
if (isPaused && !isPausing) {
if(SDL_SemWait(Android_ResumeSem) == 0) {
#else
if (isPaused) {
if(SDL_SemTryWait(Android_ResumeSem) == 0) {
#endif
isPaused = 0;
Expand All @@ -53,10 +59,25 @@ Android_PumpEvents(_THIS)
}
}
else {
#if SDL_ANDROID_BLOCK_ON_PAUSE
if( isPausing || SDL_SemTryWait(Android_PauseSem) == 0 ) {
/* We've been signaled to pause, but before we block ourselves, we need to make sure that
SDL_WINDOWEVENT_FOCUS_LOST and SDL_WINDOWEVENT_MINIMIZED have reached the app */
if (SDL_HasEvent(SDL_WINDOWEVENT)) {
isPausing = 1;
}
else {
isPausing = 0;
isPaused = 1;
}
}
#else
if(SDL_SemTryWait(Android_PauseSem) == 0) {
/* If we fall in here, the system is/was paused */
isPaused = 1;
}
#endif

}
}

Expand Down

0 comments on commit 18729b7

Please sign in to comment.