summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmds/am/src/com/android/commands/am/Am.java4
-rwxr-xr-xservices/core/java/com/android/server/am/ActivityRecord.java1
-rw-r--r--services/core/java/com/android/server/am/ActivityStackSupervisor.java44
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;