Allow multiple events to be processed in FakeEventHub
Currently, we are only allowing fake event hub to return a single input
event during tests.
That means, tests have to call 'loopOnce' for every event that is
enqueued to fake event hub.
The eventhub interface, however, does not have such a limitation.
EventHubInterface allows up to 'bufferSize' events to be returned at
each 'getEvents' call.
Therefore, adjust FakeEventHub to use this interface in the full
capacity.
Bug: 169866723
Test: atest inputflinger_tests
Change-Id: Icb4dd8fffea9bfef51861ab38ba529a814e7577f
diff --git a/services/inputflinger/tests/InputReader_test.cpp b/services/inputflinger/tests/InputReader_test.cpp
index bea9932..409c62a 100644
--- a/services/inputflinger/tests/InputReader_test.cpp
+++ b/services/inputflinger/tests/InputReader_test.cpp
@@ -409,7 +409,7 @@
KeyedVector<int32_t, Device*> mDevices;
std::vector<std::string> mExcludedDevices;
- List<RawEvent> mEvents GUARDED_BY(mLock);
+ std::vector<RawEvent> mEvents GUARDED_BY(mLock);
std::unordered_map<int32_t /*deviceId*/, std::vector<TouchVideoFrame>> mVideoFrames;
std::vector<int32_t> mVibrators = {0, 1};
@@ -722,16 +722,15 @@
mExcludedDevices = devices;
}
- size_t getEvents(int, RawEvent* buffer, size_t) override {
- std::scoped_lock<std::mutex> lock(mLock);
- if (mEvents.empty()) {
- return 0;
- }
+ size_t getEvents(int, RawEvent* buffer, size_t bufferSize) override {
+ std::scoped_lock lock(mLock);
- *buffer = *mEvents.begin();
- mEvents.erase(mEvents.begin());
+ const size_t filledSize = std::min(mEvents.size(), bufferSize);
+ std::copy(mEvents.begin(), mEvents.begin() + filledSize, buffer);
+
+ mEvents.erase(mEvents.begin(), mEvents.begin() + filledSize);
mEventsCondition.notify_all();
- return 1;
+ return filledSize;
}
std::vector<TouchVideoFrame> getVideoFrames(int32_t deviceId) override {