Merge "Fix GL memory not being removed from lost RAM" am: f7e97bd385 am: 72b5ecdea4
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1901032 Change-Id: I4d09f3cb7698ae89a0fade3b364ef48978916a17
This commit is contained in:
@@ -34,6 +34,7 @@
|
||||
#include <vector>
|
||||
|
||||
#include <android-base/logging.h>
|
||||
#include <android-base/properties.h>
|
||||
#include <bionic/malloc.h>
|
||||
#include <debuggerd/client.h>
|
||||
#include <log/log.h>
|
||||
@@ -859,7 +860,22 @@ static jlong android_os_Debug_getDmabufHeapPoolsSizeKb(JNIEnv* env, jobject claz
|
||||
return poolsSizeKb;
|
||||
}
|
||||
|
||||
static bool halSupportsGpuPrivateMemory() {
|
||||
int productApiLevel =
|
||||
android::base::GetIntProperty("ro.product.first_api_level",
|
||||
android::base::GetIntProperty("ro.build.version.sdk",
|
||||
__ANDROID_API_FUTURE__));
|
||||
int boardApiLevel =
|
||||
android::base::GetIntProperty("ro.board.api_level",
|
||||
android::base::GetIntProperty("ro.board.first_api_level",
|
||||
__ANDROID_API_FUTURE__));
|
||||
|
||||
return std::min(productApiLevel, boardApiLevel) >= __ANDROID_API_S__;
|
||||
}
|
||||
|
||||
static jlong android_os_Debug_getGpuPrivateMemoryKb(JNIEnv* env, jobject clazz) {
|
||||
static bool gpuPrivateMemorySupported = halSupportsGpuPrivateMemory();
|
||||
|
||||
struct memtrack_proc* p = memtrack_proc_new();
|
||||
if (p == nullptr) {
|
||||
LOG(ERROR) << "getGpuPrivateMemoryKb: Failed to create memtrack_proc";
|
||||
@@ -876,6 +892,12 @@ static jlong android_os_Debug_getGpuPrivateMemoryKb(JNIEnv* env, jobject clazz)
|
||||
ssize_t gpuPrivateMem = memtrack_proc_gl_pss(p);
|
||||
|
||||
memtrack_proc_destroy(p);
|
||||
|
||||
// Old HAL implementations may return 0 for GPU private memory if not supported
|
||||
if (gpuPrivateMem == 0 && !gpuPrivateMemorySupported) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return gpuPrivateMem / 1024;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user