diff options
| author | 2023-11-13 11:20:29 +0000 | |
|---|---|---|
| committer | 2023-11-15 10:18:20 +0000 | |
| commit | 6e7182bdd0f0cac8e98ae09a20b80a55b5cb0fcc (patch) | |
| tree | 68c8ad3dc66de11023058721c7660ccdf9443bf9 | |
| parent | 891fc7c2b89e10424c07ef5ccc79014fdce73995 (diff) | |
Use OffsettableClock to change time in PWM tests.
Using Thead.sleep() can add flakiness to tests and also causes
tests to run longer.
Test: atest WmTests
Bug: 309242061
Change-Id: I03ebed882422ec46471e9d39a0edaa09f97b071e
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/policy/ShortcutKeyTestBase.java | 44 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java | 13 |
2 files changed, 21 insertions, 36 deletions
diff --git a/services/tests/wmtests/src/com/android/server/policy/ShortcutKeyTestBase.java b/services/tests/wmtests/src/com/android/server/policy/ShortcutKeyTestBase.java index 270d5df5e702..ab35da69da7c 100644 --- a/services/tests/wmtests/src/com/android/server/policy/ShortcutKeyTestBase.java +++ b/services/tests/wmtests/src/com/android/server/policy/ShortcutKeyTestBase.java @@ -46,7 +46,6 @@ import static com.android.server.policy.WindowManagerPolicy.ACTION_PASS_TO_USER; import static java.util.Collections.unmodifiableMap; import android.content.Context; -import android.os.SystemClock; import android.util.ArrayMap; import android.view.InputDevice; import android.view.KeyCharacterMap; @@ -110,8 +109,8 @@ class ShortcutKeyTestBase { } } - void sendKeyCombination(int[] keyCodes, long duration, boolean longPress) { - final long downTime = SystemClock.uptimeMillis(); + void sendKeyCombination(int[] keyCodes, long durationMillis, boolean longPress) { + final long downTime = mPhoneWindowManager.getCurrentTime(); final int count = keyCodes.length; int metaState = 0; @@ -126,14 +125,12 @@ class ShortcutKeyTestBase { metaState |= MODIFIER.getOrDefault(keyCode, 0); } - try { - Thread.sleep(duration); - } catch (InterruptedException e) { - throw new RuntimeException(e); + if (durationMillis > 0) { + mPhoneWindowManager.moveTimeForward(durationMillis); } if (longPress) { - final long nextDownTime = SystemClock.uptimeMillis(); + final long nextDownTime = mPhoneWindowManager.getCurrentTime(); for (int i = 0; i < count; i++) { final int keyCode = keyCodes[i]; final KeyEvent nextDownEvent = new KeyEvent(downTime, nextDownTime, @@ -145,7 +142,7 @@ class ShortcutKeyTestBase { } } - final long eventTime = SystemClock.uptimeMillis(); + final long eventTime = mPhoneWindowManager.getCurrentTime(); for (int i = count - 1; i >= 0; i--) { final int keyCode = keyCodes[i]; final KeyEvent upEvent = new KeyEvent(downTime, eventTime, KeyEvent.ACTION_UP, keyCode, @@ -157,8 +154,8 @@ class ShortcutKeyTestBase { } } - void sendKeyCombination(int[] keyCodes, long duration) { - sendKeyCombination(keyCodes, duration, false /* longPress */); + void sendKeyCombination(int[] keyCodes, long durationMillis) { + sendKeyCombination(keyCodes, durationMillis, false /* longPress */); } void sendLongPressKeyCombination(int[] keyCodes) { @@ -170,30 +167,7 @@ class ShortcutKeyTestBase { } void sendKey(int keyCode, boolean longPress) { - final long downTime = SystemClock.uptimeMillis(); - final KeyEvent event = new KeyEvent(downTime, downTime, KeyEvent.ACTION_DOWN, keyCode, - 0 /*repeat*/, 0 /*metaState*/, KeyCharacterMap.VIRTUAL_KEYBOARD, 0 /*scancode*/, - 0 /*flags*/, InputDevice.SOURCE_KEYBOARD); - event.setDisplayId(DEFAULT_DISPLAY); - interceptKey(event); - - if (longPress) { - final long nextDownTime = downTime + ViewConfiguration.getLongPressTimeout(); - final KeyEvent nextDownevent = new KeyEvent(downTime, nextDownTime, - KeyEvent.ACTION_DOWN, keyCode, 1 /*repeat*/, 0 /*metaState*/, - KeyCharacterMap.VIRTUAL_KEYBOARD, 0 /*scancode*/, - KeyEvent.FLAG_LONG_PRESS /*flags*/, InputDevice.SOURCE_KEYBOARD); - interceptKey(nextDownevent); - } - - final long eventTime = longPress - ? SystemClock.uptimeMillis() + ViewConfiguration.getLongPressTimeout() - : SystemClock.uptimeMillis(); - final KeyEvent upEvent = new KeyEvent(downTime, eventTime, KeyEvent.ACTION_UP, keyCode, - 0 /*repeat*/, 0 /*metaState*/, KeyCharacterMap.VIRTUAL_KEYBOARD, 0 /*scancode*/, - 0 /*flags*/, InputDevice.SOURCE_KEYBOARD); - upEvent.setDisplayId(DEFAULT_DISPLAY); - interceptKey(upEvent); + sendKeyCombination(new int[]{keyCode}, 0 /*durationMillis*/, longPress); } private void interceptKey(KeyEvent keyEvent) { diff --git a/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java b/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java index e26260a6836c..15242ada8ce7 100644 --- a/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java +++ b/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java @@ -98,6 +98,7 @@ import com.android.server.inputmethod.InputMethodManagerInternal; import com.android.server.pm.UserManagerInternal; import com.android.server.policy.keyguard.KeyguardServiceDelegate; import com.android.server.statusbar.StatusBarManagerInternal; +import com.android.server.testutils.OffsettableClock; import com.android.server.vr.VrManagerInternal; import com.android.server.wm.ActivityTaskManagerInternal; import com.android.server.wm.DisplayPolicy; @@ -160,7 +161,8 @@ class TestPhoneWindowManager { @Mock private KeyguardServiceDelegate mKeyguardServiceDelegate; private StaticMockitoSession mMockitoSession; - private TestLooper mTestLooper = new TestLooper(); + private OffsettableClock mClock = new OffsettableClock(); + private TestLooper mTestLooper = new TestLooper(() -> mClock.now()); private HandlerThread mHandlerThread; private Handler mHandler; @@ -329,6 +331,15 @@ class TestPhoneWindowManager { mPhoneWindowManager.dispatchUnhandledKey(null /*focusedToken*/, event, FLAG_INTERACTIVE); } + long getCurrentTime() { + return mClock.now(); + } + + void moveTimeForward(long timeMs) { + mClock.fastForward(timeMs); + mTestLooper.dispatchAll(); + } + /** * Below functions will override the setting or the policy behavior. */ |