Loading core/java/com/android/internal/app/ActivityTrigger.java +6 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading @@ -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); } core/jni/com_android_internal_app_ActivityTrigger.cpp +26 −3 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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"} }; Loading Loading @@ -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; Loading @@ -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) { Loading @@ -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) { Loading Loading @@ -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}, }; Loading services/core/java/com/android/server/am/ActivityManagerService.java +6 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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); Loading Loading
core/java/com/android/internal/app/ActivityTrigger.java +6 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading @@ -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); }
core/jni/com_android_internal_app_ActivityTrigger.cpp +26 −3 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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"} }; Loading Loading @@ -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; Loading @@ -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) { Loading @@ -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) { Loading Loading @@ -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}, }; Loading
services/core/java/com/android/server/am/ActivityManagerService.java +6 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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); Loading