Loading services/core/java/com/android/server/am/ActivityRecord.java +2 −4 Original line number Diff line number Diff line Loading @@ -154,7 +154,6 @@ final class ActivityRecord { int launchMode; // the launch mode activity attribute. boolean visible; // does this activity's window need to be shown? boolean sleeping; // have we told the activity to sleep? boolean waitingVisible; // true if waiting for a new act to become vis boolean nowVisible; // is this activity's window visible? boolean idle; // has the activity gone idle? boolean hasBeenLaunched;// has this activity ever been launched? Loading Loading @@ -293,6 +292,7 @@ final class ActivityRecord { else TimeUtils.formatDuration(startTime, now, pw); pw.println(); } final boolean waitingVisible = mStackSupervisor.mWaitingVisibleActivities.contains(this); if (lastVisibleTime != 0 || waitingVisible || nowVisible) { pw.print(prefix); pw.print("waitingVisible="); pw.print(waitingVisible); pw.print(" nowVisible="); pw.print(nowVisible); Loading Loading @@ -407,7 +407,6 @@ final class ActivityRecord { keysPaused = false; inHistory = false; visible = true; waitingVisible = false; nowVisible = false; idle = false; hasBeenLaunched = false; Loading Loading @@ -961,7 +960,6 @@ final class ActivityRecord { if (N > 0) { for (int i=0; i<N; i++) { ActivityRecord r = mStackSupervisor.mWaitingVisibleActivities.get(i); r.waitingVisible = false; if (ActivityManagerService.DEBUG_SWITCH) Log.v( ActivityManagerService.TAG, "Was waiting for visible: " + r); Loading @@ -986,7 +984,7 @@ final class ActivityRecord { // for another app to start, then we have paused dispatching // for this activity. ActivityRecord r = this; if (r.waitingVisible) { if (mStackSupervisor.mWaitingVisibleActivities.contains(this)) { final ActivityStack stack = mStackSupervisor.getFocusedStack(); // Hmmm, who might we be waiting for? r = stack.mResumedActivity; Loading services/core/java/com/android/server/am/ActivityStack.java +10 −14 Original line number Diff line number Diff line Loading @@ -958,9 +958,7 @@ final class ActivityStack { prev = finishCurrentActivityLocked(prev, FINISH_AFTER_VISIBLE, false); } else if (prev.app != null) { if (DEBUG_PAUSE) Slog.v(TAG, "Enqueueing pending stop: " + prev); if (prev.waitingVisible) { prev.waitingVisible = false; mStackSupervisor.mWaitingVisibleActivities.remove(prev); if (mStackSupervisor.mWaitingVisibleActivities.remove(prev)) { if (DEBUG_SWITCH || DEBUG_PAUSE) Slog.v( TAG, "Complete pause, no longer waiting: " + prev); } Loading Loading @@ -1570,7 +1568,6 @@ final class ActivityStack { mStackSupervisor.mGoingToSleepActivities.remove(next); next.sleeping = false; mStackSupervisor.mWaitingVisibleActivities.remove(next); next.waitingVisible = false; if (DEBUG_SWITCH) Slog.v(TAG, "Resuming " + next); Loading Loading @@ -1647,8 +1644,8 @@ final class ActivityStack { } if (prev != null && prev != next) { if (!prev.waitingVisible && next != null && !next.nowVisible) { prev.waitingVisible = true; if (!mStackSupervisor.mWaitingVisibleActivities.contains(prev) && next != null && !next.nowVisible) { mStackSupervisor.mWaitingVisibleActivities.add(prev); if (DEBUG_SWITCH) Slog.v( TAG, "Resuming top, waiting visible to hide: " + prev); Loading @@ -1665,12 +1662,13 @@ final class ActivityStack { mWindowManager.setAppVisibility(prev.appToken, false); if (DEBUG_SWITCH) Slog.v(TAG, "Not waiting for visible to hide: " + prev + ", waitingVisible=" + (prev != null ? prev.waitingVisible : null) + mStackSupervisor.mWaitingVisibleActivities.contains(prev) + ", nowVisible=" + next.nowVisible); } else { if (DEBUG_SWITCH) Slog.v(TAG, "Previous already visible but still waiting to hide: " + prev + ", waitingVisible=" + (prev != null ? prev.waitingVisible : null) if (DEBUG_SWITCH) Slog.v(TAG, "Previous already visible but still waiting to hide: " + prev + ", waitingVisible=" + mStackSupervisor.mWaitingVisibleActivities.contains(prev) + ", nowVisible=" + next.nowVisible); } } Loading Loading @@ -2782,7 +2780,6 @@ final class ActivityStack { mStackSupervisor.mStoppingActivities.remove(r); mStackSupervisor.mGoingToSleepActivities.remove(r); mStackSupervisor.mWaitingVisibleActivities.remove(r); r.waitingVisible = false; if (mResumedActivity == r) { mResumedActivity = null; } Loading Loading @@ -2984,7 +2981,6 @@ final class ActivityStack { // down to the max limit while they are still waiting to finish. mStackSupervisor.mFinishingActivities.remove(r); mStackSupervisor.mWaitingVisibleActivities.remove(r); r.waitingVisible = false; // Remove any pending results. if (r.finishing && r.pendingResults != null) { Loading services/core/java/com/android/server/am/ActivityStackSupervisor.java +18 −26 Original line number Diff line number Diff line Loading @@ -198,32 +198,30 @@ public final class ActivityStackSupervisor implements DisplayListener { /** List of activities that are waiting for a new activity to become visible before completing * whatever operation they are supposed to do. */ final ArrayList<ActivityRecord> mWaitingVisibleActivities = new ArrayList<ActivityRecord>(); final ArrayList<ActivityRecord> mWaitingVisibleActivities = new ArrayList<>(); /** List of processes waiting to find out about the next visible activity. */ final ArrayList<IActivityManager.WaitResult> mWaitingActivityVisible = new ArrayList<IActivityManager.WaitResult>(); final ArrayList<IActivityManager.WaitResult> mWaitingActivityVisible = new ArrayList<>(); /** List of processes waiting to find out about the next launched activity. */ final ArrayList<IActivityManager.WaitResult> mWaitingActivityLaunched = new ArrayList<IActivityManager.WaitResult>(); final ArrayList<IActivityManager.WaitResult> mWaitingActivityLaunched = new ArrayList<>(); /** List of activities that are ready to be stopped, but waiting for the next activity to * settle down before doing so. */ final ArrayList<ActivityRecord> mStoppingActivities = new ArrayList<ActivityRecord>(); final ArrayList<ActivityRecord> mStoppingActivities = new ArrayList<>(); /** List of activities that are ready to be finished, but waiting for the previous activity to * settle down before doing so. It contains ActivityRecord objects. */ final ArrayList<ActivityRecord> mFinishingActivities = new ArrayList<ActivityRecord>(); final ArrayList<ActivityRecord> mFinishingActivities = new ArrayList<>(); /** List of activities that are in the process of going to sleep. */ final ArrayList<ActivityRecord> mGoingToSleepActivities = new ArrayList<ActivityRecord>(); final ArrayList<ActivityRecord> mGoingToSleepActivities = new ArrayList<>(); /** Used on user changes */ final ArrayList<UserStartedState> mStartingUsers = new ArrayList<UserStartedState>(); final ArrayList<UserStartedState> mStartingUsers = new ArrayList<>(); /** Used to queue up any background users being started */ final ArrayList<UserStartedState> mStartingBackgroundUsers = new ArrayList<UserStartedState>(); final ArrayList<UserStartedState> mStartingBackgroundUsers = new ArrayList<>(); /** Set to indicate whether to issue an onUserLeaving callback when a newly launched activity * is being brought in front of us. */ Loading Loading @@ -611,7 +609,7 @@ public final class ActivityStackSupervisor implements DisplayListener { for (int stackNdx = stacks.size() - 1; stackNdx >= 0; --stackNdx) { final ActivityStack stack = stacks.get(stackNdx); final ActivityRecord r = stack.mResumedActivity; if (r != null && (!r.nowVisible || r.waitingVisible)) { if (r != null && (!r.nowVisible || mWaitingVisibleActivities.contains(r))) { return false; } } Loading Loading @@ -3067,20 +3065,16 @@ public final class ActivityStackSupervisor implements DisplayListener { } final ArrayList<ActivityRecord> processStoppingActivitiesLocked(boolean remove) { int N = mStoppingActivities.size(); if (N <= 0) return null; ArrayList<ActivityRecord> stops = null; final boolean nowVisible = allResumedActivitiesVisible(); for (int i=0; i<N; i++) { ActivityRecord s = mStoppingActivities.get(i); if (localLOGV) Slog.v(TAG, "Stopping " + s + ": nowVisible=" + nowVisible + " waitingVisible=" + s.waitingVisible + " finishing=" + s.finishing); if (s.waitingVisible && nowVisible) { for (int activityNdx = mStoppingActivities.size() - 1; activityNdx >= 0; --activityNdx) { ActivityRecord s = mStoppingActivities.get(activityNdx); final boolean waitingVisible = mWaitingVisibleActivities.contains(s); if (localLOGV) Slog.v(TAG, "Stopping " + s + ": nowVisible=" + nowVisible + " waitingVisible=" + waitingVisible + " finishing=" + s.finishing); if (waitingVisible && nowVisible) { mWaitingVisibleActivities.remove(s); s.waitingVisible = false; if (s.finishing) { // If this activity is finishing, it is sitting on top of // everyone else but we now know it is no longer needed... Loading @@ -3091,15 +3085,13 @@ public final class ActivityStackSupervisor implements DisplayListener { mWindowManager.setAppVisibility(s.appToken, false); } } if ((!s.waitingVisible || mService.isSleepingOrShuttingDown()) && remove) { if ((!waitingVisible || mService.isSleepingOrShuttingDown()) && remove) { if (localLOGV) Slog.v(TAG, "Ready to stop: " + s); if (stops == null) { stops = new ArrayList<ActivityRecord>(); stops = new ArrayList<>(); } stops.add(s); mStoppingActivities.remove(i); N--; i--; mStoppingActivities.remove(activityNdx); } } Loading Loading
services/core/java/com/android/server/am/ActivityRecord.java +2 −4 Original line number Diff line number Diff line Loading @@ -154,7 +154,6 @@ final class ActivityRecord { int launchMode; // the launch mode activity attribute. boolean visible; // does this activity's window need to be shown? boolean sleeping; // have we told the activity to sleep? boolean waitingVisible; // true if waiting for a new act to become vis boolean nowVisible; // is this activity's window visible? boolean idle; // has the activity gone idle? boolean hasBeenLaunched;// has this activity ever been launched? Loading Loading @@ -293,6 +292,7 @@ final class ActivityRecord { else TimeUtils.formatDuration(startTime, now, pw); pw.println(); } final boolean waitingVisible = mStackSupervisor.mWaitingVisibleActivities.contains(this); if (lastVisibleTime != 0 || waitingVisible || nowVisible) { pw.print(prefix); pw.print("waitingVisible="); pw.print(waitingVisible); pw.print(" nowVisible="); pw.print(nowVisible); Loading Loading @@ -407,7 +407,6 @@ final class ActivityRecord { keysPaused = false; inHistory = false; visible = true; waitingVisible = false; nowVisible = false; idle = false; hasBeenLaunched = false; Loading Loading @@ -961,7 +960,6 @@ final class ActivityRecord { if (N > 0) { for (int i=0; i<N; i++) { ActivityRecord r = mStackSupervisor.mWaitingVisibleActivities.get(i); r.waitingVisible = false; if (ActivityManagerService.DEBUG_SWITCH) Log.v( ActivityManagerService.TAG, "Was waiting for visible: " + r); Loading @@ -986,7 +984,7 @@ final class ActivityRecord { // for another app to start, then we have paused dispatching // for this activity. ActivityRecord r = this; if (r.waitingVisible) { if (mStackSupervisor.mWaitingVisibleActivities.contains(this)) { final ActivityStack stack = mStackSupervisor.getFocusedStack(); // Hmmm, who might we be waiting for? r = stack.mResumedActivity; Loading
services/core/java/com/android/server/am/ActivityStack.java +10 −14 Original line number Diff line number Diff line Loading @@ -958,9 +958,7 @@ final class ActivityStack { prev = finishCurrentActivityLocked(prev, FINISH_AFTER_VISIBLE, false); } else if (prev.app != null) { if (DEBUG_PAUSE) Slog.v(TAG, "Enqueueing pending stop: " + prev); if (prev.waitingVisible) { prev.waitingVisible = false; mStackSupervisor.mWaitingVisibleActivities.remove(prev); if (mStackSupervisor.mWaitingVisibleActivities.remove(prev)) { if (DEBUG_SWITCH || DEBUG_PAUSE) Slog.v( TAG, "Complete pause, no longer waiting: " + prev); } Loading Loading @@ -1570,7 +1568,6 @@ final class ActivityStack { mStackSupervisor.mGoingToSleepActivities.remove(next); next.sleeping = false; mStackSupervisor.mWaitingVisibleActivities.remove(next); next.waitingVisible = false; if (DEBUG_SWITCH) Slog.v(TAG, "Resuming " + next); Loading Loading @@ -1647,8 +1644,8 @@ final class ActivityStack { } if (prev != null && prev != next) { if (!prev.waitingVisible && next != null && !next.nowVisible) { prev.waitingVisible = true; if (!mStackSupervisor.mWaitingVisibleActivities.contains(prev) && next != null && !next.nowVisible) { mStackSupervisor.mWaitingVisibleActivities.add(prev); if (DEBUG_SWITCH) Slog.v( TAG, "Resuming top, waiting visible to hide: " + prev); Loading @@ -1665,12 +1662,13 @@ final class ActivityStack { mWindowManager.setAppVisibility(prev.appToken, false); if (DEBUG_SWITCH) Slog.v(TAG, "Not waiting for visible to hide: " + prev + ", waitingVisible=" + (prev != null ? prev.waitingVisible : null) + mStackSupervisor.mWaitingVisibleActivities.contains(prev) + ", nowVisible=" + next.nowVisible); } else { if (DEBUG_SWITCH) Slog.v(TAG, "Previous already visible but still waiting to hide: " + prev + ", waitingVisible=" + (prev != null ? prev.waitingVisible : null) if (DEBUG_SWITCH) Slog.v(TAG, "Previous already visible but still waiting to hide: " + prev + ", waitingVisible=" + mStackSupervisor.mWaitingVisibleActivities.contains(prev) + ", nowVisible=" + next.nowVisible); } } Loading Loading @@ -2782,7 +2780,6 @@ final class ActivityStack { mStackSupervisor.mStoppingActivities.remove(r); mStackSupervisor.mGoingToSleepActivities.remove(r); mStackSupervisor.mWaitingVisibleActivities.remove(r); r.waitingVisible = false; if (mResumedActivity == r) { mResumedActivity = null; } Loading Loading @@ -2984,7 +2981,6 @@ final class ActivityStack { // down to the max limit while they are still waiting to finish. mStackSupervisor.mFinishingActivities.remove(r); mStackSupervisor.mWaitingVisibleActivities.remove(r); r.waitingVisible = false; // Remove any pending results. if (r.finishing && r.pendingResults != null) { Loading
services/core/java/com/android/server/am/ActivityStackSupervisor.java +18 −26 Original line number Diff line number Diff line Loading @@ -198,32 +198,30 @@ public final class ActivityStackSupervisor implements DisplayListener { /** List of activities that are waiting for a new activity to become visible before completing * whatever operation they are supposed to do. */ final ArrayList<ActivityRecord> mWaitingVisibleActivities = new ArrayList<ActivityRecord>(); final ArrayList<ActivityRecord> mWaitingVisibleActivities = new ArrayList<>(); /** List of processes waiting to find out about the next visible activity. */ final ArrayList<IActivityManager.WaitResult> mWaitingActivityVisible = new ArrayList<IActivityManager.WaitResult>(); final ArrayList<IActivityManager.WaitResult> mWaitingActivityVisible = new ArrayList<>(); /** List of processes waiting to find out about the next launched activity. */ final ArrayList<IActivityManager.WaitResult> mWaitingActivityLaunched = new ArrayList<IActivityManager.WaitResult>(); final ArrayList<IActivityManager.WaitResult> mWaitingActivityLaunched = new ArrayList<>(); /** List of activities that are ready to be stopped, but waiting for the next activity to * settle down before doing so. */ final ArrayList<ActivityRecord> mStoppingActivities = new ArrayList<ActivityRecord>(); final ArrayList<ActivityRecord> mStoppingActivities = new ArrayList<>(); /** List of activities that are ready to be finished, but waiting for the previous activity to * settle down before doing so. It contains ActivityRecord objects. */ final ArrayList<ActivityRecord> mFinishingActivities = new ArrayList<ActivityRecord>(); final ArrayList<ActivityRecord> mFinishingActivities = new ArrayList<>(); /** List of activities that are in the process of going to sleep. */ final ArrayList<ActivityRecord> mGoingToSleepActivities = new ArrayList<ActivityRecord>(); final ArrayList<ActivityRecord> mGoingToSleepActivities = new ArrayList<>(); /** Used on user changes */ final ArrayList<UserStartedState> mStartingUsers = new ArrayList<UserStartedState>(); final ArrayList<UserStartedState> mStartingUsers = new ArrayList<>(); /** Used to queue up any background users being started */ final ArrayList<UserStartedState> mStartingBackgroundUsers = new ArrayList<UserStartedState>(); final ArrayList<UserStartedState> mStartingBackgroundUsers = new ArrayList<>(); /** Set to indicate whether to issue an onUserLeaving callback when a newly launched activity * is being brought in front of us. */ Loading Loading @@ -611,7 +609,7 @@ public final class ActivityStackSupervisor implements DisplayListener { for (int stackNdx = stacks.size() - 1; stackNdx >= 0; --stackNdx) { final ActivityStack stack = stacks.get(stackNdx); final ActivityRecord r = stack.mResumedActivity; if (r != null && (!r.nowVisible || r.waitingVisible)) { if (r != null && (!r.nowVisible || mWaitingVisibleActivities.contains(r))) { return false; } } Loading Loading @@ -3067,20 +3065,16 @@ public final class ActivityStackSupervisor implements DisplayListener { } final ArrayList<ActivityRecord> processStoppingActivitiesLocked(boolean remove) { int N = mStoppingActivities.size(); if (N <= 0) return null; ArrayList<ActivityRecord> stops = null; final boolean nowVisible = allResumedActivitiesVisible(); for (int i=0; i<N; i++) { ActivityRecord s = mStoppingActivities.get(i); if (localLOGV) Slog.v(TAG, "Stopping " + s + ": nowVisible=" + nowVisible + " waitingVisible=" + s.waitingVisible + " finishing=" + s.finishing); if (s.waitingVisible && nowVisible) { for (int activityNdx = mStoppingActivities.size() - 1; activityNdx >= 0; --activityNdx) { ActivityRecord s = mStoppingActivities.get(activityNdx); final boolean waitingVisible = mWaitingVisibleActivities.contains(s); if (localLOGV) Slog.v(TAG, "Stopping " + s + ": nowVisible=" + nowVisible + " waitingVisible=" + waitingVisible + " finishing=" + s.finishing); if (waitingVisible && nowVisible) { mWaitingVisibleActivities.remove(s); s.waitingVisible = false; if (s.finishing) { // If this activity is finishing, it is sitting on top of // everyone else but we now know it is no longer needed... Loading @@ -3091,15 +3085,13 @@ public final class ActivityStackSupervisor implements DisplayListener { mWindowManager.setAppVisibility(s.appToken, false); } } if ((!s.waitingVisible || mService.isSleepingOrShuttingDown()) && remove) { if ((!waitingVisible || mService.isSleepingOrShuttingDown()) && remove) { if (localLOGV) Slog.v(TAG, "Ready to stop: " + s); if (stops == null) { stops = new ArrayList<ActivityRecord>(); stops = new ArrayList<>(); } stops.add(s); mStoppingActivities.remove(i); N--; i--; mStoppingActivities.remove(activityNdx); } } Loading