diff options
| author | 2018-01-23 13:58:02 -0800 | |
|---|---|---|
| committer | 2018-01-23 17:14:25 -0800 | |
| commit | 7958358ddb34cebe4fdf99fef8d613c0c74ff17a (patch) | |
| tree | 60a565224414d6a0fab742aa02fd647534984cf0 | |
| parent | 3a29ce00bdde04f59452a62dc641ae969b682392 (diff) | |
AudioSystem: Inform AudioFlinger of total memory
To better allocate per-client memory blocks.
Test: Debug logging
Bug: 64161002
Change-Id: I389bdea250a74322fab616f1009f51c6c73aef07
| -rw-r--r-- | core/jni/android_media_AudioSystem.cpp | 7 | ||||
| -rw-r--r-- | media/java/android/media/AudioSystem.java | 2 | ||||
| -rw-r--r-- | services/core/java/com/android/server/audio/AudioService.java | 14 |
3 files changed, 18 insertions, 5 deletions
diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp index 7ec68edddf52..bba09ce38d31 100644 --- a/core/jni/android_media_AudioSystem.cpp +++ b/core/jni/android_media_AudioSystem.cpp @@ -608,9 +608,10 @@ android_media_AudioSystem_getOutputLatency(JNIEnv *env, jobject clazz, jint stre } static jint -android_media_AudioSystem_setLowRamDevice(JNIEnv *env, jobject clazz, jboolean isLowRamDevice) +android_media_AudioSystem_setLowRamDevice( + JNIEnv *env, jobject clazz, jboolean isLowRamDevice, jlong totalMemory) { - return (jint) AudioSystem::setLowRamDevice((bool) isLowRamDevice); + return (jint) AudioSystem::setLowRamDevice((bool) isLowRamDevice, (int64_t) totalMemory); } static jint @@ -1801,7 +1802,7 @@ static const JNINativeMethod gMethods[] = { {"getPrimaryOutputSamplingRate", "()I", (void *)android_media_AudioSystem_getPrimaryOutputSamplingRate}, {"getPrimaryOutputFrameCount", "()I", (void *)android_media_AudioSystem_getPrimaryOutputFrameCount}, {"getOutputLatency", "(I)I", (void *)android_media_AudioSystem_getOutputLatency}, - {"setLowRamDevice", "(Z)I", (void *)android_media_AudioSystem_setLowRamDevice}, + {"setLowRamDevice", "(ZJ)I", (void *)android_media_AudioSystem_setLowRamDevice}, {"checkAudioFlinger", "()I", (void *)android_media_AudioSystem_checkAudioFlinger}, {"listAudioPorts", "(Ljava/util/ArrayList;[I)I", (void *)android_media_AudioSystem_listAudioPorts}, diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java index 2cd764df2c54..cbdecf9d02db 100644 --- a/media/java/android/media/AudioSystem.java +++ b/media/java/android/media/AudioSystem.java @@ -792,7 +792,7 @@ public class AudioSystem public static native int getPrimaryOutputFrameCount(); public static native int getOutputLatency(int stream); - public static native int setLowRamDevice(boolean isLowRamDevice); + public static native int setLowRamDevice(boolean isLowRamDevice, long totalMemory); public static native int checkAudioFlinger(); public static native int listAudioPorts(ArrayList<AudioPort> ports, int[] generation); diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index 7604b6b8f2df..b932fa14dd43 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -6583,7 +6583,19 @@ public class AudioService extends IAudioService.Stub // Inform AudioFlinger of our device's low RAM attribute private static void readAndSetLowRamDevice() { - int status = AudioSystem.setLowRamDevice(ActivityManager.isLowRamDeviceStatic()); + boolean isLowRamDevice = ActivityManager.isLowRamDeviceStatic(); + long totalMemory = 1024 * 1024 * 1024; // 1GB is the default if ActivityManager fails. + + try { + final ActivityManager.MemoryInfo info = new ActivityManager.MemoryInfo(); + ActivityManager.getService().getMemoryInfo(info); + totalMemory = info.totalMem; + } catch (RemoteException e) { + Log.w(TAG, "Cannot obtain MemoryInfo from ActivityManager, assume low memory device"); + isLowRamDevice = true; + } + + final int status = AudioSystem.setLowRamDevice(isLowRamDevice, totalMemory); if (status != 0) { Log.w(TAG, "AudioFlinger informed of device's low RAM attribute; status " + status); } |