From 0e869a5cf0e455f7cd5ce5c39192f3433b931e97 Mon Sep 17 00:00:00 2001 From: dhewg Date: Sat, 26 Feb 2011 18:44:17 +0100 Subject: ANDROID: Pause the AudioTrack when possible Only works in situations without any registered channels (or all paused) at the mixer (like on the launcher or GMM). CPU usage before (Galaxy Tab): ~5% scummvm ~15% mediaserver After: ~2% scummvm 0% mediaserver ;) --- backends/platform/android/jni.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'backends/platform/android/jni.cpp') diff --git a/backends/platform/android/jni.cpp b/backends/platform/android/jni.cpp index 5e11203db8..8964fe63d8 100644 --- a/backends/platform/android/jni.cpp +++ b/backends/platform/android/jni.cpp @@ -64,6 +64,7 @@ jmethodID JNI::_MID_setupScummVMSurface = 0; jmethodID JNI::_MID_destroyScummVMSurface = 0; jmethodID JNI::_MID_swapBuffers = 0; +jmethodID JNI::_MID_AudioTrack_flush = 0; jmethodID JNI::_MID_AudioTrack_pause = 0; jmethodID JNI::_MID_AudioTrack_play = 0; jmethodID JNI::_MID_AudioTrack_stop = 0; @@ -332,6 +333,15 @@ void JNI::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) { void JNI::setAudioPause() { JNIEnv *env = JNI::getEnv(); + env->CallVoidMethod(_jobj_audio_track, _MID_AudioTrack_flush); + + if (env->ExceptionCheck()) { + warning("Error flushing AudioTrack"); + + env->ExceptionDescribe(); + env->ExceptionClear(); + } + env->CallVoidMethod(_jobj_audio_track, _MID_AudioTrack_pause); if (env->ExceptionCheck()) { @@ -417,6 +427,7 @@ void JNI::create(JNIEnv *env, jobject self, jobject am, jobject at, return; \ } while (0) + FIND_METHOD(flush, "()V"); FIND_METHOD(pause, "()V"); FIND_METHOD(play, "()V"); FIND_METHOD(stop, "()V"); -- cgit v1.2.3