Merge "Prevent double-counting of kernel stack size in dumpsys reports"
This commit is contained in:
@@ -2526,4 +2526,12 @@ public final class Debug
|
||||
* @hide
|
||||
*/
|
||||
public static native long getIonMappedSizeKb();
|
||||
|
||||
/**
|
||||
* Return whether virtually-mapped kernel stacks are enabled (CONFIG_VMAP_STACK).
|
||||
* Note: caller needs config_gz read sepolicy permission
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public static native boolean isVmapStack();
|
||||
}
|
||||
|
||||
@@ -107,9 +107,12 @@ public final class MemInfoReader {
|
||||
* Amount of RAM that is in use by the kernel for actual allocations.
|
||||
*/
|
||||
public long getKernelUsedSizeKb() {
|
||||
return mInfos[Debug.MEMINFO_SHMEM] + mInfos[Debug.MEMINFO_SLAB_UNRECLAIMABLE]
|
||||
+ mInfos[Debug.MEMINFO_VM_ALLOC_USED] + mInfos[Debug.MEMINFO_PAGE_TABLES]
|
||||
+ mInfos[Debug.MEMINFO_KERNEL_STACK];
|
||||
long size = mInfos[Debug.MEMINFO_SHMEM] + mInfos[Debug.MEMINFO_SLAB_UNRECLAIMABLE]
|
||||
+ mInfos[Debug.MEMINFO_VM_ALLOC_USED] + mInfos[Debug.MEMINFO_PAGE_TABLES];
|
||||
if (!Debug.isVmapStack()) {
|
||||
size += mInfos[Debug.MEMINFO_KERNEL_STACK];
|
||||
}
|
||||
return size;
|
||||
}
|
||||
|
||||
public long getSwapTotalSizeKb() {
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
#include <memunreachable/memunreachable.h>
|
||||
#include <android-base/strings.h>
|
||||
#include "android_os_Debug.h"
|
||||
#include <vintf/VintfObject.h>
|
||||
|
||||
namespace android
|
||||
{
|
||||
@@ -833,6 +834,23 @@ static jlong android_os_Debug_getIonMappedSizeKb(JNIEnv* env, jobject clazz) {
|
||||
return ionPss;
|
||||
}
|
||||
|
||||
static jboolean android_os_Debug_isVmapStack(JNIEnv *env, jobject clazz)
|
||||
{
|
||||
static enum {
|
||||
CONFIG_UNKNOWN,
|
||||
CONFIG_SET,
|
||||
CONFIG_UNSET,
|
||||
} cfg_state = CONFIG_UNKNOWN;
|
||||
|
||||
if (cfg_state == CONFIG_UNKNOWN) {
|
||||
const std::map<std::string, std::string> configs =
|
||||
vintf::VintfObject::GetInstance()->getRuntimeInfo()->kernelConfigs();
|
||||
std::map<std::string, std::string>::const_iterator it = configs.find("CONFIG_VMAP_STACK");
|
||||
cfg_state = (it != configs.end() && it->second == "y") ? CONFIG_SET : CONFIG_UNSET;
|
||||
}
|
||||
return cfg_state == CONFIG_SET;
|
||||
}
|
||||
|
||||
/*
|
||||
* JNI registration.
|
||||
*/
|
||||
@@ -882,6 +900,8 @@ static const JNINativeMethod gMethods[] = {
|
||||
(void*)android_os_Debug_getIonPoolsSizeKb },
|
||||
{ "getIonMappedSizeKb", "()J",
|
||||
(void*)android_os_Debug_getIonMappedSizeKb },
|
||||
{ "isVmapStack", "()Z",
|
||||
(void*)android_os_Debug_isVmapStack },
|
||||
};
|
||||
|
||||
int register_android_os_Debug(JNIEnv *env)
|
||||
|
||||
Reference in New Issue
Block a user