diff --git a/core/java/android/os/Debug.java b/core/java/android/os/Debug.java index a7516a428ff08..8f15bff87b456 100644 --- a/core/java/android/os/Debug.java +++ b/core/java/android/os/Debug.java @@ -2593,11 +2593,11 @@ public final class Debug public static native long getIonPoolsSizeKb(); /** - * Return GPU DMA buffer usage in kB or -1 on error. + * Returns the global total GPU-private memory in kB or -1 on error. * * @hide */ - public static native long getGpuDmaBufUsageKb(); + public static native long getGpuPrivateMemoryKb(); /** * Return DMA-BUF memory mapped by processes in kB. diff --git a/core/jni/Android.bp b/core/jni/Android.bp index b236385768b50..6e7dd437fff49 100644 --- a/core/jni/Android.bp +++ b/core/jni/Android.bp @@ -225,7 +225,6 @@ cc_library_shared { ], shared_libs: [ - "android.hardware.memtrack-V1-ndk_platform", "libandroidicu", "libandroid_net", "libbpf_android", diff --git a/core/jni/android_os_Debug.cpp b/core/jni/android_os_Debug.cpp index 5814a187506f4..03508d33cdf75 100644 --- a/core/jni/android_os_Debug.cpp +++ b/core/jni/android_os_Debug.cpp @@ -33,7 +33,6 @@ #include #include -#include #include #include #include @@ -46,7 +45,6 @@ #include "jni.h" #include #include -#include #include #include #include @@ -858,29 +856,24 @@ static jlong android_os_Debug_getDmabufHeapPoolsSizeKb(JNIEnv* env, jobject claz return poolsSizeKb; } -static jlong android_os_Debug_getGpuDmaBufUsageKb(JNIEnv* env, jobject clazz) { - std::vector gpu_device_info; - if (!memtrack_gpu_device_info(&gpu_device_info)) { +static jlong android_os_Debug_getGpuPrivateMemoryKb(JNIEnv* env, jobject clazz) { + struct memtrack_proc* p = memtrack_proc_new(); + if (p == nullptr) { + LOG(ERROR) << "getGpuPrivateMemoryKb: Failed to create memtrack_proc"; return -1; } - dmabufinfo::DmabufSysfsStats stats; - if (!GetDmabufSysfsStats(&stats)) { + // Memtrack hal defines PID 0 as global total for GPU-private (GL) memory. + if (memtrack_proc_get(p, 0) != 0) { + // The memtrack HAL may not be available, avoid flooding the log. + memtrack_proc_destroy(p); return -1; } - jlong sizeKb = 0; - const auto& importer_stats = stats.importer_info(); - for (const auto& dev_info : gpu_device_info) { - const auto& importer_info = importer_stats.find(dev_info.name); - if (importer_info == importer_stats.end()) { - continue; - } + ssize_t gpuPrivateMem = memtrack_proc_gl_pss(p); - sizeKb += importer_info->second.size / 1024; - } - - return sizeKb; + memtrack_proc_destroy(p); + return gpuPrivateMem / 1024; } static jlong android_os_Debug_getDmabufMappedSizeKb(JNIEnv* env, jobject clazz) { @@ -991,8 +984,8 @@ static const JNINativeMethod gMethods[] = { (void*)android_os_Debug_getIonHeapsSizeKb }, { "getDmabufTotalExportedKb", "()J", (void*)android_os_Debug_getDmabufTotalExportedKb }, - { "getGpuDmaBufUsageKb", "()J", - (void*)android_os_Debug_getGpuDmaBufUsageKb }, + { "getGpuPrivateMemoryKb", "()J", + (void*)android_os_Debug_getGpuPrivateMemoryKb }, { "getDmabufHeapTotalExportedKb", "()J", (void*)android_os_Debug_getDmabufHeapTotalExportedKb }, { "getIonPoolsSizeKb", "()J", diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index eed3141621a81..7a985f4050f46 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -13831,9 +13831,9 @@ public class ActivityManagerService extends IActivityManager.Stub } final long gpuUsage = Debug.getGpuTotalUsageKb(); if (gpuUsage >= 0) { - final long gpuDmaBufUsage = Debug.getGpuDmaBufUsageKb(); - if (gpuDmaBufUsage >= 0) { - final long gpuPrivateUsage = gpuUsage - gpuDmaBufUsage; + final long gpuPrivateUsage = Debug.getGpuPrivateMemoryKb(); + if (gpuPrivateUsage >= 0) { + final long gpuDmaBufUsage = gpuUsage - gpuPrivateUsage; pw.print(" GPU: "); pw.print(stringifyKBSize(gpuUsage)); pw.print(" ("); @@ -14701,9 +14701,9 @@ public class ActivityManagerService extends IActivityManager.Stub final long gpuUsage = Debug.getGpuTotalUsageKb(); if (gpuUsage >= 0) { - final long gpuDmaBufUsage = Debug.getGpuDmaBufUsageKb(); - if (gpuDmaBufUsage >= 0) { - final long gpuPrivateUsage = gpuUsage - gpuDmaBufUsage; + final long gpuPrivateUsage = Debug.getGpuPrivateMemoryKb(); + if (gpuPrivateUsage >= 0) { + final long gpuDmaBufUsage = gpuUsage - gpuPrivateUsage; memInfoBuilder.append(" GPU: "); memInfoBuilder.append(stringifyKBSize(gpuUsage)); memInfoBuilder.append(" (");