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

Commit 8faacd38 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "add android.os.Process.getRss()"

parents 11cf88e2 fb076789
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -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
+0 −6
Original line number Original line Diff line number Diff line
@@ -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>
@@ -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,
+7 −0
Original line number Original line Diff line number Diff line
@@ -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 {


@@ -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
+34 −0
Original line number Original line Diff line number Diff line
@@ -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)
{
{
@@ -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},