diff options
| author | Wale Ogunwale <ogunwale@google.com> | 2020-10-21 15:15:10 -0700 |
|---|---|---|
| committer | Wale Ogunwale <ogunwale@google.com> | 2020-10-21 15:15:10 -0700 |
| commit | c21aca86d8bfdb3c379e2ae48947a4335fc9e40a (patch) | |
| tree | 3335ca49d41c3fa7aa9a82d4a78c401bd4ed11eb /core/java/android/window/TaskOrganizer.java | |
| parent | 05c11205a4b5ec818da037d94f30b98654d69d1b (diff) | |
Made ShellTaskOrganizer thread safe
- Post callbacks from WM Core on executor.
- Added lock to protect critical sections.
Bug: 171384876
Test: They pass!
Change-Id: Ia1808b66104c2a1e6efb9f43c31e6a3a2f67a952
Diffstat (limited to 'core/java/android/window/TaskOrganizer.java')
| -rw-r--r-- | core/java/android/window/TaskOrganizer.java | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/core/java/android/window/TaskOrganizer.java b/core/java/android/window/TaskOrganizer.java index 5c86e1c124f7..8a58db90d375 100644 --- a/core/java/android/window/TaskOrganizer.java +++ b/core/java/android/window/TaskOrganizer.java @@ -29,6 +29,7 @@ import android.view.SurfaceControl; import com.android.internal.annotations.VisibleForTesting; import java.util.List; +import java.util.concurrent.Executor; /** * Interface for ActivityTaskManager/WindowManager to delegate control of tasks. @@ -37,15 +38,19 @@ import java.util.List; @TestApi public class TaskOrganizer extends WindowOrganizer { - private ITaskOrganizerController mTaskOrganizerController; + private final ITaskOrganizerController mTaskOrganizerController; + // Callbacks WM Core are posted on this executor if it isn't null, otherwise direct calls are + // made on the incoming binder call. + private final Executor mExecutor; public TaskOrganizer() { - this(null); + this(null /*taskOrganizerController*/, null /*executor*/); } /** @hide */ @VisibleForTesting - public TaskOrganizer(ITaskOrganizerController taskOrganizerController) { + public TaskOrganizer(ITaskOrganizerController taskOrganizerController, Executor executor) { + mExecutor = executor != null ? executor : command -> command.run(); mTaskOrganizerController = taskOrganizerController != null ? taskOrganizerController : getController(); } @@ -183,22 +188,22 @@ public class TaskOrganizer extends WindowOrganizer { @Override public void onTaskAppeared(ActivityManager.RunningTaskInfo taskInfo, SurfaceControl leash) { - TaskOrganizer.this.onTaskAppeared(taskInfo, leash); + mExecutor.execute(() -> TaskOrganizer.this.onTaskAppeared(taskInfo, leash)); } @Override public void onTaskVanished(ActivityManager.RunningTaskInfo taskInfo) { - TaskOrganizer.this.onTaskVanished(taskInfo); + mExecutor.execute(() -> TaskOrganizer.this.onTaskVanished(taskInfo)); } @Override public void onTaskInfoChanged(ActivityManager.RunningTaskInfo info) { - TaskOrganizer.this.onTaskInfoChanged(info); + mExecutor.execute(() -> TaskOrganizer.this.onTaskInfoChanged(info)); } @Override public void onBackPressedOnTaskRoot(ActivityManager.RunningTaskInfo info) { - TaskOrganizer.this.onBackPressedOnTaskRoot(info); + mExecutor.execute(() -> TaskOrganizer.this.onBackPressedOnTaskRoot(info)); } }; |
