summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/os/Debug.java4
-rw-r--r--core/jni/Android.bp1
-rw-r--r--core/jni/android_os_Debug.cpp33
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java6
-rw-r--r--services/core/java/com/android/server/am/AppProfiler.java6
-rw-r--r--services/core/java/com/android/server/stats/pull/SystemMemoryUtil.java6
6 files changed, 22 insertions, 34 deletions
diff --git a/core/java/android/os/Debug.java b/core/java/android/os/Debug.java
index d90e129d36f7..b4930fa931eb 100644
--- a/core/java/android/os/Debug.java
+++ b/core/java/android/os/Debug.java
@@ -2599,11 +2599,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 125182cab254..91a19e087bf1 100644
--- a/core/jni/Android.bp
+++ b/core/jni/Android.bp
@@ -237,7 +237,6 @@ cc_library_shared {
],
shared_libs: [
- "android.hardware.memtrack-V1-ndk_platform",
"audioclient-types-aidl-cpp",
"audioflinger-aidl-cpp",
"av-types-aidl-cpp",
diff --git a/core/jni/android_os_Debug.cpp b/core/jni/android_os_Debug.cpp
index 41804480122c..4c2b114c724a 100644
--- a/core/jni/android_os_Debug.cpp
+++ b/core/jni/android_os_Debug.cpp
@@ -33,7 +33,6 @@
#include <string>
#include <vector>
-#include <aidl/android/hardware/memtrack/DeviceInfo.h>
#include <android-base/logging.h>
#include <bionic/malloc.h>
#include <debuggerd/client.h>
@@ -46,7 +45,6 @@
#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>
@@ -861,29 +859,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<aidl::android::hardware::memtrack::DeviceInfo> 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;
- }
-
- sizeKb += importer_info->second.size / 1024;
- }
+ ssize_t gpuPrivateMem = memtrack_proc_gl_pss(p);
- return sizeKb;
+ memtrack_proc_destroy(p);
+ return gpuPrivateMem / 1024;
}
static jlong android_os_Debug_getDmabufMappedSizeKb(JNIEnv* env, jobject clazz) {
@@ -994,8 +987,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 2057a7e4264a..99ae52c00995 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -11048,9 +11048,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(" (");
diff --git a/services/core/java/com/android/server/am/AppProfiler.java b/services/core/java/com/android/server/am/AppProfiler.java
index 74094e500de7..36c0de919279 100644
--- a/services/core/java/com/android/server/am/AppProfiler.java
+++ b/services/core/java/com/android/server/am/AppProfiler.java
@@ -1561,9 +1561,9 @@ public class AppProfiler {
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(" (");
diff --git a/services/core/java/com/android/server/stats/pull/SystemMemoryUtil.java b/services/core/java/com/android/server/stats/pull/SystemMemoryUtil.java
index 9f8b27f5f1bf..30b6e688bab6 100644
--- a/services/core/java/com/android/server/stats/pull/SystemMemoryUtil.java
+++ b/services/core/java/com/android/server/stats/pull/SystemMemoryUtil.java
@@ -28,7 +28,7 @@ final class SystemMemoryUtil {
static Metrics getMetrics() {
int totalIonKb = (int) Debug.getDmabufHeapTotalExportedKb();
int gpuTotalUsageKb = (int) Debug.getGpuTotalUsageKb();
- int gpuDmaBufUsageKb = (int) Debug.getGpuDmaBufUsageKb();
+ int gpuPrivateAllocationsKb = (int) Debug.getGpuPrivateMemoryKb();
int dmaBufTotalExportedKb = (int) Debug.getDmabufTotalExportedKb();
long[] mInfos = new long[Debug.MEMINFO_COUNT];
@@ -58,10 +58,6 @@ final class SystemMemoryUtil {
accountedKb += mInfos[Debug.MEMINFO_KERNEL_STACK];
}
- int gpuPrivateAllocationsKb = -1;
- if (gpuTotalUsageKb >= 0 && gpuDmaBufUsageKb >= 0) {
- gpuPrivateAllocationsKb = gpuTotalUsageKb - gpuDmaBufUsageKb;
- }
// If we can distinguish gpu private allocs it means the dmabuf metrics
// are supported already.
if (dmaBufTotalExportedKb >= 0 && gpuPrivateAllocationsKb >= 0) {