summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Andy Hung <hunga@google.com> 2018-01-23 13:58:02 -0800
committer Andy Hung <hunga@google.com> 2018-01-23 17:14:25 -0800
commit7958358ddb34cebe4fdf99fef8d613c0c74ff17a (patch)
tree60a565224414d6a0fab742aa02fd647534984cf0
parent3a29ce00bdde04f59452a62dc641ae969b682392 (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.cpp7
-rw-r--r--media/java/android/media/AudioSystem.java2
-rw-r--r--services/core/java/com/android/server/audio/AudioService.java14
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);
}