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

Commit 129c68ba authored by Yisroel Forta's avatar Yisroel Forta
Browse files

Add Application OnCreate timestamp to AppStartInfo

Bug: 287153617
Test: trigger app starts, confirm value is present
Flag: android.app.activity_manager.app_start_info_timestamps
Change-Id: I719a1fa71376e094f7febf95a5aebe3f534d16d5
parent efecd13d
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -7435,6 +7435,7 @@ public final class ActivityThread extends ClientTransactionHandler
        }
        mDdmSyncStageUpdater.next(Stage.Running);

        long timestampApplicationOnCreateNs = 0;
        try {
            // If the app is being launched for full backup or restore, bring it up in
            // a restricted environment with the base application class.
@@ -7477,8 +7478,10 @@ public final class ActivityThread extends ClientTransactionHandler
                    + data.instrumentationName + ": " + e.toString(), e);
            }
            try {
                timestampApplicationOnCreateNs = SystemClock.elapsedRealtimeNanos();
                mInstrumentation.callApplicationOnCreate(app);
            } catch (Exception e) {
                timestampApplicationOnCreateNs = 0;
                if (!mInstrumentation.onException(app, e)) {
                    throw new RuntimeException(
                      "Unable to create application " + app.getClass().getName()
@@ -7516,7 +7519,7 @@ public final class ActivityThread extends ClientTransactionHandler
        }

        try {
            mgr.finishAttachApplication(mStartSeq);
            mgr.finishAttachApplication(mStartSeq, timestampApplicationOnCreateNs);
        } catch (RemoteException ex) {
            throw ex.rethrowFromSystemServer();
        }
+1 −1
Original line number Diff line number Diff line
@@ -196,7 +196,7 @@ interface IActivityManager {
    oneway void finishReceiver(in IBinder who, int resultCode, in String resultData, in Bundle map,
            boolean abortBroadcast, int flags);
    void attachApplication(in IApplicationThread app, long startSeq);
    void finishAttachApplication(long startSeq);
    void finishAttachApplication(long startSeq, long timestampApplicationOnCreateNs);
    List<ActivityManager.RunningTaskInfo> getTasks(int maxNum);
    @UnsupportedAppUsage
    void moveTaskToFront(in IApplicationThread caller, in String callingPackage, int task,
+10 −0
Original line number Diff line number Diff line
@@ -40,3 +40,13 @@ flag {
     description: "Add a new callback in Service to indicate a FGS has reached its timeout."
     bug: "317799821"
}

flag {
     namespace: "system_performance"
     name: "app_start_info_timestamps"
     description: "Additional timestamps."
     bug: "287153617"
     metadata {
         purpose: PURPOSE_BUGFIX
     }
}
+14 −4
Original line number Diff line number Diff line
@@ -5034,7 +5034,7 @@ public class ActivityManagerService extends IActivityManager.Stub
    }
    @Override
    public final void finishAttachApplication(long startSeq) {
    public final void finishAttachApplication(long startSeq, long timestampApplicationOnCreateNs) {
        final int pid = Binder.getCallingPid();
        final int uid = Binder.getCallingUid();
@@ -5054,6 +5054,11 @@ public class ActivityManagerService extends IActivityManager.Stub
        } finally {
            Binder.restoreCallingIdentity(origId);
        }
        if (android.app.Flags.appStartInfoTimestamps() && timestampApplicationOnCreateNs > 0) {
            addStartInfoTimestampInternal(ApplicationStartInfo.START_TIMESTAMP_APPLICATION_ONCREATE,
                    timestampApplicationOnCreateNs, UserHandle.getUserId(uid), uid);
        }
    }
    private void handleBindApplicationTimeoutSoft(ProcessRecord app, int softTimeoutMillis) {
@@ -10253,10 +10258,15 @@ public class ActivityManagerService extends IActivityManager.Stub
        mUserController.handleIncomingUser(Binder.getCallingPid(), callingUid, userId, true,
                ALLOW_NON_FULL, "addStartInfoTimestamp", null);
        final String packageName = Settings.getPackageNameForUid(mContext, callingUid);
        addStartInfoTimestampInternal(key, timestampNs, userId, callingUid);
    }
        mProcessList.getAppStartInfoTracker().addTimestampToStart(packageName,
                UserHandle.getUid(userId, UserHandle.getAppId(callingUid)), timestampNs, key);
    private void addStartInfoTimestampInternal(int key, long timestampNs, int userId, int uid) {
        mProcessList.getAppStartInfoTracker().addTimestampToStart(
                Settings.getPackageNameForUid(mContext, uid),
                UserHandle.getUid(userId, UserHandle.getAppId(uid)),
                timestampNs,
                key);
    }
    @Override
+1 −1
Original line number Diff line number Diff line
@@ -197,7 +197,7 @@ public class AsyncProcessStartTest {
                    + Arrays.toString(invocation.getArguments()));
            if (!wedge) {
                if (mRealAms.mConstants.mEnableWaitForFinishAttachApplication) {
                    mRealAms.finishAttachApplication(0);
                    mRealAms.finishAttachApplication(0, 0);
                }
            }
            return null;
Loading