@@ -418,7 +418,7 @@ std::unique_ptr<DispatchEntry> createDispatchEntry(const IdGenerator& idGenerato
418418 if (inputTarget.useDefaultPointerTransform () && !zeroCoords) {
419419 const ui::Transform& transform = inputTarget.getDefaultPointerTransform ();
420420 return std::make_unique<DispatchEntry>(eventEntry, inputTargetFlags, transform,
421- inputTarget.displayTransform ,
421+ inputTarget.rawTransform ,
422422 inputTarget.globalScaleFactor , uid, vsyncId,
423423 windowId);
424424 }
@@ -439,7 +439,7 @@ std::unique_ptr<DispatchEntry> createDispatchEntry(const IdGenerator& idGenerato
439439 transform =
440440 &inputTarget.getTransformForPointer (firstMarkedBit (inputTarget.getPointerIds ()));
441441 const ui::Transform inverseTransform = transform->inverse ();
442- displayTransform = &inputTarget.displayTransform ;
442+ displayTransform = &inputTarget.rawTransform ;
443443
444444 // Iterate through all pointers in the event to normalize against the first.
445445 for (size_t i = 0 ; i < motionEntry.getPointerCount (); i++) {
@@ -929,15 +929,15 @@ InputTarget createInputTarget(const std::shared_ptr<Connection>& connection,
929929 const sp<android::gui::WindowInfoHandle>& windowHandle,
930930 InputTarget::DispatchMode dispatchMode,
931931 ftl::Flags<InputTarget::Flags> targetFlags,
932- const ui::Transform& displayTransform ,
932+ const ui::Transform& rawTransform ,
933933 std::optional<nsecs_t > firstDownTimeInTarget) {
934934 LOG_ALWAYS_FATAL_IF (connection == nullptr );
935935 InputTarget inputTarget{connection};
936936 inputTarget.windowHandle = windowHandle;
937937 inputTarget.dispatchMode = dispatchMode;
938938 inputTarget.flags = targetFlags;
939939 inputTarget.globalScaleFactor = windowHandle->getInfo ()->globalScaleFactor ;
940- inputTarget.displayTransform = displayTransform ;
940+ inputTarget.rawTransform = rawTransform ;
941941 inputTarget.firstDownTimeInTarget = firstDownTimeInTarget;
942942 return inputTarget;
943943}
@@ -3013,11 +3013,10 @@ void InputDispatcher::addWindowTargetLocked(const sp<WindowInfoHandle>& windowHa
30133013 windowHandle->getName ().c_str ());
30143014 return ;
30153015 }
3016- inputTargets.push_back (createInputTarget (connection, windowHandle, dispatchMode,
3017- targetFlags,
3018- mWindowInfos .getDisplayTransform (
3019- windowHandle->getInfo ()->displayId ),
3020- firstDownTimeInTarget));
3016+ inputTargets.push_back (
3017+ createInputTarget (connection, windowHandle, dispatchMode, targetFlags,
3018+ mWindowInfos .getRawTransform (*windowHandle->getInfo ()),
3019+ firstDownTimeInTarget));
30213020 it = inputTargets.end () - 1 ;
30223021 }
30233022
@@ -3068,11 +3067,10 @@ void InputDispatcher::addPointerWindowTargetLocked(
30683067 windowHandle->getName ().c_str ());
30693068 return ;
30703069 }
3071- inputTargets.push_back (createInputTarget (connection, windowHandle, dispatchMode,
3072- targetFlags,
3073- mWindowInfos .getDisplayTransform (
3074- windowHandle->getInfo ()->displayId ),
3075- firstDownTimeInTarget));
3070+ inputTargets.push_back (
3071+ createInputTarget (connection, windowHandle, dispatchMode, targetFlags,
3072+ mWindowInfos .getRawTransform (*windowHandle->getInfo ()),
3073+ firstDownTimeInTarget));
30763074 it = inputTargets.end () - 1 ;
30773075 }
30783076
@@ -3104,9 +3102,10 @@ void InputDispatcher::addGlobalMonitoringTargetsLocked(std::vector<InputTarget>&
31043102 for (const Monitor& monitor : selectResponsiveMonitorsLocked (monitorsIt->second )) {
31053103 InputTarget target{monitor.connection };
31063104 // target.firstDownTimeInTarget is not set for global monitors. It is only required in split
3107- // touch and global monitoring works as intended even without setting firstDownTimeInTarget
3108- target.displayTransform = mWindowInfos .getDisplayTransform (displayId);
3109- target.setDefaultPointerTransform (target.displayTransform );
3105+ // touch and global monitoring works as intended even without setting firstDownTimeInTarget.
3106+ // Since global monitors don't have windows, use the display transform as the raw transform.
3107+ target.rawTransform = mWindowInfos .getDisplayTransform (displayId);
3108+ target.setDefaultPointerTransform (target.rawTransform );
31103109 inputTargets.push_back (target);
31113110 }
31123111}
@@ -4291,9 +4290,10 @@ void InputDispatcher::synthesizeCancelationEventsForConnectionLocked(
42914290 motionEntry.downTime , targets);
42924291 } else {
42934292 targets.emplace_back (fallbackTarget);
4293+ // Since we don't have a window, use the display transform as the raw transform.
42944294 const ui::Transform displayTransform =
42954295 mWindowInfos .getDisplayTransform (motionEntry.displayId );
4296- targets.back ().displayTransform = displayTransform;
4296+ targets.back ().rawTransform = displayTransform;
42974297 targets.back ().setDefaultPointerTransform (displayTransform);
42984298 }
42994299 logOutboundMotionDetails (" cancel - " , motionEntry);
@@ -4376,9 +4376,10 @@ void InputDispatcher::synthesizePointerDownEventsForConnectionLocked(
43764376 targets);
43774377 } else {
43784378 targets.emplace_back (connection, targetFlags);
4379+ // Since we don't have a window, use the display transform as the raw transform.
43794380 const ui::Transform displayTransform =
43804381 mWindowInfos .getDisplayTransform (motionEntry.displayId );
4381- targets.back ().displayTransform = displayTransform;
4382+ targets.back ().rawTransform = displayTransform;
43824383 targets.back ().setDefaultPointerTransform (displayTransform);
43834384 }
43844385 logOutboundMotionDetails (" down - " , motionEntry);
@@ -5289,6 +5290,16 @@ ui::Transform InputDispatcher::DispatcherWindowInfo::getDisplayTransform(
52895290 : kIdentityTransform ;
52905291}
52915292
5293+ ui::Transform InputDispatcher::DispatcherWindowInfo::getRawTransform (
5294+ const android::gui::WindowInfo& windowInfo) const {
5295+ // If the window has a cloneLayerStackTransform, always use it as the transform for the "getRaw"
5296+ // APIs. If not, fall back to using the DisplayInfo transform of the window's display.
5297+ return (input_flags::use_cloned_screen_coordinates_as_raw () &&
5298+ windowInfo.cloneLayerStackTransform )
5299+ ? *windowInfo.cloneLayerStackTransform
5300+ : getDisplayTransform (windowInfo.displayId );
5301+ }
5302+
52925303std::string InputDispatcher::DispatcherWindowInfo::dumpDisplayAndWindowInfo () const {
52935304 std::string dump;
52945305 if (!mWindowHandlesByDisplay .empty ()) {
@@ -6567,9 +6578,8 @@ void InputDispatcher::doDispatchCycleFinishedCommand(nsecs_t finishTime,
65676578 createInputTarget (connection, windowHandle,
65686579 InputTarget::DispatchMode::AS_IS,
65696580 dispatchEntry->targetFlags ,
6570- mWindowInfos .getDisplayTransform (
6571- windowHandle->getInfo ()
6572- ->displayId ),
6581+ mWindowInfos .getRawTransform (
6582+ *windowHandle->getInfo ()),
65736583 downTime));
65746584 }
65756585 }
0 commit comments