summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCraig Mautner <cmautner@google.com>2015-01-13 21:28:34 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-01-13 21:28:37 +0000
commitef04ae79af58cc86c4312fac18c8a4eb24fc73ae (patch)
tree9f2535e5a438a0ade35dba42faca1e1c73528ba5
parent31ae17309e8c79c4b1a7b63a9c4bb43ae0849de2 (diff)
parentf3ea23ad9bcd44bdbc8380c413989fc887b89cc8 (diff)
downloadframeworks_base-ef04ae79af58cc86c4312fac18c8a4eb24fc73ae.zip
frameworks_base-ef04ae79af58cc86c4312fac18c8a4eb24fc73ae.tar.gz
frameworks_base-ef04ae79af58cc86c4312fac18c8a4eb24fc73ae.tar.bz2
Merge "Complete booting when frontmost activity is idle" into lmp-mr1-dev
-rw-r--r--services/core/java/com/android/server/am/ActivityStackSupervisor.java38
1 files changed, 27 insertions, 11 deletions
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index 19252ee..b81df9e 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -414,6 +414,12 @@ public final class ActivityStackSupervisor implements DisplayListener {
if (DEBUG_STACK) Slog.d(TAG, "moveHomeTask: topStack old=" + topStack + " new="
+ mFocusedStack);
}
+ if (mService.mBooting || !mService.mBooted) {
+ final ActivityRecord r = topRunningActivityLocked();
+ if (r != null && r.idle) {
+ checkFinishBootingLocked();
+ }
+ }
}
void moveHomeStackTaskToTop(int homeStackTaskType) {
@@ -2235,6 +2241,24 @@ public final class ActivityStackSupervisor implements DisplayListener {
}
}
+ /**
+ * Called when the frontmost task is idle.
+ * @return the state of mService.mBooting before this was called.
+ */
+ private boolean checkFinishBootingLocked() {
+ final boolean booting = mService.mBooting;
+ boolean enableScreen = false;
+ mService.mBooting = false;
+ if (!mService.mBooted) {
+ mService.mBooted = true;
+ enableScreen = true;
+ }
+ if (booting || enableScreen) {
+ mService.postFinishBooting(booting, enableScreen);
+ }
+ return booting;
+ }
+
// Checked.
final ActivityRecord activityIdleInternalLocked(final IBinder token, boolean fromTimeout,
Configuration config) {
@@ -2246,7 +2270,6 @@ public final class ActivityStackSupervisor implements DisplayListener {
int NS = 0;
int NF = 0;
boolean booting = false;
- boolean enableScreen = false;
boolean activityRemoved = false;
ActivityRecord r = ActivityRecord.forToken(token);
@@ -2274,12 +2297,7 @@ public final class ActivityStackSupervisor implements DisplayListener {
//Slog.i(TAG, "IDLE: mBooted=" + mBooted + ", fromTimeout=" + fromTimeout);
if (isFrontStack(r.task.stack) || fromTimeout) {
- booting = mService.mBooting;
- mService.mBooting = false;
- if (!mService.mBooted) {
- mService.mBooted = true;
- enableScreen = true;
- }
+ booting = checkFinishBootingLocked();
}
}
@@ -2352,10 +2370,6 @@ public final class ActivityStackSupervisor implements DisplayListener {
//dump();
//mWindowManager.dump();
- if (booting || enableScreen) {
- mService.postFinishBooting(booting, enableScreen);
- }
-
if (activityRemoved) {
resumeTopActivitiesLocked();
}
@@ -2624,6 +2638,8 @@ public final class ActivityStackSupervisor implements DisplayListener {
// before an application stack is created...Go ahead and create one on the default
// display.
stack = getStack(createStackOnDisplay(getNextStackId(), Display.DEFAULT_DISPLAY));
+ // Restore home stack to top.
+ moveHomeStack(true);
if (DEBUG_RECENTS)
Slog.v(TAG, "Created stack=" + stack + " for recents restoration.");
}