From c9dfbc5fc84a070c1a35b2897613c5a23eeeedfe Mon Sep 17 00:00:00 2001 From: Wale Ogunwale Date: Thu, 21 Nov 2019 07:19:07 -0800 Subject: [PATCH] Clean up AnimationThread default handler To avoid flakiness during unit tests. Note that this is a different object than WindowManagerService.mAnimationHandler. Bug: N/A Test: Let them pass! Change-Id: I71a775b0599facb4172c86b28d7a9f7e36c65673 --- .../src/com/android/server/wm/SystemServiceTestsBase.java | 4 ++++ .../src/com/android/server/wm/SystemServicesTestRule.java | 4 ++++ .../wmtests/src/com/android/server/wm/WindowTestsBase.java | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/services/tests/wmtests/src/com/android/server/wm/SystemServiceTestsBase.java b/services/tests/wmtests/src/com/android/server/wm/SystemServiceTestsBase.java index d1b6f6f3f4cf1..7e31895aa9917 100644 --- a/services/tests/wmtests/src/com/android/server/wm/SystemServiceTestsBase.java +++ b/services/tests/wmtests/src/com/android/server/wm/SystemServiceTestsBase.java @@ -40,6 +40,10 @@ class SystemServiceTestsBase { mLockRule.waitForLocked(mSystemServicesTestRule::waitUntilWindowManagerHandlersIdle); } + void cleanupWindowManagerHandlers() { + mLockRule.waitForLocked(mSystemServicesTestRule::cleanupWindowManagerHandlers); + } + boolean waitHandlerIdle(Handler handler) { return waitHandlerIdle(handler, 0 /* timeout */); } diff --git a/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java b/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java index 2c34f331e965a..d3b68e02cbf88 100644 --- a/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java +++ b/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java @@ -355,6 +355,8 @@ public class SystemServicesTestRule implements TestRule { } wm.mH.removeCallbacksAndMessages(null); wm.mAnimationHandler.removeCallbacksAndMessages(null); + // This is a different handler object than the wm.mAnimationHandler above. + AnimationThread.getHandler().removeCallbacksAndMessages(null); SurfaceAnimationThread.getHandler().removeCallbacksAndMessages(null); } @@ -367,6 +369,8 @@ public class SystemServicesTestRule implements TestRule { wm.mH.removeMessages(WindowManagerService.H.FORCE_GC); waitHandlerIdle(wm.mH); waitHandlerIdle(wm.mAnimationHandler); + // This is a different handler object than the wm.mAnimationHandler above. + waitHandlerIdle(AnimationThread.getHandler()); waitHandlerIdle(SurfaceAnimationThread.getHandler()); } diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java index 0da9dc40bb4d7..7aa5148aa1a5a 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java @@ -175,7 +175,7 @@ class WindowTestsBase extends SystemServiceTestsBase { } // Cleaned up everything in Handler. - mSystemServicesTestRule.cleanupWindowManagerHandlers(); + cleanupWindowManagerHandlers(); } catch (Exception e) { Log.e(TAG, "Failed to tear down test", e); throw e;