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

Commit 0436097a authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix assumptions in SensorsHidlTest.NoStaleEvents" into qt-dev

parents 039eca1a bf23abb7
Loading
Loading
Loading
Loading
+32 −5
Original line number Diff line number Diff line
@@ -173,6 +173,7 @@ class SensorsHidlTest : public SensorsHidlTestBase {
    // Helper functions
    void activateAllSensors(bool enable);
    std::vector<SensorInfo> getNonOneShotSensors();
    std::vector<SensorInfo> getNonOneShotAndNonSpecialSensors();
    std::vector<SensorInfo> getOneShotSensors();
    std::vector<SensorInfo> getInjectEventSensors();
    int32_t getInvalidSensorHandle();
@@ -255,6 +256,18 @@ std::vector<SensorInfo> SensorsHidlTest::getNonOneShotSensors() {
    return sensors;
}

std::vector<SensorInfo> SensorsHidlTest::getNonOneShotAndNonSpecialSensors() {
    std::vector<SensorInfo> sensors;
    for (const SensorInfo& info : getSensorsList()) {
        SensorFlagBits reportMode = extractReportMode(info.flags);
        if (reportMode != SensorFlagBits::ONE_SHOT_MODE &&
            reportMode != SensorFlagBits::SPECIAL_REPORTING_MODE) {
            sensors.push_back(info);
        }
    }
    return sensors;
}

std::vector<SensorInfo> SensorsHidlTest::getOneShotSensors() {
    std::vector<SensorInfo> sensors;
    for (const SensorInfo& info : getSensorsList()) {
@@ -833,9 +846,10 @@ TEST_F(SensorsHidlTest, NoStaleEvents) {
    EventCallback callback;
    getEnvironment()->registerCallback(&callback);

    const std::vector<SensorInfo> sensors = getSensorsList();
    // This test is not valid for one-shot or special-report-mode sensors
    const std::vector<SensorInfo> sensors = getNonOneShotAndNonSpecialSensors();
    int32_t maxMinDelay = 0;
    for (const SensorInfo& sensor : getSensorsList()) {
    for (const SensorInfo& sensor : sensors) {
        maxMinDelay = std::max(maxMinDelay, sensor.minDelay);
    }

@@ -851,10 +865,15 @@ TEST_F(SensorsHidlTest, NoStaleEvents) {
    // Save the last received event for each sensor
    std::map<int32_t, int64_t> lastEventTimestampMap;
    for (const SensorInfo& sensor : sensors) {
        // Some on-change sensors may not report an event without stimulus
        if (extractReportMode(sensor.flags) != SensorFlagBits::ON_CHANGE_MODE) {
            ASSERT_GE(callback.getEvents(sensor.sensorHandle).size(), 1);
        }
        if (callback.getEvents(sensor.sensorHandle).size() >= 1) {
            lastEventTimestampMap[sensor.sensorHandle] =
                    callback.getEvents(sensor.sensorHandle).back().timestamp;
        }
    }

    // Allow some time to pass, reset the callback, then reactivate the sensors
    usleep(kOneSecond + (5 * maxMinDelay));
@@ -864,6 +883,14 @@ TEST_F(SensorsHidlTest, NoStaleEvents) {
    activateAllSensors(false);

    for (const SensorInfo& sensor : sensors) {
        // Skip sensors that did not previously report an event
        if (lastEventTimestampMap.find(sensor.sensorHandle) == lastEventTimestampMap.end()) {
            continue;
        }
        // Skip on-change sensors that do not consistently report an initial event
        if (callback.getEvents(sensor.sensorHandle).size() < 1) {
            continue;
        }
        // Ensure that the first event received is not stale by ensuring that its timestamp is
        // sufficiently different from the previous event
        const Event newEvent = callback.getEvents(sensor.sensorHandle).front();