Merge "Make ImePerfTest wait for animation end" into sc-dev am: 28a77d5846 am: 7a61b48724
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15161272
Change-Id: I51318a7165bfc5d874fba258a2b4d876024d52cc
diff --git a/apct-tests/perftests/inputmethod/src/android/inputmethod/ImePerfTest.java b/apct-tests/perftests/inputmethod/src/android/inputmethod/ImePerfTest.java
index 21c4491..ab3c50b 100644
--- a/apct-tests/perftests/inputmethod/src/android/inputmethod/ImePerfTest.java
+++ b/apct-tests/perftests/inputmethod/src/android/inputmethod/ImePerfTest.java
@@ -304,10 +304,9 @@
while (state.keepRunning(measuredTimeNs)) {
setImeListener(activity, latchStart, latchEnd);
- latchStart.set(new CountDownLatch(show ? 1 : 2));
- latchEnd.set(new CountDownLatch(2));
// For measuring hide, lets show IME first.
if (!show) {
+ initLatch(latchStart, latchEnd);
AtomicBoolean showCalled = new AtomicBoolean();
getInstrumentation().runOnMainSync(() -> {
if (!isImeVisible(activity)) {
@@ -316,9 +315,10 @@
}
});
if (showCalled.get()) {
- PollingCheck.check("IME show animation should finish ", TIMEOUT_1_S_IN_MS,
- () -> latchStart.get().getCount() == 1
- && latchEnd.get().getCount() == 1);
+ PollingCheck.check("IME show animation should finish ",
+ TIMEOUT_1_S_IN_MS * 3,
+ () -> latchStart.get().getCount() == 0
+ && latchEnd.get().getCount() == 0);
}
}
if (!mIsTraceStarted && !state.isWarmingUp()) {
@@ -328,6 +328,7 @@
AtomicLong startTime = new AtomicLong();
AtomicBoolean unexpectedVisibility = new AtomicBoolean();
+ initLatch(latchStart, latchEnd);
getInstrumentation().runOnMainSync(() -> {
boolean isVisible = isImeVisible(activity);
startTime.set(SystemClock.elapsedRealtimeNanos());
@@ -346,11 +347,15 @@
long timeElapsed = waitForAnimationStart(latchStart, startTime);
if (timeElapsed != ANIMATION_NOT_STARTED) {
measuredTimeNs = timeElapsed;
+ // wait for animation to end or we may start two animations and timing
+ // will not be measured accurately.
+ waitForAnimationEnd(latchEnd);
}
}
// hide IME before next iteration.
if (show) {
+ initLatch(latchStart, latchEnd);
activity.runOnUiThread(() -> controller.hide(WindowInsets.Type.ime()));
try {
latchEnd.get().await(TIMEOUT_1_S_IN_MS * 5, TimeUnit.MILLISECONDS);
@@ -372,6 +377,12 @@
addResultToState(state);
}
+ private void initLatch(AtomicReference<CountDownLatch> latchStart,
+ AtomicReference<CountDownLatch> latchEnd) {
+ latchStart.set(new CountDownLatch(1));
+ latchEnd.set(new CountDownLatch(1));
+ }
+
@UiThread
private boolean isImeVisible(@NonNull final Activity activity) {
return activity.getWindow().getDecorView().getRootWindowInsets().isVisible(
@@ -381,7 +392,7 @@
private long waitForAnimationStart(
AtomicReference<CountDownLatch> latchStart, AtomicLong startTime) {
try {
- latchStart.get().await(TIMEOUT_1_S_IN_MS * 5, TimeUnit.MILLISECONDS);
+ latchStart.get().await(5, TimeUnit.SECONDS);
if (latchStart.get().getCount() != 0) {
return ANIMATION_NOT_STARTED;
}
@@ -390,6 +401,12 @@
return SystemClock.elapsedRealtimeNanos() - startTime.get();
}
+ private void waitForAnimationEnd(AtomicReference<CountDownLatch> latchEnd) {
+ try {
+ latchEnd.get().await(3, TimeUnit.SECONDS);
+ } catch (InterruptedException e) { }
+ }
+
private void addResultToState(ManualBenchmarkState state) {
mTraceMethods.forAllSlices((key, slices) -> {
for (TraceMarkSlice slice : slices) {