Loading services/inputflinger/dispatcher/Android.bp +4 −1 Original line number Diff line number Diff line Loading @@ -56,7 +56,9 @@ filegroup { cc_defaults { name: "libinputdispatcher_defaults", srcs: [":libinputdispatcher_sources"], srcs: [ ":libinputdispatcher_sources", ], shared_libs: [ "libbase", "libbinder", Loading @@ -78,6 +80,7 @@ cc_defaults { "libattestation", "libgui_window_info_static", "libperfetto_client_experimental", "perfetto_winscope_extensions_zero", ], target: { android: { Loading services/inputflinger/dispatcher/trace/InputTracingPerfettoBackend.cpp +11 −3 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ #include <android-base/logging.h> #include <binder/IServiceManager.h> #include <perfetto/trace/android/android_input_event.pbzero.h> #include <perfetto/trace/android/winscope_extensions.pbzero.h> #include <perfetto/trace/android/winscope_extensions_impl.pbzero.h> #include <private/android_filesystem_config.h> #include <utils/String16.h> Loading Loading @@ -229,7 +231,9 @@ void PerfettoBackend::traceMotionEvent(const TracedMotionEvent& event, } const bool isRedacted = traceLevel == TraceLevel::TRACE_LEVEL_REDACTED; auto tracePacket = ctx.NewTracePacket(); auto* inputEvent = tracePacket->set_android_input_event(); auto* winscopeExtensions = static_cast<perfetto::protos::pbzero::WinscopeExtensionsImpl*>( tracePacket->set_winscope_extensions()); auto* inputEvent = winscopeExtensions->set_android_input_event(); auto* dispatchMotion = isRedacted ? inputEvent->set_dispatcher_motion_event_redacted() : inputEvent->set_dispatcher_motion_event(); AndroidInputEventProtoConverter::toProtoMotionEvent(event, *dispatchMotion, isRedacted); Loading @@ -253,7 +257,9 @@ void PerfettoBackend::traceKeyEvent(const TracedKeyEvent& event, } const bool isRedacted = traceLevel == TraceLevel::TRACE_LEVEL_REDACTED; auto tracePacket = ctx.NewTracePacket(); auto* inputEvent = tracePacket->set_android_input_event(); auto* winscopeExtensions = static_cast<perfetto::protos::pbzero::WinscopeExtensionsImpl*>( tracePacket->set_winscope_extensions()); auto* inputEvent = winscopeExtensions->set_android_input_event(); auto* dispatchKey = isRedacted ? inputEvent->set_dispatcher_key_event_redacted() : inputEvent->set_dispatcher_key_event(); AndroidInputEventProtoConverter::toProtoKeyEvent(event, *dispatchKey, isRedacted); Loading @@ -277,7 +283,9 @@ void PerfettoBackend::traceWindowDispatch(const WindowDispatchArgs& dispatchArgs } const bool isRedacted = traceLevel == TraceLevel::TRACE_LEVEL_REDACTED; auto tracePacket = ctx.NewTracePacket(); auto* inputEvent = tracePacket->set_android_input_event(); auto* winscopeExtensions = static_cast<perfetto::protos::pbzero::WinscopeExtensionsImpl*>( tracePacket->set_winscope_extensions()); auto* inputEvent = winscopeExtensions->set_android_input_event(); auto* dispatchEvent = isRedacted ? inputEvent->set_dispatcher_window_dispatch_event_redacted() : inputEvent->set_dispatcher_window_dispatch_event(); Loading services/inputflinger/tests/InputTraceSession.cpp +42 −30 Original line number Diff line number Diff line Loading @@ -20,6 +20,9 @@ #include <android-base/logging.h> #include <gtest/gtest.h> #include <input/PrintTools.h> #include <perfetto/trace/android/android_input_event.pbzero.h> #include <perfetto/trace/android/winscope_extensions.pbzero.h> #include <perfetto/trace/android/winscope_extensions_impl.pbzero.h> #include <utility> Loading @@ -30,6 +33,8 @@ using perfetto::protos::pbzero::AndroidInputEventConfig; using perfetto::protos::pbzero::AndroidKeyEvent; using perfetto::protos::pbzero::AndroidMotionEvent; using perfetto::protos::pbzero::AndroidWindowInputDispatchEvent; using perfetto::protos::pbzero::WinscopeExtensions; using perfetto::protos::pbzero::WinscopeExtensionsImpl; // These operator<< definitions must be in the global namespace for them to be accessible to the // GTEST library. They cannot be in the anonymous namespace. Loading Loading @@ -85,11 +90,20 @@ auto decodeTrace(const std::string& rawTrace) { Trace::Decoder trace{rawTrace}; if (trace.has_packet()) { auto it = trace.packet(); while (it) { for (auto it = trace.packet(); it; it++) { TracePacket::Decoder packet{it->as_bytes()}; if (packet.has_android_input_event()) { AndroidInputEvent::Decoder event{packet.android_input_event()}; if (!packet.has_winscope_extensions()) { continue; } WinscopeExtensions::Decoder extensions{packet.winscope_extensions()}; const auto& field = extensions.Get(WinscopeExtensionsImpl::kAndroidInputEventFieldNumber); if (!field.valid()) { continue; } AndroidInputEvent::Decoder event{field.as_bytes()}; if (event.has_dispatcher_motion_event()) { tracedMotions.emplace_back(event.dispatcher_motion_event(), /*redacted=*/false); Loading @@ -116,8 +130,6 @@ auto decodeTrace(const std::string& rawTrace) { /*redacted=*/true); } } it++; } } return std::tuple{std::move(tracedMotions), std::move(tracedKeys), std::move(tracedWindowDispatches)}; Loading services/inputflinger/tests/InputTraceSession.h +0 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,6 @@ #include <gtest/gtest.h> #include <input/Input.h> #include <perfetto/config/android/android_input_event_config.pbzero.h> #include <perfetto/trace/android/android_input_event.pbzero.h> #include <perfetto/trace/trace.pbzero.h> #include <perfetto/tracing.h> #include <variant> Loading services/inputflinger/tests/InputTracingTest.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,8 @@ #include <gtest/gtest.h> #include <input/Input.h> #include <perfetto/trace/android/android_input_event.pbzero.h> #include <perfetto/trace/android/winscope_extensions.pbzero.h> #include <perfetto/trace/android/winscope_extensions_impl.pbzero.h> #include <perfetto/trace/trace.pbzero.h> #include <private/android_filesystem_config.h> #include <map> Loading Loading
services/inputflinger/dispatcher/Android.bp +4 −1 Original line number Diff line number Diff line Loading @@ -56,7 +56,9 @@ filegroup { cc_defaults { name: "libinputdispatcher_defaults", srcs: [":libinputdispatcher_sources"], srcs: [ ":libinputdispatcher_sources", ], shared_libs: [ "libbase", "libbinder", Loading @@ -78,6 +80,7 @@ cc_defaults { "libattestation", "libgui_window_info_static", "libperfetto_client_experimental", "perfetto_winscope_extensions_zero", ], target: { android: { Loading
services/inputflinger/dispatcher/trace/InputTracingPerfettoBackend.cpp +11 −3 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ #include <android-base/logging.h> #include <binder/IServiceManager.h> #include <perfetto/trace/android/android_input_event.pbzero.h> #include <perfetto/trace/android/winscope_extensions.pbzero.h> #include <perfetto/trace/android/winscope_extensions_impl.pbzero.h> #include <private/android_filesystem_config.h> #include <utils/String16.h> Loading Loading @@ -229,7 +231,9 @@ void PerfettoBackend::traceMotionEvent(const TracedMotionEvent& event, } const bool isRedacted = traceLevel == TraceLevel::TRACE_LEVEL_REDACTED; auto tracePacket = ctx.NewTracePacket(); auto* inputEvent = tracePacket->set_android_input_event(); auto* winscopeExtensions = static_cast<perfetto::protos::pbzero::WinscopeExtensionsImpl*>( tracePacket->set_winscope_extensions()); auto* inputEvent = winscopeExtensions->set_android_input_event(); auto* dispatchMotion = isRedacted ? inputEvent->set_dispatcher_motion_event_redacted() : inputEvent->set_dispatcher_motion_event(); AndroidInputEventProtoConverter::toProtoMotionEvent(event, *dispatchMotion, isRedacted); Loading @@ -253,7 +257,9 @@ void PerfettoBackend::traceKeyEvent(const TracedKeyEvent& event, } const bool isRedacted = traceLevel == TraceLevel::TRACE_LEVEL_REDACTED; auto tracePacket = ctx.NewTracePacket(); auto* inputEvent = tracePacket->set_android_input_event(); auto* winscopeExtensions = static_cast<perfetto::protos::pbzero::WinscopeExtensionsImpl*>( tracePacket->set_winscope_extensions()); auto* inputEvent = winscopeExtensions->set_android_input_event(); auto* dispatchKey = isRedacted ? inputEvent->set_dispatcher_key_event_redacted() : inputEvent->set_dispatcher_key_event(); AndroidInputEventProtoConverter::toProtoKeyEvent(event, *dispatchKey, isRedacted); Loading @@ -277,7 +283,9 @@ void PerfettoBackend::traceWindowDispatch(const WindowDispatchArgs& dispatchArgs } const bool isRedacted = traceLevel == TraceLevel::TRACE_LEVEL_REDACTED; auto tracePacket = ctx.NewTracePacket(); auto* inputEvent = tracePacket->set_android_input_event(); auto* winscopeExtensions = static_cast<perfetto::protos::pbzero::WinscopeExtensionsImpl*>( tracePacket->set_winscope_extensions()); auto* inputEvent = winscopeExtensions->set_android_input_event(); auto* dispatchEvent = isRedacted ? inputEvent->set_dispatcher_window_dispatch_event_redacted() : inputEvent->set_dispatcher_window_dispatch_event(); Loading
services/inputflinger/tests/InputTraceSession.cpp +42 −30 Original line number Diff line number Diff line Loading @@ -20,6 +20,9 @@ #include <android-base/logging.h> #include <gtest/gtest.h> #include <input/PrintTools.h> #include <perfetto/trace/android/android_input_event.pbzero.h> #include <perfetto/trace/android/winscope_extensions.pbzero.h> #include <perfetto/trace/android/winscope_extensions_impl.pbzero.h> #include <utility> Loading @@ -30,6 +33,8 @@ using perfetto::protos::pbzero::AndroidInputEventConfig; using perfetto::protos::pbzero::AndroidKeyEvent; using perfetto::protos::pbzero::AndroidMotionEvent; using perfetto::protos::pbzero::AndroidWindowInputDispatchEvent; using perfetto::protos::pbzero::WinscopeExtensions; using perfetto::protos::pbzero::WinscopeExtensionsImpl; // These operator<< definitions must be in the global namespace for them to be accessible to the // GTEST library. They cannot be in the anonymous namespace. Loading Loading @@ -85,11 +90,20 @@ auto decodeTrace(const std::string& rawTrace) { Trace::Decoder trace{rawTrace}; if (trace.has_packet()) { auto it = trace.packet(); while (it) { for (auto it = trace.packet(); it; it++) { TracePacket::Decoder packet{it->as_bytes()}; if (packet.has_android_input_event()) { AndroidInputEvent::Decoder event{packet.android_input_event()}; if (!packet.has_winscope_extensions()) { continue; } WinscopeExtensions::Decoder extensions{packet.winscope_extensions()}; const auto& field = extensions.Get(WinscopeExtensionsImpl::kAndroidInputEventFieldNumber); if (!field.valid()) { continue; } AndroidInputEvent::Decoder event{field.as_bytes()}; if (event.has_dispatcher_motion_event()) { tracedMotions.emplace_back(event.dispatcher_motion_event(), /*redacted=*/false); Loading @@ -116,8 +130,6 @@ auto decodeTrace(const std::string& rawTrace) { /*redacted=*/true); } } it++; } } return std::tuple{std::move(tracedMotions), std::move(tracedKeys), std::move(tracedWindowDispatches)}; Loading
services/inputflinger/tests/InputTraceSession.h +0 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,6 @@ #include <gtest/gtest.h> #include <input/Input.h> #include <perfetto/config/android/android_input_event_config.pbzero.h> #include <perfetto/trace/android/android_input_event.pbzero.h> #include <perfetto/trace/trace.pbzero.h> #include <perfetto/tracing.h> #include <variant> Loading
services/inputflinger/tests/InputTracingTest.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,8 @@ #include <gtest/gtest.h> #include <input/Input.h> #include <perfetto/trace/android/android_input_event.pbzero.h> #include <perfetto/trace/android/winscope_extensions.pbzero.h> #include <perfetto/trace/android/winscope_extensions_impl.pbzero.h> #include <perfetto/trace/trace.pbzero.h> #include <private/android_filesystem_config.h> #include <map> Loading