am de3c20bc
: Merge "Track stack memory in MemoryInfo."
* commit 'de3c20bcb546e50980a642b72c1e8353e5bd2cdc': Track stack memory in MemoryInfo.
This commit is contained in:
@ -130,7 +130,7 @@ public final class Debug
|
||||
public int otherSharedDirty;
|
||||
|
||||
/** @hide */
|
||||
public static final int NUM_OTHER_STATS = 9;
|
||||
public static final int NUM_OTHER_STATS = 10;
|
||||
|
||||
private int[] otherStats = new int[NUM_OTHER_STATS*3];
|
||||
|
||||
@ -177,15 +177,16 @@ public final class Debug
|
||||
/* @hide */
|
||||
public static String getOtherLabel(int which) {
|
||||
switch (which) {
|
||||
case 0: return "Cursor";
|
||||
case 1: return "Ashmem";
|
||||
case 2: return "Other dev";
|
||||
case 3: return ".so mmap";
|
||||
case 4: return ".jar mmap";
|
||||
case 5: return ".apk mmap";
|
||||
case 6: return ".ttf mmap";
|
||||
case 7: return ".dex mmap";
|
||||
case 8: return "Other mmap";
|
||||
case 0: return "Stack";
|
||||
case 1: return "Cursor";
|
||||
case 2: return "Ashmem";
|
||||
case 3: return "Other dev";
|
||||
case 4: return ".so mmap";
|
||||
case 5: return ".jar mmap";
|
||||
case 6: return ".apk mmap";
|
||||
case 7: return ".ttf mmap";
|
||||
case 8: return ".dex mmap";
|
||||
case 9: return "Other mmap";
|
||||
default: return "????";
|
||||
}
|
||||
}
|
||||
|
@ -43,6 +43,7 @@ enum {
|
||||
HEAP_UNKNOWN,
|
||||
HEAP_DALVIK,
|
||||
HEAP_NATIVE,
|
||||
HEAP_STACK,
|
||||
HEAP_CURSOR,
|
||||
HEAP_ASHMEM,
|
||||
HEAP_UNKNOWN_DEV,
|
||||
@ -164,6 +165,8 @@ static void read_mapinfo(FILE *fp, stats_t* stats)
|
||||
whichHeap = HEAP_NATIVE;
|
||||
} else if (strstr(name, "/dev/ashmem/dalvik-") == name) {
|
||||
whichHeap = HEAP_DALVIK;
|
||||
} else if (strstr(name, "[stack") == name) {
|
||||
whichHeap = HEAP_STACK;
|
||||
} else if (strstr(name, "/dev/ashmem/CursorWindow") == name) {
|
||||
whichHeap = HEAP_CURSOR;
|
||||
} else if (strstr(name, "/dev/ashmem/") == name) {
|
||||
@ -510,7 +513,7 @@ static void android_os_Debug_dumpNativeHeap(JNIEnv* env, jobject clazz,
|
||||
jobject fileDescriptor)
|
||||
{
|
||||
if (fileDescriptor == NULL) {
|
||||
jniThrowNullPointerException(env, NULL);
|
||||
jniThrowNullPointerException(env, "fd == null");
|
||||
return;
|
||||
}
|
||||
int origFd = jniGetFDFromFileDescriptor(env, fileDescriptor);
|
||||
@ -547,7 +550,7 @@ static void android_os_Debug_dumpNativeBacktraceToFile(JNIEnv* env, jobject claz
|
||||
jint pid, jstring fileName)
|
||||
{
|
||||
if (fileName == NULL) {
|
||||
jniThrowNullPointerException(env, NULL);
|
||||
jniThrowNullPointerException(env, "file == null");
|
||||
return;
|
||||
}
|
||||
const jchar* str = env->GetStringCritical(fileName, 0);
|
||||
@ -611,6 +614,19 @@ int register_android_os_Debug(JNIEnv *env)
|
||||
{
|
||||
jclass clazz = env->FindClass("android/os/Debug$MemoryInfo");
|
||||
|
||||
// Sanity check the number of other statistics expected in Java matches here.
|
||||
jfieldID numOtherStats_field = env->GetStaticFieldID(clazz, "NUM_OTHER_STATS", "I");
|
||||
jint numOtherStats = env->GetStaticIntField(clazz, numOtherStats_field);
|
||||
int expectedNumOtherStats = _NUM_HEAP - _NUM_CORE_HEAP;
|
||||
if (numOtherStats != expectedNumOtherStats) {
|
||||
jniThrowExceptionFmt(env, "java/lang/RuntimeException",
|
||||
"android.os.Debug.Meminfo.NUM_OTHER_STATS=%d expected %d",
|
||||
numOtherStats, expectedNumOtherStats);
|
||||
return JNI_ERR;
|
||||
}
|
||||
|
||||
otherStats_field = env->GetFieldID(clazz, "otherStats", "[I");
|
||||
|
||||
for (int i=0; i<_NUM_CORE_HEAP; i++) {
|
||||
stat_fields[i].pss_field =
|
||||
env->GetFieldID(clazz, stat_field_names[i].pss_name, "I");
|
||||
@ -620,8 +636,6 @@ int register_android_os_Debug(JNIEnv *env)
|
||||
env->GetFieldID(clazz, stat_field_names[i].sharedDirty_name, "I");
|
||||
}
|
||||
|
||||
otherStats_field = env->GetFieldID(clazz, "otherStats", "[I");
|
||||
|
||||
return jniRegisterNativeMethods(env, "android/os/Debug", gMethods, NELEM(gMethods));
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user