Loading services/inputflinger/dispatcher/trace/InputTracer.cpp +21 −4 Original line number Diff line number Diff line Loading @@ -183,10 +183,21 @@ void InputTracer::traceEventDispatch(const DispatchEntry& dispatchEntry, const int32_t windowId = dispatchEntry.windowId.value_or(0); const int32_t vsyncId = dispatchEntry.windowId.has_value() ? dispatchEntry.vsyncId : 0; mBackend->traceWindowDispatch({std::move(traced), dispatchEntry.deliveryTime, dispatchEntry.resolvedFlags, dispatchEntry.targetUid, vsyncId, windowId, dispatchEntry.transform, dispatchEntry.rawTransform, /*hmac=*/{}, resolvedKeyRepeatCount}); const WindowDispatchArgs windowDispatchArgs{std::move(traced), dispatchEntry.deliveryTime, dispatchEntry.resolvedFlags, dispatchEntry.targetUid, vsyncId, windowId, dispatchEntry.transform, dispatchEntry.rawTransform, /*hmac=*/{}, resolvedKeyRepeatCount}; if (eventState->isEventProcessingComplete) { mBackend->traceWindowDispatch(std::move(windowDispatchArgs)); } else { eventState->pendingDispatchArgs.emplace_back(std::move(windowDispatchArgs)); } } std::shared_ptr<InputTracer::EventState>& InputTracer::getState( Loading @@ -205,6 +216,12 @@ void InputTracer::EventState::onEventProcessingComplete() { for (const auto& event : events) { writeEventToBackend(event, *tracer.mBackend); } // Write all pending dispatch args to the trace. for (const auto& windowDispatchArgs : pendingDispatchArgs) { tracer.mBackend->traceWindowDispatch(windowDispatchArgs); } pendingDispatchArgs.clear(); isEventProcessingComplete = true; } Loading services/inputflinger/dispatcher/trace/InputTracer.h +4 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,8 @@ public: private: std::unique_ptr<InputTracingBackendInterface> mBackend; using WindowDispatchArgs = InputTracingBackendInterface::WindowDispatchArgs; // The state of a tracked event, shared across all events derived from the original event. struct EventState { explicit inline EventState(InputTracer& tracer) : tracer(tracer){}; Loading @@ -62,6 +64,8 @@ private: InputTracer& tracer; std::vector<const TracedEvent> events; bool isEventProcessingComplete{false}; // A queue to hold dispatch args from being traced until event processing is complete. std::vector<const WindowDispatchArgs> pendingDispatchArgs; // TODO(b/210460522): Add additional args for tracking event sensitivity and // dispatch target UIDs. }; Loading Loading
services/inputflinger/dispatcher/trace/InputTracer.cpp +21 −4 Original line number Diff line number Diff line Loading @@ -183,10 +183,21 @@ void InputTracer::traceEventDispatch(const DispatchEntry& dispatchEntry, const int32_t windowId = dispatchEntry.windowId.value_or(0); const int32_t vsyncId = dispatchEntry.windowId.has_value() ? dispatchEntry.vsyncId : 0; mBackend->traceWindowDispatch({std::move(traced), dispatchEntry.deliveryTime, dispatchEntry.resolvedFlags, dispatchEntry.targetUid, vsyncId, windowId, dispatchEntry.transform, dispatchEntry.rawTransform, /*hmac=*/{}, resolvedKeyRepeatCount}); const WindowDispatchArgs windowDispatchArgs{std::move(traced), dispatchEntry.deliveryTime, dispatchEntry.resolvedFlags, dispatchEntry.targetUid, vsyncId, windowId, dispatchEntry.transform, dispatchEntry.rawTransform, /*hmac=*/{}, resolvedKeyRepeatCount}; if (eventState->isEventProcessingComplete) { mBackend->traceWindowDispatch(std::move(windowDispatchArgs)); } else { eventState->pendingDispatchArgs.emplace_back(std::move(windowDispatchArgs)); } } std::shared_ptr<InputTracer::EventState>& InputTracer::getState( Loading @@ -205,6 +216,12 @@ void InputTracer::EventState::onEventProcessingComplete() { for (const auto& event : events) { writeEventToBackend(event, *tracer.mBackend); } // Write all pending dispatch args to the trace. for (const auto& windowDispatchArgs : pendingDispatchArgs) { tracer.mBackend->traceWindowDispatch(windowDispatchArgs); } pendingDispatchArgs.clear(); isEventProcessingComplete = true; } Loading
services/inputflinger/dispatcher/trace/InputTracer.h +4 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,8 @@ public: private: std::unique_ptr<InputTracingBackendInterface> mBackend; using WindowDispatchArgs = InputTracingBackendInterface::WindowDispatchArgs; // The state of a tracked event, shared across all events derived from the original event. struct EventState { explicit inline EventState(InputTracer& tracer) : tracer(tracer){}; Loading @@ -62,6 +64,8 @@ private: InputTracer& tracer; std::vector<const TracedEvent> events; bool isEventProcessingComplete{false}; // A queue to hold dispatch args from being traced until event processing is complete. std::vector<const WindowDispatchArgs> pendingDispatchArgs; // TODO(b/210460522): Add additional args for tracking event sensitivity and // dispatch target UIDs. }; Loading