Merge "Merge "Remove unnecessary cleanup procedures of WmTests" into rvc-dev am: 009c800f55 am: 3381f111d4" into rvc-d1-dev-plus-aosp am: 2d734d4ea5

Change-Id: I60c954165752e51996aca002b13809b651b678d2
This commit is contained in:
Automerger Merge Worker
2020-04-27 19:49:45 +00:00
2 changed files with 6 additions and 66 deletions

View File

@@ -335,7 +335,11 @@ public class SystemServicesTestRule implements TestRule {
mWmService.mConstants.dispose();
mWmService.mHighRefreshRateBlacklist.dispose();
// This makes sure the posted messages without delay are processed, e.g.
// DisplayPolicy#release, WindowManagerService#setAnimationScale.
waitUntilWindowManagerHandlersIdle();
// Clear all posted messages with delay, so they don't be executed at unexpected times.
cleanupWindowManagerHandlers();
// Needs to explicitly dispose current static threads because there could be messages
// scheduled at a later time, and all mocks are invalid when it's executed.
DisplayThread.dispose();
@@ -399,8 +403,6 @@ public class SystemServicesTestRule implements TestRule {
if (wm == null) {
return;
}
// Removing delayed FORCE_GC message decreases time for waiting idle.
wm.mH.removeMessages(WindowManagerService.H.FORCE_GC);
waitHandlerIdle(wm.mH);
waitHandlerIdle(wm.mAnimationHandler);
// This is a different handler object than the wm.mAnimationHandler above.
@@ -408,25 +410,8 @@ public class SystemServicesTestRule implements TestRule {
waitHandlerIdle(SurfaceAnimationThread.getHandler());
}
private void waitHandlerIdle(Handler handler) {
synchronized (mCurrentMessagesProcessed) {
// Add a message to the handler queue and make sure it is fully processed before we move
// on. This makes sure all previous messages in the handler are fully processed vs. just
// popping them from the message queue.
mCurrentMessagesProcessed.set(false);
handler.post(() -> {
synchronized (mCurrentMessagesProcessed) {
mCurrentMessagesProcessed.set(true);
mCurrentMessagesProcessed.notifyAll();
}
});
while (!mCurrentMessagesProcessed.get()) {
try {
mCurrentMessagesProcessed.wait();
} catch (InterruptedException e) {
}
}
}
static void waitHandlerIdle(Handler handler) {
handler.runWithScissors(() -> { }, 0 /* timeout */);
}
void waitUntilWindowAnimatorIdle() {

View File

@@ -52,13 +52,9 @@ import android.view.WindowManager;
import com.android.server.AttributeCache;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import java.util.HashSet;
import java.util.LinkedList;
/**
* Common base class for window manager unit test classes.
*
@@ -85,7 +81,6 @@ class WindowTestsBase extends SystemServiceTestsBase {
WindowState mAppWindow;
WindowState mChildAppWindowAbove;
WindowState mChildAppWindowBelow;
HashSet<WindowState> mCommonWindows;
/**
* Spied {@link Transaction} class than can be used to verify calls.
@@ -115,7 +110,6 @@ class WindowTestsBase extends SystemServiceTestsBase {
mDisplayContent = createNewDisplay(true /* supportIme */);
// Set-up some common windows.
mCommonWindows = new HashSet<>();
synchronized (mWm.mGlobalLock) {
mWallpaperWindow = createCommonWindow(null, TYPE_WALLPAPER, "wallpaperWindow");
mImeWindow = createCommonWindow(null, TYPE_INPUT_METHOD, "mImeWindow");
@@ -151,48 +145,9 @@ class WindowTestsBase extends SystemServiceTestsBase {
// Called before display is created.
}
@After
public void tearDownBase() {
// If @After throws an exception, the error isn't logged. This will make sure any failures
// in the tear down are clear. This can be removed when b/37850063 is fixed.
try {
// Test may schedule to perform surface placement or other messages. Wait until a
// stable state to clean up for consistency.
waitUntilHandlersIdle();
final LinkedList<WindowState> nonCommonWindows = new LinkedList<>();
synchronized (mWm.mGlobalLock) {
mWm.mRoot.forAllWindows(w -> {
if (!mCommonWindows.contains(w)) {
nonCommonWindows.addLast(w);
}
}, true /* traverseTopToBottom */);
while (!nonCommonWindows.isEmpty()) {
nonCommonWindows.pollLast().removeImmediately();
}
// Remove app transition & window freeze timeout callbacks to prevent unnecessary
// actions after test.
mWm.getDefaultDisplayContentLocked().mAppTransition
.removeAppTransitionTimeoutCallbacks();
mWm.mH.removeMessages(WindowManagerService.H.WINDOW_FREEZE_TIMEOUT);
mDisplayContent.mInputMethodTarget = null;
}
// Cleaned up everything in Handler.
cleanupWindowManagerHandlers();
} catch (Exception e) {
Log.e(TAG, "Failed to tear down test", e);
throw e;
}
}
private WindowState createCommonWindow(WindowState parent, int type, String name) {
synchronized (mWm.mGlobalLock) {
final WindowState win = createWindow(parent, type, name);
mCommonWindows.add(win);
// Prevent common windows from been IMe targets
win.mAttrs.flags |= FLAG_NOT_FOCUSABLE;
return win;