Loading core/java/android/os/Process.java +3 −0 Original line number Original line Diff line number Diff line Loading @@ -1055,6 +1055,9 @@ public class Process { */ */ public static final native long getPss(int pid); public static final native long getPss(int pid); /** @hide */ public static final native long[] getRss(int pid); /** /** * Specifies the outcome of having started a process. * Specifies the outcome of having started a process. * @hide * @hide Loading core/jni/android_os_Debug.cpp +0 −6 Original line number Original line Diff line number Diff line Loading @@ -33,8 +33,6 @@ #include <iomanip> #include <iomanip> #include <string> #include <string> #include <android-base/stringprintf.h> #include <android-base/unique_fd.h> #include <debuggerd/client.h> #include <debuggerd/client.h> #include <log/log.h> #include <log/log.h> #include <utils/misc.h> #include <utils/misc.h> Loading @@ -50,10 +48,6 @@ namespace android namespace android { { static inline UniqueFile MakeUniqueFile(const char* path, const char* mode) { return UniqueFile(fopen(path, mode), safeFclose); } enum { enum { HEAP_UNKNOWN, HEAP_UNKNOWN, HEAP_DALVIK, HEAP_DALVIK, Loading core/jni/android_os_Debug.h +7 −0 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,8 @@ #include <memory> #include <memory> #include <stdio.h> #include <stdio.h> #include <android-base/stringprintf.h> #include <android-base/unique_fd.h> namespace android { namespace android { Loading @@ -27,6 +29,11 @@ inline void safeFclose(FILE* fp) { } } using UniqueFile = std::unique_ptr<FILE, decltype(&safeFclose)>; using UniqueFile = std::unique_ptr<FILE, decltype(&safeFclose)>; inline UniqueFile MakeUniqueFile(const char* path, const char* mode) { return UniqueFile(fopen(path, mode), safeFclose); } UniqueFile OpenSmapsOrRollup(int pid); UniqueFile OpenSmapsOrRollup(int pid); } // namespace android } // namespace android Loading core/jni/android_util_Process.cpp +34 −0 Original line number Original line Diff line number Diff line Loading @@ -1128,6 +1128,39 @@ static jlong android_os_Process_getPss(JNIEnv* env, jobject clazz, jint pid) return pss * 1024; return pss * 1024; } } static jlongArray android_os_Process_getRss(JNIEnv* env, jobject clazz, jint pid) { // total, file, anon, swap jlong rss[4] = {0, 0, 0, 0}; std::string status_path = android::base::StringPrintf("/proc/%d/status", pid); UniqueFile file = MakeUniqueFile(status_path.c_str(), "re"); char line[256]; while (fgets(line, sizeof(line), file.get())) { jlong v; if ( sscanf(line, "VmRSS: %" SCNd64 " kB", &v) == 1) { rss[0] = v; } else if ( sscanf(line, "RssFile: %" SCNd64 " kB", &v) == 1) { rss[1] = v; } else if ( sscanf(line, "RssAnon: %" SCNd64 " kB", &v) == 1) { rss[2] = v; } else if ( sscanf(line, "VmSwap: %" SCNd64 " kB", &v) == 1) { rss[3] = v; } } jlongArray rssArray = env->NewLongArray(4); if (rssArray == NULL) { jniThrowException(env, "java/lang/OutOfMemoryError", NULL); return NULL; } env->SetLongArrayRegion(rssArray, 0, 4, rss); return rssArray; } jintArray android_os_Process_getPidsForCommands(JNIEnv* env, jobject clazz, jintArray android_os_Process_getPidsForCommands(JNIEnv* env, jobject clazz, jobjectArray commandNames) jobjectArray commandNames) { { Loading Loading @@ -1253,6 +1286,7 @@ static const JNINativeMethod methods[] = { {"parseProcLine", "([BII[I[Ljava/lang/String;[J[F)Z", (void*)android_os_Process_parseProcLine}, {"parseProcLine", "([BII[I[Ljava/lang/String;[J[F)Z", (void*)android_os_Process_parseProcLine}, {"getElapsedCpuTime", "()J", (void*)android_os_Process_getElapsedCpuTime}, {"getElapsedCpuTime", "()J", (void*)android_os_Process_getElapsedCpuTime}, {"getPss", "(I)J", (void*)android_os_Process_getPss}, {"getPss", "(I)J", (void*)android_os_Process_getPss}, {"getRss", "(I)[J", (void*)android_os_Process_getRss}, {"getPidsForCommands", "([Ljava/lang/String;)[I", (void*)android_os_Process_getPidsForCommands}, {"getPidsForCommands", "([Ljava/lang/String;)[I", (void*)android_os_Process_getPidsForCommands}, //{"setApplicationObject", "(Landroid/os/IBinder;)V", (void*)android_os_Process_setApplicationObject}, //{"setApplicationObject", "(Landroid/os/IBinder;)V", (void*)android_os_Process_setApplicationObject}, {"killProcessGroup", "(II)I", (void*)android_os_Process_killProcessGroup}, {"killProcessGroup", "(II)I", (void*)android_os_Process_killProcessGroup}, Loading Loading
core/java/android/os/Process.java +3 −0 Original line number Original line Diff line number Diff line Loading @@ -1055,6 +1055,9 @@ public class Process { */ */ public static final native long getPss(int pid); public static final native long getPss(int pid); /** @hide */ public static final native long[] getRss(int pid); /** /** * Specifies the outcome of having started a process. * Specifies the outcome of having started a process. * @hide * @hide Loading
core/jni/android_os_Debug.cpp +0 −6 Original line number Original line Diff line number Diff line Loading @@ -33,8 +33,6 @@ #include <iomanip> #include <iomanip> #include <string> #include <string> #include <android-base/stringprintf.h> #include <android-base/unique_fd.h> #include <debuggerd/client.h> #include <debuggerd/client.h> #include <log/log.h> #include <log/log.h> #include <utils/misc.h> #include <utils/misc.h> Loading @@ -50,10 +48,6 @@ namespace android namespace android { { static inline UniqueFile MakeUniqueFile(const char* path, const char* mode) { return UniqueFile(fopen(path, mode), safeFclose); } enum { enum { HEAP_UNKNOWN, HEAP_UNKNOWN, HEAP_DALVIK, HEAP_DALVIK, Loading
core/jni/android_os_Debug.h +7 −0 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,8 @@ #include <memory> #include <memory> #include <stdio.h> #include <stdio.h> #include <android-base/stringprintf.h> #include <android-base/unique_fd.h> namespace android { namespace android { Loading @@ -27,6 +29,11 @@ inline void safeFclose(FILE* fp) { } } using UniqueFile = std::unique_ptr<FILE, decltype(&safeFclose)>; using UniqueFile = std::unique_ptr<FILE, decltype(&safeFclose)>; inline UniqueFile MakeUniqueFile(const char* path, const char* mode) { return UniqueFile(fopen(path, mode), safeFclose); } UniqueFile OpenSmapsOrRollup(int pid); UniqueFile OpenSmapsOrRollup(int pid); } // namespace android } // namespace android Loading
core/jni/android_util_Process.cpp +34 −0 Original line number Original line Diff line number Diff line Loading @@ -1128,6 +1128,39 @@ static jlong android_os_Process_getPss(JNIEnv* env, jobject clazz, jint pid) return pss * 1024; return pss * 1024; } } static jlongArray android_os_Process_getRss(JNIEnv* env, jobject clazz, jint pid) { // total, file, anon, swap jlong rss[4] = {0, 0, 0, 0}; std::string status_path = android::base::StringPrintf("/proc/%d/status", pid); UniqueFile file = MakeUniqueFile(status_path.c_str(), "re"); char line[256]; while (fgets(line, sizeof(line), file.get())) { jlong v; if ( sscanf(line, "VmRSS: %" SCNd64 " kB", &v) == 1) { rss[0] = v; } else if ( sscanf(line, "RssFile: %" SCNd64 " kB", &v) == 1) { rss[1] = v; } else if ( sscanf(line, "RssAnon: %" SCNd64 " kB", &v) == 1) { rss[2] = v; } else if ( sscanf(line, "VmSwap: %" SCNd64 " kB", &v) == 1) { rss[3] = v; } } jlongArray rssArray = env->NewLongArray(4); if (rssArray == NULL) { jniThrowException(env, "java/lang/OutOfMemoryError", NULL); return NULL; } env->SetLongArrayRegion(rssArray, 0, 4, rss); return rssArray; } jintArray android_os_Process_getPidsForCommands(JNIEnv* env, jobject clazz, jintArray android_os_Process_getPidsForCommands(JNIEnv* env, jobject clazz, jobjectArray commandNames) jobjectArray commandNames) { { Loading Loading @@ -1253,6 +1286,7 @@ static const JNINativeMethod methods[] = { {"parseProcLine", "([BII[I[Ljava/lang/String;[J[F)Z", (void*)android_os_Process_parseProcLine}, {"parseProcLine", "([BII[I[Ljava/lang/String;[J[F)Z", (void*)android_os_Process_parseProcLine}, {"getElapsedCpuTime", "()J", (void*)android_os_Process_getElapsedCpuTime}, {"getElapsedCpuTime", "()J", (void*)android_os_Process_getElapsedCpuTime}, {"getPss", "(I)J", (void*)android_os_Process_getPss}, {"getPss", "(I)J", (void*)android_os_Process_getPss}, {"getRss", "(I)[J", (void*)android_os_Process_getRss}, {"getPidsForCommands", "([Ljava/lang/String;)[I", (void*)android_os_Process_getPidsForCommands}, {"getPidsForCommands", "([Ljava/lang/String;)[I", (void*)android_os_Process_getPidsForCommands}, //{"setApplicationObject", "(Landroid/os/IBinder;)V", (void*)android_os_Process_setApplicationObject}, //{"setApplicationObject", "(Landroid/os/IBinder;)V", (void*)android_os_Process_setApplicationObject}, {"killProcessGroup", "(II)I", (void*)android_os_Process_killProcessGroup}, {"killProcessGroup", "(II)I", (void*)android_os_Process_killProcessGroup}, Loading