Merge "Add API to get GPU private memory" am: e84ebfc0fc
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1764047 Change-Id: Id2f283abf8cb2c06b1aaec7ee7723e063f03ee5f
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -225,7 +225,6 @@ cc_library_shared {
|
||||
],
|
||||
|
||||
shared_libs: [
|
||||
"android.hardware.memtrack-V1-ndk_platform",
|
||||
"libandroidicu",
|
||||
"libandroid_net",
|
||||
"libbpf_android",
|
||||
|
||||
@@ -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>
|
||||
@@ -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<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;
|
||||
}
|
||||
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",
|
||||
|
||||
@@ -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(" (");
|
||||
|
||||
Reference in New Issue
Block a user