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

Commit bfd75114 authored by Siarhei Vishniakou's avatar Siarhei Vishniakou
Browse files

Use different timeouts based on whether event is expected to occur

Before this change, the test waited for 500 ms in the cases where the
input devices were expected to change, and also in the cases where the
input devices were not expected to change.

When a device is being added, this timeout is way too short for some
hardware. This causes test flakiness. However, we can't directly
increase this timeout, because it would make the tests slower, since the
same value will be used for the case where input devices are not
expected to change.

Therefore, in this CL, we provide a way for the caller to specify the
timeout, and introduce a new, shorter timeout for the cases where the
event is not expected to occur.

This is a speculative fix.

Bug: 332178280
Change-Id: I6ee5b75a1331c41544b3efa4c408964eeb512551
Flag: TEST_ONLY
Test: atest inputflinger_tests
parent 6eb21601
Loading
Loading
Loading
Loading
+17 −13
Original line number Diff line number Diff line
@@ -32,19 +32,23 @@ static const int HW_TIMEOUT_MULTIPLIER = base::GetIntProperty("ro.hw_timeout_mul
} // namespace

void FakeInputReaderPolicy::assertInputDevicesChanged() {
    waitForInputDevices([](bool devicesChanged) {
    waitForInputDevices(
            [](bool devicesChanged) {
                if (!devicesChanged) {
                    FAIL() << "Timed out waiting for notifyInputDevicesChanged() to be called.";
                }
    });
            },
            ADD_INPUT_DEVICE_TIMEOUT);
}

void FakeInputReaderPolicy::assertInputDevicesNotChanged() {
    waitForInputDevices([](bool devicesChanged) {
    waitForInputDevices(
            [](bool devicesChanged) {
                if (devicesChanged) {
                    FAIL() << "Expected notifyInputDevicesChanged() to not be called.";
                }
    });
            },
            INPUT_DEVICES_DIDNT_CHANGE_TIMEOUT);
}

void FakeInputReaderPolicy::assertStylusGestureNotified(int32_t deviceId) {
@@ -261,13 +265,13 @@ std::string FakeInputReaderPolicy::getDeviceAlias(const InputDeviceIdentifier&)
    return "";
}

void FakeInputReaderPolicy::waitForInputDevices(std::function<void(bool)> processDevicesChanged) {
void FakeInputReaderPolicy::waitForInputDevices(std::function<void(bool)> processDevicesChanged,
                                                std::chrono::milliseconds timeout) {
    std::unique_lock<std::mutex> lock(mLock);
    base::ScopedLockAssertion assumeLocked(mLock);

    const bool devicesChanged =
            mDevicesChangedCondition.wait_for(lock,
                                              ADD_INPUT_DEVICE_TIMEOUT * HW_TIMEOUT_MULTIPLIER,
            mDevicesChangedCondition.wait_for(lock, timeout * HW_TIMEOUT_MULTIPLIER,
                                              [this]() REQUIRES(mLock) {
                                                  return mInputDevicesChanged;
                                              });
+2 −1
Original line number Diff line number Diff line
@@ -88,7 +88,8 @@ private:
    std::shared_ptr<KeyCharacterMap> getKeyboardLayoutOverlay(
            const InputDeviceIdentifier&, const std::optional<KeyboardLayoutInfo>) override;
    std::string getDeviceAlias(const InputDeviceIdentifier&) override;
    void waitForInputDevices(std::function<void(bool)> processDevicesChanged);
    void waitForInputDevices(std::function<void(bool)> processDevicesChanged,
                             std::chrono::milliseconds timeout);
    void notifyStylusGestureStarted(int32_t deviceId, nsecs_t eventTime) override;

    mutable std::mutex mLock;
+4 −1
Original line number Diff line number Diff line
@@ -25,7 +25,10 @@ namespace android {
using std::chrono_literals::operator""ms;

// Timeout for waiting for an input device to be added and processed
static constexpr std::chrono::duration ADD_INPUT_DEVICE_TIMEOUT = 500ms;
static constexpr std::chrono::duration ADD_INPUT_DEVICE_TIMEOUT = 5000ms;

// Timeout for asserting that an input device change did not occur
static constexpr std::chrono::duration INPUT_DEVICES_DIDNT_CHANGE_TIMEOUT = 100ms;

// Timeout for waiting for an expected event
static constexpr std::chrono::duration WAIT_TIMEOUT = 100ms;