Skip to content

Commit

Permalink
Android: make Android_PumpEvents() more readable
Browse files Browse the repository at this point in the history
No behavior change in this commit.
  • Loading branch information
1bsyl committed Jan 4, 2019
1 parent ca184ac commit cf12234
Showing 1 changed file with 45 additions and 18 deletions.
63 changes: 45 additions & 18 deletions src/video/android/SDL_androidevents.c
Expand Up @@ -63,47 +63,47 @@ android_egl_context_backup(SDL_Window *window)
SDL_GL_MakeCurrent(window, NULL);
}


/*
* Android_ResumeSem and Android_PauseSem are signaled from Java_org_libsdl_app_SDLActivity_nativePause and Java_org_libsdl_app_SDLActivity_nativeResume
* When the pause semaphore is signaled, if SDL_ANDROID_BLOCK_ON_PAUSE is defined the event loop will block until the resume signal is emitted.
*
* No polling necessary
*/

#if SDL_ANDROID_BLOCK_ON_PAUSE

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

/*
* Android_ResumeSem and Android_PauseSem are signaled from Java_org_libsdl_app_SDLActivity_nativePause and Java_org_libsdl_app_SDLActivity_nativeResume
* When the pause semaphore is signaled, if SDL_ANDROID_BLOCK_ON_PAUSE is defined the event loop will block until the resume signal is emitted.
*/

#if SDL_ANDROID_BLOCK_ON_PAUSE
if (isPaused && !isPausing) {

/* Make sure this is the last thing we do before pausing */
SDL_LockMutex(Android_ActivityMutex);
android_egl_context_backup(Android_Window);
SDL_UnlockMutex(Android_ActivityMutex);

ANDROIDAUDIO_PauseDevices();

if (SDL_SemWait(Android_ResumeSem) == 0) {
#else
if (isPaused) {
if (SDL_SemTryWait(Android_ResumeSem) == 0) {
#endif

isPaused = 0;

ANDROIDAUDIO_ResumeDevices();

/* Restore the GL Context from here, as this operation is thread dependent */
if (!SDL_HasEvent(SDL_QUIT)) {
SDL_LockMutex(Android_ActivityMutex);
android_egl_context_restore(Android_Window);
SDL_UnlockMutex(Android_ActivityMutex);
}
}
}
else {
#if SDL_ANDROID_BLOCK_ON_PAUSE
} else {
if (isPausing || SDL_SemTryWait(Android_PauseSem) == 0) {
/* We've been signaled to pause, but before we block ourselves,
/* We've been signaled to pause, but before we block ourselves,
we need to make sure that certain key events have reached the app */
if (SDL_HasEvent(SDL_WINDOWEVENT) || SDL_HasEvent(SDL_APP_WILLENTERBACKGROUND) || SDL_HasEvent(SDL_APP_DIDENTERBACKGROUND) ) {
isPausing = 1;
Expand All @@ -113,19 +113,46 @@ Android_PumpEvents(_THIS)
isPaused = 1;
}
}
}
}

#else

void
Android_PumpEvents(_THIS)
{
static int isPaused = 0;

if (isPaused) {
if (SDL_SemTryWait(Android_ResumeSem) == 0) {

isPaused = 0;

ANDROIDAUDIO_ResumeDevices();

/* Restore the GL Context from here, as this operation is thread dependent */
if (!SDL_HasEvent(SDL_QUIT)) {
SDL_LockMutex(Android_ActivityMutex);
android_egl_context_restore(Android_Window);
SDL_UnlockMutex(Android_ActivityMutex);
}
}
} else {
if (SDL_SemTryWait(Android_PauseSem) == 0) {

SDL_LockMutex(Android_ActivityMutex);
android_egl_context_backup(Android_Window);
SDL_UnlockMutex(Android_ActivityMutex);

ANDROIDAUDIO_PauseDevices();

isPaused = 1;
}
#endif
}
}

#endif

#endif /* SDL_VIDEO_DRIVER_ANDROID */

/* vi: set ts=4 sw=4 expandtab: */

0 comments on commit cf12234

Please sign in to comment.