InputTracer: Consolidate logic for marking event processing complete
Bug: 210460522
Test: atest inputflinger_tests
Change-Id: I2288565088dfd477e063c78be450699b258321a3
diff --git a/services/inputflinger/dispatcher/trace/InputTracer.cpp b/services/inputflinger/dispatcher/trace/InputTracer.cpp
index 3b5a096..d16cbf7 100644
--- a/services/inputflinger/dispatcher/trace/InputTracer.cpp
+++ b/services/inputflinger/dispatcher/trace/InputTracer.cpp
@@ -111,11 +111,7 @@
LOG(FATAL) << "Traced event was already logged. "
"eventProcessingComplete() was likely called more than once.";
}
-
- for (const auto& event : eventState->events) {
- writeEventToBackend(event, *mBackend);
- }
- eventState->isEventProcessingComplete = true;
+ eventState->onEventProcessingComplete();
}
std::unique_ptr<EventTrackerInterface> InputTracer::traceDerivedEvent(
@@ -189,18 +185,24 @@
// --- InputTracer::EventState ---
+void InputTracer::EventState::onEventProcessingComplete() {
+ // Write all of the events known so far to the trace.
+ for (const auto& event : events) {
+ writeEventToBackend(event, *tracer.mBackend);
+ }
+ isEventProcessingComplete = true;
+}
+
InputTracer::EventState::~EventState() {
if (isEventProcessingComplete) {
// This event has already been written to the trace as expected.
return;
}
// The event processing was never marked as complete, so do it now.
- // TODO(b/210460522): Determine why/where the event is being destroyed before
- // eventProcessingComplete() is called.
- for (const auto& event : events) {
- writeEventToBackend(event, *tracer.mBackend);
- }
- isEventProcessingComplete = true;
+ // We should never end up here in normal operation. However, in tests, it's possible that we
+ // stop and destroy InputDispatcher without waiting for it to finish processing events, at
+ // which point an event (and thus its EventState) may be destroyed before processing finishes.
+ onEventProcessingComplete();
}
} // namespace android::inputdispatcher::trace::impl
diff --git a/services/inputflinger/dispatcher/trace/InputTracer.h b/services/inputflinger/dispatcher/trace/InputTracer.h
index ccff30e..25a5651 100644
--- a/services/inputflinger/dispatcher/trace/InputTracer.h
+++ b/services/inputflinger/dispatcher/trace/InputTracer.h
@@ -56,6 +56,8 @@
explicit inline EventState(InputTracer& tracer) : tracer(tracer){};
~EventState();
+ void onEventProcessingComplete();
+
InputTracer& tracer;
std::vector<const TracedEvent> events;
bool isEventProcessingComplete{false};