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

Commit 73ba9201 authored by Prabir Pradhan's avatar Prabir Pradhan
Browse files

InputTracer: Use explicit thread wake conditions

This is a small cleanup to use the stop_predicate for the
std::condition_variable::wait() method to make the waking conditions
explicit and more readable.

Also, move the events buffers out of the thread loop to avoid the need
to reallocate it for each iteration.

Bug: 210460522
Test: atest inputflinger_tests
Change-Id: Ic56a6f2cf42fe2eee752e1d34fd347a3f5421991
parent a2d3cf16
Loading
Loading
Loading
Loading
+9 −7
Original line number Diff line number Diff line
@@ -154,19 +154,21 @@ std::optional<InputTracer::EventState>& InputTracer::getState(const EventTracker
void InputTracer::threadLoop() {
    androidSetThreadName("InputTracer");

    while (true) {
    std::vector<const EventState> eventsToTrace;
    std::vector<const WindowDispatchArgs> dispatchEventsToTrace;
        {

    while (true) {
        { // acquire lock
            std::unique_lock lock(mLock);
            base::ScopedLockAssertion assumeLocked(mLock);

            // Wait until we need to process more events or exit.
            mThreadWakeCondition.wait(lock, [&]() REQUIRES(mLock) {
                return mThreadExit || !mTraceQueue.empty() || !mDispatchTraceQueue.empty();
            });
            if (mThreadExit) {
                return;
            }
            if (mTraceQueue.empty() && mDispatchTraceQueue.empty()) {
                // Wait indefinitely until the thread is awoken.
                mThreadWakeCondition.wait(lock);
            }

            mTraceQueue.swap(eventsToTrace);
            mDispatchTraceQueue.swap(dispatchEventsToTrace);