From dd853f111c6d5bc0b3063c1e767b7f87004ffa79 Mon Sep 17 00:00:00 2001 From: pelya Date: Thu, 10 Jun 2010 18:47:50 +0300 Subject: [PATCH] Increase priority for audio thread to prevent warnings and errors about "CPU pegged" --- .../project/jni/sdl/src/audio/android/SDL_androidaudio.c | 7 +++++++ alienblaster/project/src/Audio.java | 8 ++++++++ 2 files changed, 15 insertions(+) diff --git a/alienblaster/project/jni/sdl/src/audio/android/SDL_androidaudio.c b/alienblaster/project/jni/sdl/src/audio/android/SDL_androidaudio.c index 697902097..1b8733d4d 100644 --- a/alienblaster/project/jni/sdl/src/audio/android/SDL_androidaudio.c +++ b/alienblaster/project/jni/sdl/src/audio/android/SDL_androidaudio.c @@ -35,6 +35,7 @@ #include #include #include // for memset() +#include #define _THIS SDL_AudioDevice *this @@ -190,12 +191,18 @@ static jmethodID JavaFillBuffer = NULL; static void ANDROIDAUD_ThreadInit(_THIS) { jclass JavaAudioThreadClass = NULL; + jmethodID JavaInitThread = NULL; + struct sched_param param; (*jniVM)->AttachCurrentThread(jniVM, &jniEnvPlaying, NULL); + JavaAudioThreadClass = (*jniEnvPlaying)->GetObjectClass(jniEnvPlaying, JavaAudioThread); JavaFillBuffer = (*jniEnvPlaying)->GetMethodID(jniEnvPlaying, JavaAudioThreadClass, "fillBuffer", "()I"); + /* HACK: raise our own thread priority to max to get rid of "W/AudioFlinger: write blocked for 54 msecs" errors */ + JavaInitThread = (*jniEnvPlaying)->GetMethodID(jniEnvPlaying, JavaAudioThreadClass, "initAudioThread", "()I"); + (*jniEnvPlaying)->CallIntMethod( jniEnvPlaying, JavaAudioThread, JavaInitThread ); }; static void ANDROIDAUD_ThreadDeinit(_THIS) diff --git a/alienblaster/project/src/Audio.java b/alienblaster/project/src/Audio.java index a5b2edfbf..54a8568c7 100644 --- a/alienblaster/project/src/Audio.java +++ b/alienblaster/project/src/Audio.java @@ -15,6 +15,7 @@ import android.media.AudioFormat; import java.io.*; import java.nio.ByteBuffer; import android.util.Log; +import java.lang.Thread; class AudioThread { @@ -74,6 +75,13 @@ class AudioThread { return 1; } + public int initAudioThread() + { + // Make audio thread priority higher so audio thread won't get underrun + Thread.currentThread().setPriority(Thread.MAX_PRIORITY); + return 1; + } + private native int nativeAudioInitJavaCallbacks(); }