Loading services/inputflinger/dispatcher/CancelationOptions.h +29 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ #include "trace/EventTrackerInterface.h" #include <gui/WindowInfo.h> #include <input/Input.h> #include <bitset> #include <optional> Loading @@ -42,6 +43,9 @@ struct CancelationOptions { // Descriptive reason for the cancelation. const char* reason; // Target window for the cancelation if set. sp<gui::WindowInfoHandle> windowHandle = nullptr; // The specific keycode of the key event to cancel, or nullopt to cancel any key event. std::optional<int32_t> keyCode = std::nullopt; Loading @@ -59,6 +63,31 @@ struct CancelationOptions { explicit CancelationOptions(Mode mode, const char* reason, const std::unique_ptr<trace::EventTrackerInterface>& traceTracker) : mode(mode), reason(reason), traceTracker(traceTracker) {} explicit CancelationOptions(Mode mode, const char* reason, const sp<gui::WindowInfoHandle>& windowHandle, const std::unique_ptr<trace::EventTrackerInterface>& traceTracker) : mode(mode), reason(reason), windowHandle(windowHandle), traceTracker(traceTracker) {} explicit CancelationOptions(Mode mode, const char* reason, const sp<gui::WindowInfoHandle>& windowHandle, int32_t deviceId, const std::unique_ptr<trace::EventTrackerInterface>& traceTracker) : mode(mode), reason(reason), windowHandle(windowHandle), deviceId(deviceId), traceTracker(traceTracker) {} explicit CancelationOptions(Mode mode, const char* reason, const sp<gui::WindowInfoHandle>& windowHandle, int32_t deviceId, ui::LogicalDisplayId displayId, std::bitset<MAX_POINTER_ID + 1> pointerIds, const std::unique_ptr<trace::EventTrackerInterface>& traceTracker) : mode(mode), reason(reason), windowHandle(windowHandle), deviceId(deviceId), displayId(displayId), pointerIds(pointerIds), traceTracker(traceTracker) {} CancelationOptions(const CancelationOptions&) = delete; CancelationOptions operator=(const CancelationOptions&) = delete; }; Loading services/inputflinger/dispatcher/InputDispatcher.cpp +107 −115 File changed.Preview size limit exceeded, changes collapsed. Show changes services/inputflinger/dispatcher/InputDispatcher.h +21 −23 Original line number Diff line number Diff line Loading @@ -383,14 +383,6 @@ private: class DispatcherTouchState { public: struct CancellationArgs { const sp<gui::WindowInfoHandle> windowHandle; CancelationOptions::Mode mode; std::optional<DeviceId> deviceId{std::nullopt}; ui::LogicalDisplayId displayId{ui::LogicalDisplayId::INVALID}; std::bitset<MAX_POINTER_ID + 1> pointerIds{}; }; struct PointerDownArgs { const nsecs_t downTimeInTarget; const std::shared_ptr<Connection> connection; Loading Loading @@ -436,8 +428,10 @@ private: std::string dump() const; // Updates the touchState for display from WindowInfo, // returns list of CancellationArgs for every cancelled touch std::list<CancellationArgs> updateFromWindowInfo(ui::LogicalDisplayId displayId); // returns list of CancelationOptions for every cancelled touch std::list<CancelationOptions> updateFromWindowInfo( ui::LogicalDisplayId displayId, const std::unique_ptr<trace::EventTrackerInterface>& traceTracker); void removeAllPointersForDevice(DeviceId deviceId); Loading @@ -445,12 +439,14 @@ private: // pointers, list of cancelled windows and pointers on successful transfer. std::optional< std::tuple<sp<gui::WindowInfoHandle>, DeviceId, std::vector<PointerProperties>, std::list<CancellationArgs>, std::list<PointerDownArgs>>> std::list<CancelationOptions>, std::list<PointerDownArgs>>> transferTouchGesture(const sp<IBinder>& fromToken, const sp<IBinder>& toToken, bool transferEntireGesture); bool transferEntireGesture, const std::unique_ptr<trace::EventTrackerInterface>& traceTracker); base::Result<std::list<CancellationArgs>, status_t> pilferPointers( const sp<IBinder>& token, const Connection& requestingConnection); base::Result<std::list<CancelationOptions>, status_t> pilferPointers( const sp<IBinder>& token, const Connection& requestingConnection, const std::unique_ptr<trace::EventTrackerInterface>& traceTracker); void clear(); Loading Loading @@ -483,12 +479,13 @@ private: std::optional<std::tuple<TouchState&, TouchedWindow&, ui::LogicalDisplayId>> findTouchStateWindowAndDisplay(const sp<IBinder>& token); std::pair<std::list<CancellationArgs>, std::list<PointerDownArgs>> transferWallpaperTouch( std::pair<std::list<CancelationOptions>, std::list<PointerDownArgs>> transferWallpaperTouch( const sp<gui::WindowInfoHandle> fromWindowHandle, const sp<gui::WindowInfoHandle> toWindowHandle, TouchState& state, DeviceId deviceId, const std::vector<PointerProperties>& pointers, ftl::Flags<InputTarget::Flags> oldTargetFlags, ftl::Flags<InputTarget::Flags> newTargetFlags); ftl::Flags<InputTarget::Flags> newTargetFlags, const std::unique_ptr<trace::EventTrackerInterface>& traceTracker); void saveTouchStateForMotionEntry(const MotionEntry& entry, TouchState&& touchState); Loading @@ -504,11 +501,13 @@ private: // and false otherwise. bool isStylusActiveInDisplay(ui::LogicalDisplayId displayId) const; std::list<CancellationArgs> eraseRemovedWindowsFromWindowInfo( TouchState& state, ui::LogicalDisplayId displayId); std::list<CancelationOptions> eraseRemovedWindowsFromWindowInfo( TouchState& state, ui::LogicalDisplayId displayId, const std::unique_ptr<trace::EventTrackerInterface>& traceTracker); std::list<CancellationArgs> updateHoveringStateFromWindowInfo( TouchState& state, ui::LogicalDisplayId displayId); std::list<CancelationOptions> updateHoveringStateFromWindowInfo( TouchState& state, ui::LogicalDisplayId displayId, const std::unique_ptr<trace::EventTrackerInterface>& traceTracker); std::vector<InputTarget> findOutsideTargets(ui::LogicalDisplayId displayId, const sp<gui::WindowInfoHandle>& touchedWindow, Loading Loading @@ -864,12 +863,11 @@ private: void dispatchPointerDownOutsideFocus(uint32_t source, int32_t action, const sp<IBinder>& newToken) REQUIRES(mLock); void synthesizeCancelationEventsForAllConnectionsLocked(const CancelationOptions& options) void synthesizeCancelationEventsForAllConnectionsLocked(CancelationOptions&& options) REQUIRES(mLock); void synthesizeCancelationEventsForMonitorsLocked(const CancelationOptions& options) REQUIRES(mLock); void synthesizeCancelationEventsForWindowLocked(const sp<gui::WindowInfoHandle>&, const CancelationOptions&, void synthesizeCancelationEventsForWindowLocked(const CancelationOptions&, const std::shared_ptr<Connection>& = nullptr) REQUIRES(mLock); // This is a convenience function used to generate cancellation for a connection without having Loading Loading
services/inputflinger/dispatcher/CancelationOptions.h +29 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ #include "trace/EventTrackerInterface.h" #include <gui/WindowInfo.h> #include <input/Input.h> #include <bitset> #include <optional> Loading @@ -42,6 +43,9 @@ struct CancelationOptions { // Descriptive reason for the cancelation. const char* reason; // Target window for the cancelation if set. sp<gui::WindowInfoHandle> windowHandle = nullptr; // The specific keycode of the key event to cancel, or nullopt to cancel any key event. std::optional<int32_t> keyCode = std::nullopt; Loading @@ -59,6 +63,31 @@ struct CancelationOptions { explicit CancelationOptions(Mode mode, const char* reason, const std::unique_ptr<trace::EventTrackerInterface>& traceTracker) : mode(mode), reason(reason), traceTracker(traceTracker) {} explicit CancelationOptions(Mode mode, const char* reason, const sp<gui::WindowInfoHandle>& windowHandle, const std::unique_ptr<trace::EventTrackerInterface>& traceTracker) : mode(mode), reason(reason), windowHandle(windowHandle), traceTracker(traceTracker) {} explicit CancelationOptions(Mode mode, const char* reason, const sp<gui::WindowInfoHandle>& windowHandle, int32_t deviceId, const std::unique_ptr<trace::EventTrackerInterface>& traceTracker) : mode(mode), reason(reason), windowHandle(windowHandle), deviceId(deviceId), traceTracker(traceTracker) {} explicit CancelationOptions(Mode mode, const char* reason, const sp<gui::WindowInfoHandle>& windowHandle, int32_t deviceId, ui::LogicalDisplayId displayId, std::bitset<MAX_POINTER_ID + 1> pointerIds, const std::unique_ptr<trace::EventTrackerInterface>& traceTracker) : mode(mode), reason(reason), windowHandle(windowHandle), deviceId(deviceId), displayId(displayId), pointerIds(pointerIds), traceTracker(traceTracker) {} CancelationOptions(const CancelationOptions&) = delete; CancelationOptions operator=(const CancelationOptions&) = delete; }; Loading
services/inputflinger/dispatcher/InputDispatcher.cpp +107 −115 File changed.Preview size limit exceeded, changes collapsed. Show changes
services/inputflinger/dispatcher/InputDispatcher.h +21 −23 Original line number Diff line number Diff line Loading @@ -383,14 +383,6 @@ private: class DispatcherTouchState { public: struct CancellationArgs { const sp<gui::WindowInfoHandle> windowHandle; CancelationOptions::Mode mode; std::optional<DeviceId> deviceId{std::nullopt}; ui::LogicalDisplayId displayId{ui::LogicalDisplayId::INVALID}; std::bitset<MAX_POINTER_ID + 1> pointerIds{}; }; struct PointerDownArgs { const nsecs_t downTimeInTarget; const std::shared_ptr<Connection> connection; Loading Loading @@ -436,8 +428,10 @@ private: std::string dump() const; // Updates the touchState for display from WindowInfo, // returns list of CancellationArgs for every cancelled touch std::list<CancellationArgs> updateFromWindowInfo(ui::LogicalDisplayId displayId); // returns list of CancelationOptions for every cancelled touch std::list<CancelationOptions> updateFromWindowInfo( ui::LogicalDisplayId displayId, const std::unique_ptr<trace::EventTrackerInterface>& traceTracker); void removeAllPointersForDevice(DeviceId deviceId); Loading @@ -445,12 +439,14 @@ private: // pointers, list of cancelled windows and pointers on successful transfer. std::optional< std::tuple<sp<gui::WindowInfoHandle>, DeviceId, std::vector<PointerProperties>, std::list<CancellationArgs>, std::list<PointerDownArgs>>> std::list<CancelationOptions>, std::list<PointerDownArgs>>> transferTouchGesture(const sp<IBinder>& fromToken, const sp<IBinder>& toToken, bool transferEntireGesture); bool transferEntireGesture, const std::unique_ptr<trace::EventTrackerInterface>& traceTracker); base::Result<std::list<CancellationArgs>, status_t> pilferPointers( const sp<IBinder>& token, const Connection& requestingConnection); base::Result<std::list<CancelationOptions>, status_t> pilferPointers( const sp<IBinder>& token, const Connection& requestingConnection, const std::unique_ptr<trace::EventTrackerInterface>& traceTracker); void clear(); Loading Loading @@ -483,12 +479,13 @@ private: std::optional<std::tuple<TouchState&, TouchedWindow&, ui::LogicalDisplayId>> findTouchStateWindowAndDisplay(const sp<IBinder>& token); std::pair<std::list<CancellationArgs>, std::list<PointerDownArgs>> transferWallpaperTouch( std::pair<std::list<CancelationOptions>, std::list<PointerDownArgs>> transferWallpaperTouch( const sp<gui::WindowInfoHandle> fromWindowHandle, const sp<gui::WindowInfoHandle> toWindowHandle, TouchState& state, DeviceId deviceId, const std::vector<PointerProperties>& pointers, ftl::Flags<InputTarget::Flags> oldTargetFlags, ftl::Flags<InputTarget::Flags> newTargetFlags); ftl::Flags<InputTarget::Flags> newTargetFlags, const std::unique_ptr<trace::EventTrackerInterface>& traceTracker); void saveTouchStateForMotionEntry(const MotionEntry& entry, TouchState&& touchState); Loading @@ -504,11 +501,13 @@ private: // and false otherwise. bool isStylusActiveInDisplay(ui::LogicalDisplayId displayId) const; std::list<CancellationArgs> eraseRemovedWindowsFromWindowInfo( TouchState& state, ui::LogicalDisplayId displayId); std::list<CancelationOptions> eraseRemovedWindowsFromWindowInfo( TouchState& state, ui::LogicalDisplayId displayId, const std::unique_ptr<trace::EventTrackerInterface>& traceTracker); std::list<CancellationArgs> updateHoveringStateFromWindowInfo( TouchState& state, ui::LogicalDisplayId displayId); std::list<CancelationOptions> updateHoveringStateFromWindowInfo( TouchState& state, ui::LogicalDisplayId displayId, const std::unique_ptr<trace::EventTrackerInterface>& traceTracker); std::vector<InputTarget> findOutsideTargets(ui::LogicalDisplayId displayId, const sp<gui::WindowInfoHandle>& touchedWindow, Loading Loading @@ -864,12 +863,11 @@ private: void dispatchPointerDownOutsideFocus(uint32_t source, int32_t action, const sp<IBinder>& newToken) REQUIRES(mLock); void synthesizeCancelationEventsForAllConnectionsLocked(const CancelationOptions& options) void synthesizeCancelationEventsForAllConnectionsLocked(CancelationOptions&& options) REQUIRES(mLock); void synthesizeCancelationEventsForMonitorsLocked(const CancelationOptions& options) REQUIRES(mLock); void synthesizeCancelationEventsForWindowLocked(const sp<gui::WindowInfoHandle>&, const CancelationOptions&, void synthesizeCancelationEventsForWindowLocked(const CancelationOptions&, const std::shared_ptr<Connection>& = nullptr) REQUIRES(mLock); // This is a convenience function used to generate cancellation for a connection without having Loading