Merge "Don't wait until next fetch of recent tasks to reset the task list" into qt-dev

This commit is contained in:
Winson Chung
2019-04-16 02:13:58 +00:00
committed by Android (Google) Code Review
2 changed files with 14 additions and 21 deletions

View File

@@ -60,7 +60,6 @@ import android.os.Bundle;
import android.os.Environment;
import android.os.IBinder;
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.text.TextUtils;
@@ -185,7 +184,6 @@ class RecentTasks {
// front. Newly created tasks, or tasks that are removed from the list will continue to change
// the list. This does not affect affiliated tasks.
private boolean mFreezeTaskListReordering;
private long mFreezeTaskListReorderingTime;
private long mFreezeTaskListTimeoutMs = FREEZE_TASK_LIST_TIMEOUT_MS;
// Mainly to avoid object recreation on multiple calls.
@@ -220,6 +218,9 @@ class RecentTasks {
}
};
private final Runnable mResetFreezeTaskListOnTimeoutRunnable =
this::resetFreezeTaskListReorderingOnTimeout;
@VisibleForTesting
RecentTasks(ActivityTaskManagerService service, TaskPersister taskPersister) {
mService = service;
@@ -255,8 +256,7 @@ class RecentTasks {
}
@VisibleForTesting
void setFreezeTaskListTimeoutParams(long reorderingTime, long timeoutMs) {
mFreezeTaskListReorderingTime = reorderingTime;
void setFreezeTaskListTimeout(long timeoutMs) {
mFreezeTaskListTimeoutMs = timeoutMs;
}
@@ -272,7 +272,8 @@ class RecentTasks {
// Always update the reordering time when this is called to ensure that the timeout
// is reset
mFreezeTaskListReordering = true;
mFreezeTaskListReorderingTime = SystemClock.elapsedRealtime();
mService.mH.removeCallbacks(mResetFreezeTaskListOnTimeoutRunnable);
mService.mH.postDelayed(mResetFreezeTaskListOnTimeoutRunnable, mFreezeTaskListTimeoutMs);
}
/**
@@ -286,6 +287,7 @@ class RecentTasks {
// Once we end freezing the task list, reset the existing task order to the stable state
mFreezeTaskListReordering = false;
mService.mH.removeCallbacks(mResetFreezeTaskListOnTimeoutRunnable);
// If the top task is provided, then restore the top task to the front of the list
if (topTask != null) {
@@ -295,6 +297,8 @@ class RecentTasks {
// Resume trimming tasks
trimInactiveRecentTasks();
mService.getTaskChangeNotificationController().notifyTaskStackChanged();
}
/**
@@ -302,13 +306,8 @@ class RecentTasks {
* before we need to iterate the task list in order (either for purposes of returning the list
* to SystemUI or if we need to trim tasks in order)
*/
@VisibleForTesting
void resetFreezeTaskListReorderingOnTimeout() {
// Unfreeze the recent task list if the time heuristic has passed
if (mFreezeTaskListReorderingTime
> (SystemClock.elapsedRealtime() - mFreezeTaskListTimeoutMs)) {
return;
}
final ActivityStack focusedStack = mService.getTopDisplayFocusedStack();
final TaskRecord topTask = focusedStack != null
? focusedStack.topTask()
@@ -875,9 +874,6 @@ class RecentTasks {
final Set<Integer> includedUsers = getProfileIds(userId);
includedUsers.add(Integer.valueOf(userId));
// Check if the frozen task list has timed out
resetFreezeTaskListReorderingOnTimeout();
final ArrayList<ActivityManager.RecentTaskInfo> res = new ArrayList<>();
final int size = mTasks.size();
int numVisibleTasks = 0;
@@ -1654,8 +1650,8 @@ class RecentTasks {
pw.println("mRecentsUid=" + mRecentsUid);
pw.println("mRecentsComponent=" + mRecentsComponent);
pw.println("mFreezeTaskListReordering=" + mFreezeTaskListReordering);
pw.println("mFreezeTaskListReorderingTime (time since)="
+ (SystemClock.elapsedRealtime() - mFreezeTaskListReorderingTime) + "ms");
pw.println("mFreezeTaskListReorderingPendingTimeout="
+ mService.mH.hasCallbacks(mResetFreezeTaskListOnTimeoutRunnable));
if (mTasks.isEmpty()) {
return;
}

View File

@@ -712,7 +712,6 @@ public class RecentTasksTest extends ActivityTestsBase {
mRecentTasks.add(mTasks.get(4));
// Freeze the list
long freezeTime = SystemClock.elapsedRealtime();
mRecentTasks.setFreezeTaskListReordering();
assertTrue(mRecentTasks.isFreezeTaskListReorderingSet());
@@ -720,13 +719,11 @@ public class RecentTasksTest extends ActivityTestsBase {
mRecentTasks.add(mTasks.get(2));
mRecentTasks.add(mTasks.get(1));
// Override the freeze timeout params to simulate the timeout (simulate the freeze at 100ms
// ago with a timeout of 1ms)
mRecentTasks.setFreezeTaskListTimeoutParams(freezeTime - 100, 1);
ActivityStack stack = mTasks.get(2).getStack();
stack.moveToFront("", mTasks.get(2));
doReturn(stack).when(mTestService.mRootActivityContainer).getTopDisplayFocusedStack();
// Simulate the reset from the timeout
mRecentTasks.resetFreezeTaskListReorderingOnTimeout();
assertFalse(mRecentTasks.isFreezeTaskListReorderingSet());