Merge "Add new api Activity.getStartInitiatedTime." into oc-dev
am: 2359f016e2
Change-Id: I8a2ab94f67894736188fd62df8503dfa637ad9ed
This commit is contained in:
@@ -3615,6 +3615,7 @@ package android.app {
|
||||
method public android.net.Uri getReferrer();
|
||||
method public int getRequestedOrientation();
|
||||
method public final android.view.SearchEvent getSearchEvent();
|
||||
method public long getStartInitiatedTime();
|
||||
method public int getTaskId();
|
||||
method public final java.lang.CharSequence getTitle();
|
||||
method public final int getTitleColor();
|
||||
|
||||
@@ -3743,6 +3743,7 @@ package android.app {
|
||||
method public android.net.Uri getReferrer();
|
||||
method public int getRequestedOrientation();
|
||||
method public final android.view.SearchEvent getSearchEvent();
|
||||
method public long getStartInitiatedTime();
|
||||
method public int getTaskId();
|
||||
method public final java.lang.CharSequence getTitle();
|
||||
method public final int getTitleColor();
|
||||
|
||||
@@ -3617,6 +3617,7 @@ package android.app {
|
||||
method public android.net.Uri getReferrer();
|
||||
method public int getRequestedOrientation();
|
||||
method public final android.view.SearchEvent getSearchEvent();
|
||||
method public long getStartInitiatedTime();
|
||||
method public int getTaskId();
|
||||
method public final java.lang.CharSequence getTitle();
|
||||
method public final int getTitleColor();
|
||||
|
||||
@@ -18,6 +18,7 @@ package android.app;
|
||||
|
||||
import android.metrics.LogMaker;
|
||||
import android.graphics.Rect;
|
||||
import android.os.SystemClock;
|
||||
import android.view.ViewRootImpl.ActivityConfigCallback;
|
||||
import android.view.autofill.AutofillId;
|
||||
import android.view.autofill.AutofillManager;
|
||||
@@ -7433,6 +7434,25 @@ public class Activity extends ContextThemeWrapper
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the timestamp at which this activity start was last initiated by the system in the
|
||||
* {@link SystemClock#uptimeMillis()} time base.
|
||||
*
|
||||
* This can be used to understand how much time is taken for an activity to be started and
|
||||
* displayed to the user.
|
||||
*
|
||||
* @return timestamp at which this activity start was initiated by the system
|
||||
* or {@code 0} if for any reason the timestamp could not be retrieved.
|
||||
*/
|
||||
public long getStartInitiatedTime() {
|
||||
try {
|
||||
return ActivityManager.getService().getActivityStartInitiatedTime(mToken);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "Failed to call getActivityStartTime", e);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
class HostCallbacks extends FragmentHostCallback<Activity> {
|
||||
public HostCallbacks() {
|
||||
super(Activity.this /*activity*/);
|
||||
|
||||
@@ -632,6 +632,8 @@ interface IActivityManager {
|
||||
*/
|
||||
void backgroundWhitelistUid(int uid);
|
||||
|
||||
long getActivityStartInitiatedTime(IBinder token);
|
||||
|
||||
// WARNING: when these transactions are updated, check if they are any callers on the native
|
||||
// side. If so, make sure they are using the correct transaction ids and arguments.
|
||||
// If a transaction which will also be used on the native side is being inserted, add it
|
||||
|
||||
@@ -23886,6 +23886,15 @@ public class ActivityManagerService extends IActivityManager.Stub
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getActivityStartInitiatedTime(IBinder token) {
|
||||
final ActivityRecord r = ActivityRecord.forTokenLocked(token);
|
||||
if (r != null) {
|
||||
return r.mStartInitiatedTimeMs;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void updateApplicationInfoLocked(@NonNull List<String> packagesToUpdate, int userId) {
|
||||
final PackageManagerInternal packageManager = getPackageManagerInternalLocked();
|
||||
final boolean updateFrameworkRes = packagesToUpdate.contains("android");
|
||||
|
||||
@@ -340,6 +340,12 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
|
||||
// handle calculating override configuration from the bounds.
|
||||
private final Rect mBounds = new Rect();
|
||||
|
||||
/**
|
||||
* Denotes the timestamp at which this activity start was last initiated in the
|
||||
* {@link SystemClock#uptimeMillis()} time base.
|
||||
*/
|
||||
long mStartInitiatedTimeMs;
|
||||
|
||||
/**
|
||||
* Temp configs used in {@link #ensureActivityConfigurationLocked(int, boolean)}
|
||||
*/
|
||||
@@ -498,6 +504,8 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
|
||||
pw.print(" forceNewConfig="); pw.println(forceNewConfig);
|
||||
pw.print(prefix); pw.print("mActivityType=");
|
||||
pw.println(activityTypeToString(mActivityType));
|
||||
pw.print(prefix); pw.print("mStartInitiatedTimeMs=");
|
||||
TimeUtils.formatDuration(mStartInitiatedTimeMs, now, pw);
|
||||
if (requestedVrComponent != null) {
|
||||
pw.print(prefix);
|
||||
pw.print("requestedVrComponent=");
|
||||
|
||||
@@ -244,6 +244,7 @@ class ActivityStarter {
|
||||
ActivityOptions options, boolean ignoreTargetSecurity, boolean componentSpecified,
|
||||
ActivityRecord[] outActivity, ActivityStackSupervisor.ActivityContainer container,
|
||||
TaskRecord inTask) {
|
||||
final long activityStartTime = SystemClock.uptimeMillis();
|
||||
int err = ActivityManager.START_SUCCESS;
|
||||
|
||||
ProcessRecord callerApp = null;
|
||||
@@ -478,6 +479,7 @@ class ActivityStarter {
|
||||
callingPackage, intent, resolvedType, aInfo, mService.getGlobalConfiguration(),
|
||||
resultRecord, resultWho, requestCode, componentSpecified, voiceSession != null,
|
||||
mSupervisor, container, options, sourceRecord);
|
||||
r.mStartInitiatedTimeMs = activityStartTime;
|
||||
if (outActivity != null) {
|
||||
outActivity[0] = r;
|
||||
}
|
||||
@@ -1029,6 +1031,7 @@ class ActivityStarter {
|
||||
// so make sure the task now has the identity of the new intent.
|
||||
top.getTask().setIntent(mStartActivity);
|
||||
}
|
||||
top.mStartInitiatedTimeMs = mStartActivity.mStartInitiatedTimeMs;
|
||||
ActivityStack.logStartActivity(AM_NEW_INTENT, mStartActivity, top.getTask());
|
||||
top.deliverNewIntentLocked(mCallingUid, mStartActivity.intent,
|
||||
mStartActivity.launchedFromPackage);
|
||||
@@ -1052,6 +1055,7 @@ class ActivityStarter {
|
||||
setTaskFromIntentActivity(reusedActivity);
|
||||
|
||||
if (!mAddingToTask && mReuseTask == null) {
|
||||
reusedActivity.mStartInitiatedTimeMs = mStartActivity.mStartInitiatedTimeMs;
|
||||
// We didn't do anything... but it was needed (a.k.a., client don't use that
|
||||
// intent!) And for paranoia, make sure we have correctly resumed the top activity.
|
||||
resumeTargetStackIfNeeded();
|
||||
@@ -1084,6 +1088,7 @@ class ActivityStarter {
|
||||
|| mLaunchSingleTop || mLaunchSingleTask);
|
||||
if (dontStart) {
|
||||
ActivityStack.logStartActivity(AM_NEW_INTENT, top, top.getTask());
|
||||
top.mStartInitiatedTimeMs = mStartActivity.mStartInitiatedTimeMs;
|
||||
// For paranoia, make sure we have correctly resumed the top activity.
|
||||
topStack.mLastPausedActivity = null;
|
||||
if (mDoResume) {
|
||||
@@ -1664,6 +1669,7 @@ class ActivityStarter {
|
||||
// desires.
|
||||
if (((mLaunchFlags & FLAG_ACTIVITY_SINGLE_TOP) != 0 || mLaunchSingleTop)
|
||||
&& intentActivity.realActivity.equals(mStartActivity.realActivity)) {
|
||||
intentActivity.mStartInitiatedTimeMs = mStartActivity.mStartInitiatedTimeMs;
|
||||
ActivityStack.logStartActivity(AM_NEW_INTENT, mStartActivity,
|
||||
intentActivity.getTask());
|
||||
if (intentActivity.frontOfTask) {
|
||||
|
||||
Reference in New Issue
Block a user