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

Commit 015851c6 authored by Gaurav Singh's avatar Gaurav Singh Committed by Linux Build Service Account
Browse files

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

Tap process start event to trigger enabling game colocation
feature in perf lib

Change-Id: I27259bf070f59bd06d7337ceba6f88eb21e88ee2
parent e14378bf
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,10 +65,10 @@ 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,
     "ro.vendor.gt_library"},
    {NULL, NULL, NULL, NULL, NULL, NULL,
     "ro.vendor.gt_library"}
};

// ----------------------------------------------------------------------------
@@ -120,10 +121,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;
@@ -143,6 +151,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) {
@@ -155,6 +164,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)
{
@@ -194,6 +216,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},
};


+5 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import com.android.internal.app.IVoiceInteractor;
import com.android.internal.app.ProcessMap;
import com.android.internal.app.SystemUserHomeActivity;
import com.android.internal.app.procstats.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;
@@ -1529,6 +1530,7 @@ public final class ActivityManagerService extends ActivityManagerNative
    static ServiceThread sKillThread = null;
    static KillHandler sKillHandler = null;
    static final ActivityTrigger mActivityTrigger = new ActivityTrigger();
    CompatModeDialog mCompatModeDialog;
    UnsupportedDisplaySizeDialog mUnsupportedDisplaySizeDialog;
@@ -3806,6 +3808,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) {
            Slog.e(TAG, "Failure starting process " + app.processName, e);