diff options
author | 2018-12-19 15:17:29 -0800 | |
---|---|---|
committer | 2018-12-19 15:17:29 -0800 | |
commit | eb629d7ed27112eca0b3e55ec08119773f9e34ea (patch) | |
tree | f4f4af5c95f3ed53cb4817021e7f527acd891f4f | |
parent | a034692c8174a67c96b7e677bb08a5390046034a (diff) |
Cancel all pending anims when tearing down.
When I was trying to reproduce a TH failure in DisplayContentTests I ran
into a different failure that a SurfaceControl (an anim leash) is used
after being destroyed. Therefore cancel all pending anims before
destroying all SurfaceControls in WMSRule to avoid that.
Bug: None
Test: Tests pass.
Change-Id: Iec978605fa5a8d7dbb0f8afed7cd2e6463454d04
-rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceRule.java | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceRule.java b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceRule.java index 522ab9ffb291..04e433e98678 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceRule.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceRule.java @@ -164,6 +164,7 @@ public class WindowManagerServiceRule implements TestRule { } private void tearDown() { + cancelAllPendingAnimations(); waitUntilWindowManagerHandlersIdle(); destroyAllSurfaceTransactions(); destroyAllSurfaceControls(); @@ -178,6 +179,15 @@ public class WindowManagerServiceRule implements TestRule { return mService; } + private void cancelAllPendingAnimations() { + for (final WeakReference<SurfaceControl> reference : mSurfaceControls) { + final SurfaceControl sc = reference.get(); + if (sc != null) { + mService.mSurfaceAnimationRunner.onAnimationCancelled(sc); + } + } + } + void waitUntilWindowManagerHandlersIdle() { final WindowManagerService wm = getWindowManagerService(); if (wm == null) { |