summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Garfield Tan <xutan@google.com> 2018-12-19 15:17:29 -0800
committer Garfield Tan <xutan@google.com> 2018-12-19 15:17:29 -0800
commiteb629d7ed27112eca0b3e55ec08119773f9e34ea (patch)
treef4f4af5c95f3ed53cb4817021e7f527acd891f4f
parenta034692c8174a67c96b7e677bb08a5390046034a (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.java10
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) {