diff options
3 files changed, 35 insertions, 14 deletions
diff --git a/cmds/am/src/com/android/commands/am/Am.java b/cmds/am/src/com/android/commands/am/Am.java index 57c1505..5ba7d50 100644 --- a/cmds/am/src/com/android/commands/am/Am.java +++ b/cmds/am/src/com/android/commands/am/Am.java @@ -48,6 +48,7 @@ import android.os.IBinder; import android.os.ParcelFileDescriptor; import android.os.RemoteException; import android.os.ServiceManager; +import android.os.SystemClock; import android.os.SystemProperties; import android.os.UserHandle; import android.text.TextUtils; @@ -726,6 +727,7 @@ public class Am extends BaseCommand { IActivityManager.WaitResult result = null; int res; + final long startTime = SystemClock.uptimeMillis(); if (mWaitOption) { result = mAm.startActivityAndWait(null, null, intent, mimeType, null, null, 0, mStartFlags, profilerInfo, null, mUserId); @@ -734,6 +736,7 @@ public class Am extends BaseCommand { res = mAm.startActivityAsUser(null, null, intent, mimeType, null, null, 0, mStartFlags, profilerInfo, null, mUserId); } + final long endTime = SystemClock.uptimeMillis(); PrintStream out = mWaitOption ? System.out : System.err; boolean launched = false; switch (res) { @@ -811,6 +814,7 @@ public class Am extends BaseCommand { if (result.totalTime >= 0) { System.out.println("TotalTime: " + result.totalTime); } + System.out.println("WaitTime: " + (endTime-startTime)); System.out.println("Complete"); } mRepeat--; diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java index e043f03..adea271 100755 --- a/services/core/java/com/android/server/am/ActivityRecord.java +++ b/services/core/java/com/android/server/am/ActivityRecord.java @@ -917,6 +917,7 @@ final class ActivityRecord { if (displayStartTime != 0) { reportLaunchTimeLocked(SystemClock.uptimeMillis()); } + mStackSupervisor.sendWaitingVisibleReportLocked(this); startTime = 0; finishLaunchTickingLocked(); if (task != null) { diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index 7b6a202..0ed74c7 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -650,31 +650,47 @@ public final class ActivityStackSupervisor implements DisplayListener { } void reportActivityVisibleLocked(ActivityRecord r) { + sendWaitingVisibleReportLocked(r); + notifyActivityDrawnForKeyguard(); + } + + void sendWaitingVisibleReportLocked(ActivityRecord r) { + boolean changed = false; for (int i = mWaitingActivityVisible.size()-1; i >= 0; i--) { WaitResult w = mWaitingActivityVisible.get(i); - w.timeout = false; - if (r != null) { - w.who = new ComponentName(r.info.packageName, r.info.name); + if (w.who == null) { + changed = true; + w.timeout = false; + if (r != null) { + w.who = new ComponentName(r.info.packageName, r.info.name); + } + w.totalTime = SystemClock.uptimeMillis() - w.thisTime; + w.thisTime = w.totalTime; } - w.totalTime = SystemClock.uptimeMillis() - w.thisTime; - w.thisTime = w.totalTime; } - mService.notifyAll(); - notifyActivityDrawnForKeyguard(); + if (changed) { + mService.notifyAll(); + } } void reportActivityLaunchedLocked(boolean timeout, ActivityRecord r, long thisTime, long totalTime) { + boolean changed = false; for (int i = mWaitingActivityLaunched.size() - 1; i >= 0; i--) { WaitResult w = mWaitingActivityLaunched.remove(i); - w.timeout = timeout; - if (r != null) { - w.who = new ComponentName(r.info.packageName, r.info.name); + if (w.who == null) { + changed = true; + w.timeout = timeout; + if (r != null) { + w.who = new ComponentName(r.info.packageName, r.info.name); + } + w.thisTime = thisTime; + w.totalTime = totalTime; } - w.thisTime = thisTime; - w.totalTime = totalTime; } - mService.notifyAll(); + if (changed) { + mService.notifyAll(); + } } ActivityRecord topRunningActivityLocked() { @@ -933,7 +949,7 @@ public final class ActivityStackSupervisor implements DisplayListener { } while (!outResult.timeout && outResult.who == null); } else if (res == ActivityManager.START_TASK_TO_FRONT) { ActivityRecord r = stack.topRunningActivityLocked(null); - if (r.nowVisible) { + if (r.nowVisible && r.state == ActivityState.RESUMED) { outResult.timeout = false; outResult.who = new ComponentName(r.info.packageName, r.info.name); outResult.totalTime = 0; |