@@ -37,6 +37,30 @@ inline auto getId(const trace::TracedEvent& v) {
3737 return std::visit ([](const auto & event) { return event.id ; }, v);
3838}
3939
40+ MotionEvent toInputEvent (
41+ const trace::TracedMotionEvent& e,
42+ const trace::InputTracingBackendInterface::WindowDispatchArgs& dispatchArgs,
43+ const std::array<uint8_t , 32 >& hmac) {
44+ MotionEvent traced;
45+ traced.initialize (e.id , e.deviceId , e.source , e.displayId , hmac, e.action , e.actionButton ,
46+ dispatchArgs.resolvedFlags , e.edgeFlags , e.metaState , e.buttonState ,
47+ e.classification , dispatchArgs.transform , e.xPrecision , e.yPrecision ,
48+ e.xCursorPosition , e.yCursorPosition , dispatchArgs.rawTransform , e.downTime ,
49+ e.eventTime , e.pointerProperties .size (), e.pointerProperties .data (),
50+ e.pointerCoords .data ());
51+ return traced;
52+ }
53+
54+ KeyEvent toInputEvent (const trace::TracedKeyEvent& e,
55+ const trace::InputTracingBackendInterface::WindowDispatchArgs& dispatchArgs,
56+ const std::array<uint8_t , 32 >& hmac) {
57+ KeyEvent traced;
58+ traced.initialize (e.id , e.deviceId , e.source , e.displayId , hmac, e.action ,
59+ dispatchArgs.resolvedFlags , e.keyCode , e.scanCode , e.metaState , e.repeatCount ,
60+ e.downTime , e.eventTime );
61+ return traced;
62+ }
63+
4064} // namespace
4165
4266// --- VerifyingTrace ---
@@ -55,6 +79,7 @@ void VerifyingTrace::verifyExpectedEventsTraced() {
5579 std::unique_lock lock (mLock );
5680 base::ScopedLockAssertion assumeLocked (mLock );
5781
82+ // Poll for all expected events to be traced, and keep track of the latest poll result.
5883 base::Result<void > result;
5984 mEventTracedCondition .wait_for (lock, TRACE_TIMEOUT, [&]() REQUIRES (mLock ) {
6085 for (const auto & [expectedEvent, windowId] : mExpectedEvents ) {
@@ -101,28 +126,55 @@ base::Result<void> VerifyingTrace::verifyEventTraced(const Event& expectedEvent,
101126 });
102127 if (tracedDispatchesIt == mTracedWindowDispatches .end ()) {
103128 msg << " Expected dispatch of event with ID 0x" << std::hex << expectedEvent.getId ()
104- << " to window with ID 0x" << expectedWindowId << " to be traced, but it was not."
105- << " \n Expected event: " << expectedEvent;
129+ << " to window with ID 0x" << expectedWindowId << " to be traced, but it was not.\n "
130+ << " Expected event: " << expectedEvent;
106131 return error (msg);
107132 }
108133
109- return {};
134+ // Verify that the traced event matches the expected event exactly.
135+ return std::visit (
136+ [&](const auto & traced) -> base::Result<void > {
137+ Event tracedEvent;
138+ using T = std::decay_t <decltype (traced)>;
139+ if constexpr (std::is_same_v<Event, MotionEvent> &&
140+ std::is_same_v<T, trace::TracedMotionEvent>) {
141+ tracedEvent =
142+ toInputEvent (traced, *tracedDispatchesIt, expectedEvent.getHmac ());
143+ } else if constexpr (std::is_same_v<Event, KeyEvent> &&
144+ std::is_same_v<T, trace::TracedKeyEvent>) {
145+ tracedEvent =
146+ toInputEvent (traced, *tracedDispatchesIt, expectedEvent.getHmac ());
147+ } else {
148+ msg << " Received the wrong event type!\n "
149+ << " Expected event: " << expectedEvent;
150+ return error (msg);
151+ }
152+
153+ const auto result = testing::internal::CmpHelperEQ (" expectedEvent" , " tracedEvent" ,
154+ expectedEvent, tracedEvent);
155+ if (!result) {
156+ msg << result.failure_message ();
157+ return error (msg);
158+ }
159+ return {};
160+ },
161+ tracedEventsIt->second );
110162}
111163
112164// --- FakeInputTracingBackend ---
113165
114166void FakeInputTracingBackend::traceKeyEvent (const trace::TracedKeyEvent& event) const {
115167 {
116168 std::scoped_lock lock (mTrace ->mLock );
117- mTrace ->mTracedEvents .emplace (event.id );
169+ mTrace ->mTracedEvents .emplace (event.id , event );
118170 }
119171 mTrace ->mEventTracedCondition .notify_all ();
120172}
121173
122174void FakeInputTracingBackend::traceMotionEvent (const trace::TracedMotionEvent& event) const {
123175 {
124176 std::scoped_lock lock (mTrace ->mLock );
125- mTrace ->mTracedEvents .emplace (event.id );
177+ mTrace ->mTracedEvents .emplace (event.id , event );
126178 }
127179 mTrace ->mEventTracedCondition .notify_all ();
128180}
0 commit comments