summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSuren Baghdasaryan <surenb@google.com>2020-10-23 09:31:54 -0700
committerSuren Baghdasaryan <surenb@google.com>2020-12-30 17:32:10 +0000
commitaee45ee0bc05abd181ff16af92c599d31f9fbc7f (patch)
tree81fe070c0c3703e11766d16dd5751b4c9e10770e
parent4c7a71448dd46d171444d18b87e0344b9c912fe8 (diff)
Add total GPU usage report into dumpsys meminfo output
With latest kernel changes, total GPU memory usage is reported and can be obtained via a BPF program. Create JNI interface to query it and report inside dumpsys meminfo output. Bug: 171261987 Test: dumpsys meminfo Signed-off-by: Suren Baghdasaryan <surenb@google.com> Merged-In: I949a13836d5b5bc87fc43f60871b4fbf2add6480 Change-Id: I949a13836d5b5bc87fc43f60871b4fbf2add6480
-rw-r--r--core/java/android/os/Debug.java7
-rw-r--r--core/jni/android_os_Debug.cpp13
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java10
3 files changed, 30 insertions, 0 deletions
diff --git a/core/java/android/os/Debug.java b/core/java/android/os/Debug.java
index 8ab734d2325e..27dc6e0ada43 100644
--- a/core/java/android/os/Debug.java
+++ b/core/java/android/os/Debug.java
@@ -2576,6 +2576,13 @@ public final class Debug
public static native long getIonMappedSizeKb();
/**
+ * Return memory size in kilobytes used by GPU.
+ *
+ * @hide
+ */
+ public static native long getGpuTotalUsageKb();
+
+ /**
* Return whether virtually-mapped kernel stacks are enabled (CONFIG_VMAP_STACK).
* Note: caller needs config_gz read sepolicy permission
*
diff --git a/core/jni/android_os_Debug.cpp b/core/jni/android_os_Debug.cpp
index 5a859aabce7b..28fc8ede1653 100644
--- a/core/jni/android_os_Debug.cpp
+++ b/core/jni/android_os_Debug.cpp
@@ -844,6 +844,17 @@ static jlong android_os_Debug_getIonMappedSizeKb(JNIEnv* env, jobject clazz) {
return ionPss;
}
+static jlong android_os_Debug_getGpuTotalUsageKb(JNIEnv* env, jobject clazz) {
+ jlong sizeKb = -1;
+ uint64_t size;
+
+ if (meminfo::ReadGpuTotalUsageKb(&size)) {
+ sizeKb = size;
+ }
+
+ return sizeKb;
+}
+
static jboolean android_os_Debug_isVmapStack(JNIEnv *env, jobject clazz)
{
static enum {
@@ -912,6 +923,8 @@ static const JNINativeMethod gMethods[] = {
(void*)android_os_Debug_getIonPoolsSizeKb },
{ "getIonMappedSizeKb", "()J",
(void*)android_os_Debug_getIonMappedSizeKb },
+ { "getGpuTotalUsageKb", "()J",
+ (void*)android_os_Debug_getGpuTotalUsageKb },
{ "isVmapStack", "()Z",
(void*)android_os_Debug_isVmapStack },
};
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index e4cdfe92ec8a..40f24283d1b8 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -13744,6 +13744,10 @@ public class ActivityManagerService extends IActivityManager.Stub
// set on ION VMAs, therefore consider the entire ION heap as used kernel memory
kernelUsed += ionHeap;
}
+ final long gpuUsage = Debug.getGpuTotalUsageKb();
+ if (gpuUsage >= 0) {
+ pw.print(" GPU: "); pw.println(stringifyKBSize(gpuUsage));
+ }
final long lostRAM = memInfo.getTotalSizeKb() - (totalPss - totalSwapPss)
- memInfo.getFreeSizeKb() - memInfo.getCachedSizeKb()
- kernelUsed - memInfo.getZramTotalSizeKb();
@@ -14552,6 +14556,12 @@ public class ActivityManagerService extends IActivityManager.Stub
// set on ION VMAs, therefore consider the entire ION heap as used kernel memory
kernelUsed += ionHeap;
}
+ final long gpuUsage = Debug.getGpuTotalUsageKb();
+ if (gpuUsage >= 0) {
+ memInfoBuilder.append(" GPU: ");
+ memInfoBuilder.append(stringifyKBSize(gpuUsage));
+ memInfoBuilder.append("\n");
+ }
memInfoBuilder.append(" Used RAM: ");
memInfoBuilder.append(stringifyKBSize(
totalPss - cachedPss + kernelUsed));