Optimize IPC for non-cancelable touch events (#35785)

* The cancelable feature is optimized. If the cancelable feature is a non-cancelable feature, no message is sent back to the Compositor.
Add a warning log when prevent TouchsequenceInfo cannot be found.

Signed-off-by: kongbai1996 <1782765876@qq.com>

* fix Clippy Error Reported in the Pipeline.

Signed-off-by: kongbai1996 <1782765876@qq.com>

---------

Signed-off-by: kongbai1996 <1782765876@qq.com>
This commit is contained in:
Bi Fuguo 2025-03-04 14:46:25 +08:00 committed by GitHub
parent ff5683680f
commit f594691af9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 9 additions and 2 deletions

View file

@ -1396,7 +1396,8 @@ impl IOCompositor {
if !self
.touch_handler
.is_handling_touch_move(self.touch_handler.current_sequence_id) &&
self.send_touch_event(event)
self.send_touch_event(event) &&
event.is_cancelable()
{
self.touch_handler
.set_handling_touch_move(self.touch_handler.current_sequence_id, true);

View file

@ -229,12 +229,16 @@ impl TouchHandler {
pub(crate) fn prevent_click(&mut self, sequence_id: TouchSequenceId) {
if let Some(sequence) = self.touch_sequence_map.get_mut(&sequence_id) {
sequence.prevent_click = true;
} else {
warn!("TouchSequenceInfo corresponding to the sequence number has been deleted.");
}
}
pub(crate) fn prevent_move(&mut self, sequence_id: TouchSequenceId) {
if let Some(sequence) = self.touch_sequence_map.get_mut(&sequence_id) {
sequence.prevent_move = TouchMoveAllowed::Prevented;
} else {
warn!("TouchSequenceInfo corresponding to the sequence number has been deleted.");
}
}

View file

@ -1095,7 +1095,9 @@ impl ScriptThread {
InputEvent::Touch(touch_event) => {
let touch_result =
document.handle_touch_event(touch_event, event.hit_test_result, can_gc);
if let TouchEventResult::Processed(handled) = touch_result {
if let (TouchEventResult::Processed(handled), true) =
(touch_result, touch_event.is_cancelable())
{
let sequence_id = touch_event.expect_sequence_id();
let result = if handled {
script_traits::TouchEventResult::DefaultAllowed(