fix(magnification): de-flake test so it reliably grabs animation values

Test: atest SystemUITests:com.android.systemui.accessibility.WindowMagnificationControllerTest

Bug: b/260421014
Change-Id: Ib5848fe6d8b6b2ae35ba98bd75a329858203fb25
This commit is contained in:
Tyler Freeman
2022-12-01 19:26:17 -08:00
parent da9efd894e
commit 1e7c941b38

View File

@@ -34,7 +34,6 @@ import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
@@ -88,6 +87,8 @@ import com.android.systemui.model.SysUiState;
import com.android.systemui.util.leak.ReferenceTestUtils;
import com.android.systemui.utils.os.FakeHandler;
import com.google.common.util.concurrent.AtomicDouble;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -710,7 +711,7 @@ public class WindowMagnificationControllerTest extends SysuiTestCase {
}
@Test
public void onSingleTap_enabled_scaleIsChanged() {
public void onSingleTap_enabled_scaleAnimates() {
mInstrumentation.runOnMainSync(() -> {
mWindowMagnificationController.enableWindowMagnificationInternal(Float.NaN, Float.NaN,
Float.NaN);
@@ -721,14 +722,28 @@ public class WindowMagnificationControllerTest extends SysuiTestCase {
});
final View mirrorView = mWindowManager.getAttachedView();
final long timeout = SystemClock.uptimeMillis() + 1000;
while (SystemClock.uptimeMillis() < timeout) {
SystemClock.sleep(10);
if (Float.compare(1.0f, mirrorView.getScaleX()) < 0) {
return;
final AtomicDouble maxScaleX = new AtomicDouble();
final Runnable onAnimationFrame = new Runnable() {
@Override
public void run() {
// For some reason the fancy way doesn't compile...
// maxScaleX.getAndAccumulate(mirrorView.getScaleX(), Math::max);
final double oldMax = maxScaleX.get();
final double newMax = Math.max(mirrorView.getScaleX(), oldMax);
assertTrue(maxScaleX.compareAndSet(oldMax, newMax));
if (SystemClock.uptimeMillis() < timeout) {
mirrorView.postOnAnimation(this);
}
}
}
fail("MirrorView scale is not changed");
};
mirrorView.postOnAnimation(onAnimationFrame);
waitForIdleSync();
ReferenceTestUtils.waitForCondition(() -> maxScaleX.get() > 1.0);
}
@Test