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

Commit f5c82e61 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "frameworks/base: Tap process start event to trigger perf lib."

parents 4b6f95f6 5c821425
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -54,6 +54,11 @@ public class ActivityTrigger
        native_at_deinit();
    }

    /** &hide */
    public void activityStartProcessTrigger(String process, int pid) {
        native_at_startProcessActivity(process, pid);
    }

    /** &hide */
    public void activityStartTrigger(Intent intent, ActivityInfo acInfo, ApplicationInfo appInfo) {
        ComponentName cn = intent.getComponent();
@@ -86,4 +91,5 @@ public class ActivityTrigger
    private native int native_at_startActivity(String activity, int flags);
    private native void native_at_resumeActivity(String activity);
    private native void native_at_deinit();
    private native void native_at_startProcessActivity(String process, int pid);
}
+26 −3
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ typedef struct dlLibHandler {
    void (*resumeActivity)(const char *);
    void (*init)(void);
    void (*deinit)(void);
    void (*startProcessActivity)(const char *, int);
    const char *dlname;
}dlLibHandler;

@@ -64,11 +65,11 @@ typedef struct dlLibHandler {
 * library -both handlers for Start and Resume events.
 */
static dlLibHandler mDlLibHandlers[] = {
    {NULL, NULL, NULL, NULL, NULL,
    {NULL, NULL, NULL, NULL, NULL, NULL,
     "ro.vendor.at_library"},
    {NULL, NULL, NULL, NULL, NULL,
    {NULL, NULL, NULL, NULL, NULL, NULL,
     "ro.vendor.gt_library"},
     {NULL, NULL, NULL, NULL, NULL,
     {NULL, NULL, NULL, NULL, NULL, NULL,
     "ro.vendor.wl_library"}
};

@@ -122,10 +123,17 @@ com_android_internal_app_ActivityTrigger_native_at_init()
                errored = true;
            }
        }
        if (!errored) {
            *(void **) (&mDlLibHandlers[i].startProcessActivity) = dlsym(mDlLibHandlers[i].dlhandle, "activity_trigger_process_start");
            if ((rc = dlerror()) != NULL) {
                errored = true;
            }
        }

        if (errored) {
            mDlLibHandlers[i].startActivity  = NULL;
            mDlLibHandlers[i].resumeActivity = NULL;
            mDlLibHandlers[i].startProcessActivity = NULL;
            if (mDlLibHandlers[i].dlhandle) {
                dlclose(mDlLibHandlers[i].dlhandle);
                mDlLibHandlers[i].dlhandle = NULL;
@@ -145,6 +153,7 @@ com_android_internal_app_ActivityTrigger_native_at_deinit(JNIEnv *env, jobject c
        if (mDlLibHandlers[i].dlhandle) {
            mDlLibHandlers[i].startActivity  = NULL;
            mDlLibHandlers[i].resumeActivity = NULL;
            mDlLibHandlers[i].startProcessActivity = NULL;

            *(void **) (&mDlLibHandlers[i].deinit) = dlsym(mDlLibHandlers[i].dlhandle, "activity_trigger_deinit");
            if (mDlLibHandlers[i].deinit) {
@@ -157,6 +166,19 @@ com_android_internal_app_ActivityTrigger_native_at_deinit(JNIEnv *env, jobject c
    }
}

static void
com_android_internal_app_ActivityTrigger_native_at_startProcessActivity(JNIEnv *env, jobject clazz, jstring process, jint pid)
{
    size_t numlibs = sizeof (mDlLibHandlers) / sizeof (*mDlLibHandlers);
    const char *actStr = env->GetStringUTFChars(process, NULL);
    for(size_t i = 0; i < numlibs; i++){
        if(mDlLibHandlers[i].startProcessActivity && process && actStr) {
            (*mDlLibHandlers[i].startProcessActivity)(actStr, pid);
        }
    }
    env->ReleaseStringUTFChars(process, actStr);
}

static jint
com_android_internal_app_ActivityTrigger_native_at_startActivity(JNIEnv *env, jobject clazz, jstring activity, jint flags)
{
@@ -196,6 +218,7 @@ static JNINativeMethod gMethods[] = {
    {"native_at_startActivity",  "(Ljava/lang/String;I)I", (void *)com_android_internal_app_ActivityTrigger_native_at_startActivity},
    {"native_at_resumeActivity", "(Ljava/lang/String;)V", (void *)com_android_internal_app_ActivityTrigger_native_at_resumeActivity},
    {"native_at_deinit",         "()V",                   (void *)com_android_internal_app_ActivityTrigger_native_at_deinit},
    {"native_at_startProcessActivity", "(Ljava/lang/String;I)V", (void *)com_android_internal_app_ActivityTrigger_native_at_startProcessActivity},
};


+6 −0
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ import com.android.internal.app.IAppOpsService;
import com.android.internal.app.IVoiceInteractor;
import com.android.internal.app.ProcessMap;
import com.android.internal.app.ProcessStats;
import com.android.internal.app.ActivityTrigger;
import com.android.internal.os.BackgroundThread;
import com.android.internal.os.BatteryStatsImpl;
import com.android.internal.os.IResultReceiver;
@@ -1395,6 +1396,8 @@ public final class ActivityManagerService extends ActivityManagerNative
    static final int FIRST_COMPAT_MODE_MSG = 300;
    static final int FIRST_SUPERVISOR_STACK_MSG = 100;
    static final ActivityTrigger mActivityTrigger = new ActivityTrigger();
    CompatModeDialog mCompatModeDialog;
    long mLastMemUsageReportTime = 0;
@@ -3467,6 +3470,9 @@ public final class ActivityManagerService extends ActivityManagerNative
                }
            }
            checkTime(startTime, "startProcess: done updating pids map");
            if ("activity".equals(hostingType) || "service".equals(hostingType)) {
                mActivityTrigger.activityStartProcessTrigger(app.processName, startResult.pid);
            }
        } catch (RuntimeException e) {
            // XXX do better error recovery.
            app.setPid(0);