Loading core/java/android/os/Debug.java +7 −0 Original line number Diff line number Diff line Loading @@ -2583,6 +2583,13 @@ public final class Debug */ public static native long getIonPoolsSizeKb(); /** * Return GPU DMA buffer usage in kB or -1 on error. * * @hide */ public static native long getGpuDmaBufUsageKb(); /** * Return DMA-BUF memory mapped by processes in kB. * Notes: Loading core/jni/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -206,6 +206,7 @@ cc_library_shared { ], shared_libs: [ "android.hardware.memtrack-unstable-ndk_platform", "libandroidicu", "libbpf_android", "libnetdbpf", Loading core/jni/android_os_Debug.cpp +29 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ #include <string> #include <vector> #include <aidl/android/hardware/memtrack/DeviceInfo.h> #include <android-base/logging.h> #include <bionic/malloc.h> #include <debuggerd/client.h> Loading @@ -45,6 +46,7 @@ #include "jni.h" #include <dmabufinfo/dmabuf_sysfs_stats.h> #include <dmabufinfo/dmabufinfo.h> #include <dmabufinfo/dmabuf_sysfs_stats.h> #include <meminfo/procmeminfo.h> #include <meminfo/sysmeminfo.h> #include <memtrack/memtrack.h> Loading Loading @@ -846,6 +848,31 @@ static jlong android_os_Debug_getDmabufHeapPoolsSizeKb(JNIEnv* env, jobject claz return poolsSizeKb; } static jlong android_os_Debug_getGpuDmaBufUsageKb(JNIEnv* env, jobject clazz) { std::vector<aidl::android::hardware::memtrack::DeviceInfo> gpu_device_info; if (!memtrack_gpu_device_info(&gpu_device_info)) { return -1; } dmabufinfo::DmabufSysfsStats stats; if (!GetDmabufSysfsStats(&stats)) { 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; } sizeKb += importer_info->second.size; } return sizeKb; } static jlong android_os_Debug_getDmabufMappedSizeKb(JNIEnv* env, jobject clazz) { jlong dmabufPss = 0; std::vector<dmabufinfo::DmaBuffer> dmabufs; Loading Loading @@ -954,6 +981,8 @@ static const JNINativeMethod gMethods[] = { (void*)android_os_Debug_getIonHeapsSizeKb }, { "getDmabufTotalExportedKb", "()J", (void*)android_os_Debug_getDmabufTotalExportedKb }, { "getGpuDmaBufUsageKb", "()J", (void*)android_os_Debug_getGpuDmaBufUsageKb }, { "getIonPoolsSizeKb", "()J", (void*)android_os_Debug_getIonPoolsSizeKb }, { "getDmabufMappedSizeKb", "()J", Loading services/core/java/com/android/server/am/ActivityManagerService.java +29 −4 Original line number Diff line number Diff line Loading @@ -13756,8 +13756,20 @@ 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; pw.print(" GPU: "); pw.print(stringifyKBSize(gpuUsage)); pw.print(" ("); pw.print(stringifyKBSize(gpuDmaBufUsage)); pw.print(" dmabuf + "); pw.print(stringifyKBSize(gpuPrivateUsage)); pw.println(" private)"); } else { pw.print(" GPU: "); pw.println(stringifyKBSize(gpuUsage)); } } /* * Note: ION/DMA-BUF heap pools are reclaimable and hence, they are included as part of Loading Loading @@ -14586,10 +14598,23 @@ 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; memInfoBuilder.append(" GPU: "); memInfoBuilder.append(stringifyKBSize(gpuUsage)); memInfoBuilder.append(" ("); memInfoBuilder.append(stringifyKBSize(gpuDmaBufUsage)); memInfoBuilder.append(" dmabuf + "); memInfoBuilder.append(stringifyKBSize(gpuPrivateUsage)); memInfoBuilder.append(" private)\n"); } else { memInfoBuilder.append(" GPU: "); memInfoBuilder.append(stringifyKBSize(gpuUsage)); memInfoBuilder.append("\n"); } } memInfoBuilder.append(" Used RAM: "); memInfoBuilder.append(stringifyKBSize( totalPss - cachedPss + kernelUsed)); Loading
core/java/android/os/Debug.java +7 −0 Original line number Diff line number Diff line Loading @@ -2583,6 +2583,13 @@ public final class Debug */ public static native long getIonPoolsSizeKb(); /** * Return GPU DMA buffer usage in kB or -1 on error. * * @hide */ public static native long getGpuDmaBufUsageKb(); /** * Return DMA-BUF memory mapped by processes in kB. * Notes: Loading
core/jni/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -206,6 +206,7 @@ cc_library_shared { ], shared_libs: [ "android.hardware.memtrack-unstable-ndk_platform", "libandroidicu", "libbpf_android", "libnetdbpf", Loading
core/jni/android_os_Debug.cpp +29 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ #include <string> #include <vector> #include <aidl/android/hardware/memtrack/DeviceInfo.h> #include <android-base/logging.h> #include <bionic/malloc.h> #include <debuggerd/client.h> Loading @@ -45,6 +46,7 @@ #include "jni.h" #include <dmabufinfo/dmabuf_sysfs_stats.h> #include <dmabufinfo/dmabufinfo.h> #include <dmabufinfo/dmabuf_sysfs_stats.h> #include <meminfo/procmeminfo.h> #include <meminfo/sysmeminfo.h> #include <memtrack/memtrack.h> Loading Loading @@ -846,6 +848,31 @@ static jlong android_os_Debug_getDmabufHeapPoolsSizeKb(JNIEnv* env, jobject claz return poolsSizeKb; } static jlong android_os_Debug_getGpuDmaBufUsageKb(JNIEnv* env, jobject clazz) { std::vector<aidl::android::hardware::memtrack::DeviceInfo> gpu_device_info; if (!memtrack_gpu_device_info(&gpu_device_info)) { return -1; } dmabufinfo::DmabufSysfsStats stats; if (!GetDmabufSysfsStats(&stats)) { 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; } sizeKb += importer_info->second.size; } return sizeKb; } static jlong android_os_Debug_getDmabufMappedSizeKb(JNIEnv* env, jobject clazz) { jlong dmabufPss = 0; std::vector<dmabufinfo::DmaBuffer> dmabufs; Loading Loading @@ -954,6 +981,8 @@ static const JNINativeMethod gMethods[] = { (void*)android_os_Debug_getIonHeapsSizeKb }, { "getDmabufTotalExportedKb", "()J", (void*)android_os_Debug_getDmabufTotalExportedKb }, { "getGpuDmaBufUsageKb", "()J", (void*)android_os_Debug_getGpuDmaBufUsageKb }, { "getIonPoolsSizeKb", "()J", (void*)android_os_Debug_getIonPoolsSizeKb }, { "getDmabufMappedSizeKb", "()J", Loading
services/core/java/com/android/server/am/ActivityManagerService.java +29 −4 Original line number Diff line number Diff line Loading @@ -13756,8 +13756,20 @@ 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; pw.print(" GPU: "); pw.print(stringifyKBSize(gpuUsage)); pw.print(" ("); pw.print(stringifyKBSize(gpuDmaBufUsage)); pw.print(" dmabuf + "); pw.print(stringifyKBSize(gpuPrivateUsage)); pw.println(" private)"); } else { pw.print(" GPU: "); pw.println(stringifyKBSize(gpuUsage)); } } /* * Note: ION/DMA-BUF heap pools are reclaimable and hence, they are included as part of Loading Loading @@ -14586,10 +14598,23 @@ 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; memInfoBuilder.append(" GPU: "); memInfoBuilder.append(stringifyKBSize(gpuUsage)); memInfoBuilder.append(" ("); memInfoBuilder.append(stringifyKBSize(gpuDmaBufUsage)); memInfoBuilder.append(" dmabuf + "); memInfoBuilder.append(stringifyKBSize(gpuPrivateUsage)); memInfoBuilder.append(" private)\n"); } else { memInfoBuilder.append(" GPU: "); memInfoBuilder.append(stringifyKBSize(gpuUsage)); memInfoBuilder.append("\n"); } } memInfoBuilder.append(" Used RAM: "); memInfoBuilder.append(stringifyKBSize( totalPss - cachedPss + kernelUsed));