Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6e7182bd authored by Vaibhav Devmurari's avatar Vaibhav Devmurari
Browse files

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
parent 891fc7c2
Loading
Loading
Loading
Loading
+9 −35
Original line number Diff line number Diff line
@@ -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) {
+12 −1
Original line number Diff line number Diff line
@@ -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.
     */