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

Commit 4ce37f13 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "HalProxy unit test to expose incorrect numEventsOnPendingQueue"

parents 43e05713 2f4ac159
Loading
Loading
Loading
Loading
+39 −0
Original line number Diff line number Diff line
@@ -724,6 +724,45 @@ TEST(HalProxyTest, PostedEventSensorHandleSubHalIndexValid) {
    EXPECT_EQ(eventOut.sensorHandle, (subhal2Index << 24) | sensorHandleToPost);
}

TEST(HalProxyTest, FillAndDrainPendingQueueTest) {
    constexpr size_t kQueueSize = 5;
    // TODO: Make this constant linked to same limit in HalProxy.h
    constexpr size_t kMaxPendingQueueSize = 100000;
    AllSensorsSubHal subhal;
    std::vector<ISensorsSubHal*> subHals{&subhal};

    std::unique_ptr<EventMessageQueue> eventQueue = makeEventFMQ(kQueueSize);
    std::unique_ptr<WakeupMessageQueue> wakeLockQueue = makeWakelockFMQ(kQueueSize);
    ::android::sp<ISensorsCallback> callback = new SensorsCallback();
    EventFlag* eventQueueFlag;
    EventFlag::createEventFlag(eventQueue->getEventFlagWord(), &eventQueueFlag);
    HalProxy proxy(subHals);
    proxy.initialize(*eventQueue->getDesc(), *wakeLockQueue->getDesc(), callback);

    // Fill pending queue
    std::vector<Event> events = makeMultipleAccelerometerEvents(kQueueSize);
    subhal.postEvents(events, false);
    events = makeMultipleAccelerometerEvents(kMaxPendingQueueSize);
    subhal.postEvents(events, false);

    // Drain pending queue
    for (int i = 0; i < kMaxPendingQueueSize + kQueueSize; i += kQueueSize) {
        ASSERT_TRUE(readEventsOutOfQueue(kQueueSize, eventQueue, eventQueueFlag));
    }

    // Put one event on pending queue
    events = makeMultipleAccelerometerEvents(kQueueSize);
    subhal.postEvents(events, false);
    events = {makeAccelerometerEvent()};
    subhal.postEvents(events, false);

    // Read out to make room for one event on pending queue to write to FMQ
    ASSERT_TRUE(readEventsOutOfQueue(kQueueSize, eventQueue, eventQueueFlag));

    // Should be able to read that last event off queue
    EXPECT_TRUE(readEventsOutOfQueue(1, eventQueue, eventQueueFlag));
}

// Helper implementations follow
void testSensorsListFromProxyAndSubHal(const std::vector<SensorInfo>& proxySensorsList,
                                       const std::vector<SensorInfo>& subHalSensorsList) {