Merge "Consume sync draw handlers if the surface is destroyed" into tm-dev
This commit is contained in:
@@ -3584,6 +3584,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
// Clear animating flags now, since the surface is now gone. (Note this is true even
|
||||
// if the surface is saved, to outside world the surface is still NO_SURFACE.)
|
||||
mAnimatingExit = false;
|
||||
|
||||
if (useBLASTSync()) {
|
||||
immediatelyNotifyBlastSync();
|
||||
}
|
||||
}
|
||||
|
||||
void onSurfaceShownChanged(boolean shown) {
|
||||
|
||||
@@ -61,6 +61,7 @@ import static org.hamcrest.Matchers.is;
|
||||
import static org.hamcrest.Matchers.not;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNotEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertThat;
|
||||
@@ -491,6 +492,26 @@ public class WindowStateTests extends WindowTestsBase {
|
||||
assertThat(app.getDisplayId(), is(mDisplayContent.getDisplayId()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testApplyWithNextDraw() {
|
||||
final WindowState win = createWindow(null, TYPE_APPLICATION_OVERLAY, "app");
|
||||
final SurfaceControl.Transaction[] handledT = { null };
|
||||
// The normal case that the draw transaction is applied with finishing drawing.
|
||||
win.applyWithNextDraw(t -> handledT[0] = t);
|
||||
assertTrue(win.useBLASTSync());
|
||||
final SurfaceControl.Transaction drawT = new StubTransaction();
|
||||
win.prepareDrawHandlers();
|
||||
assertTrue(win.finishDrawing(drawT));
|
||||
assertEquals(drawT, handledT[0]);
|
||||
assertFalse(win.useBLASTSync());
|
||||
|
||||
// If the window is gone before reporting drawn, the sync state should be cleared.
|
||||
win.applyWithNextDraw(t -> handledT[0] = t);
|
||||
win.destroySurfaceUnchecked();
|
||||
assertFalse(win.useBLASTSync());
|
||||
assertNotEquals(drawT, handledT[0]);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSeamlesslyRotateWindow() {
|
||||
final WindowState app = createWindow(null, TYPE_APPLICATION, "app");
|
||||
|
||||
Reference in New Issue
Block a user