From c17cbb303c2da443010da868d3beb87e050aa370 Mon Sep 17 00:00:00 2001 From: Suren Baghdasaryan Date: Wed, 10 Feb 2021 08:45:05 -0800 Subject: [PATCH] Extend getPssPid to report itemized memtrack values Currently getPssPid includes memtrack HAL reported values in the pss calculation. This makes it impossible to get these values separately. Extend this interface to include itemized memtrack values. Bug: 165832481 Test: dumpsys meminfo Signed-off-by: Suren Baghdasaryan Change-Id: Ieb7e1b79ad8ecae6023338d9992467952558e2bd --- core/java/android/os/Debug.java | 3 ++- core/jni/android_os_Debug.cpp | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/core/java/android/os/Debug.java b/core/java/android/os/Debug.java index c82149e390bae..a2cf1aee3250d 100644 --- a/core/java/android/os/Debug.java +++ b/core/java/android/os/Debug.java @@ -1902,7 +1902,8 @@ public final class Debug * Retrieves the PSS memory used by the process as given by the smaps. Optionally supply a long * array of up to 3 entries to also receive (up to 3 values in order): the Uss and SwapPss and * Rss (only filled in as of {@link android.os.Build.VERSION_CODES#P}) of the process, and - * another array to also retrieve the separate memtrack size. + * another array to also retrieve the separate memtrack sizes (up to 4 values in order): the + * total memtrack reported size, memtrack graphics, memtrack gl and memtrack other. * * @return The PSS memory usage, or 0 if failed to retrieve (i.e., given pid has gone). * @hide diff --git a/core/jni/android_os_Debug.cpp b/core/jni/android_os_Debug.cpp index 2a93b4629e277..b5373f7347ae8 100644 --- a/core/jni/android_os_Debug.cpp +++ b/core/jni/android_os_Debug.cpp @@ -540,6 +540,15 @@ static jlong android_os_Debug_getPssPid(JNIEnv *env, jobject clazz, jint pid, jlong* outMemtrackArray = env->GetLongArrayElements(outMemtrack, 0); if (outMemtrackArray != NULL) { outMemtrackArray[0] = memtrack; + if (env->GetArrayLength(outMemtrack) >= 2) { + outMemtrackArray[1] = graphics_mem.graphics; + } + if (env->GetArrayLength(outMemtrack) >= 3) { + outMemtrackArray[2] = graphics_mem.gl; + } + if (env->GetArrayLength(outMemtrack) >= 4) { + outMemtrackArray[3] = graphics_mem.other; + } } env->ReleaseLongArrayElements(outMemtrack, outMemtrackArray, 0); }