Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit de3c20bc authored by Ian Rogers's avatar Ian Rogers Committed by Gerrit Code Review
Browse files

Merge "Track stack memory in MemoryInfo."

parents 545464df 7c9f30bf
Loading
Loading
Loading
Loading
+11 −10
Original line number Diff line number Diff line
@@ -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 "????";
            }
        }
+28 −14
Original line number Diff line number Diff line
@@ -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));
}