InputTracingTest: Fix test flakiness

There was a bug in the logic for tracking when the tracing thread is
idle. The thread can only be idle when the queue is empty, so prevent
it from being marked as idle when there are still events left to be
processed.

Also, a waitForTracerIdle() was missing in the TraceWindowDispatch test.

Bug: 333544493
Test: InputTracingTest passes 10000 times
Change-Id: I90feaeefc80d1a0e43732ee7e75d4074a9634bd7
diff --git a/services/inputflinger/dispatcher/trace/ThreadedBackend.cpp b/services/inputflinger/dispatcher/trace/ThreadedBackend.cpp
index c0a98f5..3c3c15a 100644
--- a/services/inputflinger/dispatcher/trace/ThreadedBackend.cpp
+++ b/services/inputflinger/dispatcher/trace/ThreadedBackend.cpp
@@ -57,6 +57,7 @@
                                                 const TracedEventMetadata& metadata) {
     std::scoped_lock lock(mLock);
     mQueue.emplace_back(event, metadata);
+    setIdleStatus(false);
     mThreadWakeCondition.notify_all();
 }
 
@@ -65,6 +66,7 @@
                                              const TracedEventMetadata& metadata) {
     std::scoped_lock lock(mLock);
     mQueue.emplace_back(event, metadata);
+    setIdleStatus(false);
     mThreadWakeCondition.notify_all();
 }
 
@@ -73,6 +75,7 @@
                                                    const TracedEventMetadata& metadata) {
     std::scoped_lock lock(mLock);
     mQueue.emplace_back(dispatchArgs, metadata);
+    setIdleStatus(false);
     mThreadWakeCondition.notify_all();
 }
 
@@ -84,7 +87,9 @@
         std::unique_lock lock(mLock);
         base::ScopedLockAssertion assumeLocked(mLock);
 
-        setIdleStatus(true);
+        if (mQueue.empty()) {
+            setIdleStatus(true);
+        }
 
         // Wait until we need to process more events or exit.
         mThreadWakeCondition.wait(lock,
@@ -94,8 +99,6 @@
             return;
         }
 
-        setIdleStatus(false);
-
         mQueue.swap(entries);
     } // release lock
 
diff --git a/services/inputflinger/tests/InputTracingTest.cpp b/services/inputflinger/tests/InputTracingTest.cpp
index fe4d6d9..23fa045 100644
--- a/services/inputflinger/tests/InputTracingTest.cpp
+++ b/services/inputflinger/tests/InputTracingTest.cpp
@@ -626,6 +626,8 @@
     consumed = window->consumeMotionEvent(WithMotionAction(ACTION_CANCEL));
     s.expectMotionTraced(Level::NONE, *consumed);
     s.expectDispatchTraced(Level::REDACTED, {*consumed, window});
+
+    waitForTracerIdle();
 }
 
 TEST_F(InputTracingTest, SimultaneousTracingSessions) {