Index: content/browser/renderer_host/input/render_widget_host_latency_tracker.cc |
diff --git a/content/browser/renderer_host/input/render_widget_host_latency_tracker.cc b/content/browser/renderer_host/input/render_widget_host_latency_tracker.cc |
index 625e8d371e5fe14b770404a1193e5dcdeed492c3..5c4f789315389acc924a718f744c2dab60c54059 100644 |
--- a/content/browser/renderer_host/input/render_widget_host_latency_tracker.cc |
+++ b/content/browser/renderer_host/input/render_widget_host_latency_tracker.cc |
@@ -339,7 +339,7 @@ RenderWidgetHostLatencyTracker::RenderWidgetHostLatencyTracker() |
latency_component_id_(0), |
device_scale_factor_(1), |
has_seen_first_gesture_scroll_update_(false), |
- multi_finger_gesture_(false), |
+ active_multi_finger_gesture_(false), |
touch_start_default_prevented_(false), |
render_widget_host_delegate_(nullptr) {} |
@@ -375,6 +375,9 @@ void RenderWidgetHostLatencyTracker::ComputeInputLatencyHistograms( |
} |
DCHECK_EQ(rwh_component.event_count, 1u); |
+ bool multi_finger_touch_gesture = |
+ WebInputEvent::isTouchEventType(type) && active_multi_finger_gesture_; |
+ |
LatencyInfo::LatencyComponent ui_component; |
if (latency.FindLatency(ui::INPUT_EVENT_LATENCY_UI_COMPONENT, 0, |
&ui_component)) { |
@@ -407,7 +410,7 @@ void RenderWidgetHostLatencyTracker::ComputeInputLatencyHistograms( |
if (latency.FindLatency(ui::INPUT_EVENT_LATENCY_RENDERER_MAIN_COMPONENT, 0, |
&main_component)) { |
DCHECK_EQ(main_component.event_count, 1u); |
- if (!multi_finger_gesture_) { |
+ if (!multi_finger_touch_gesture) { |
UMA_HISTOGRAM_INPUT_LATENCY_MILLISECONDS( |
"Event.Latency.QueueingTime." + event_name + default_action_status, |
rwh_component, main_component); |
@@ -418,7 +421,7 @@ void RenderWidgetHostLatencyTracker::ComputeInputLatencyHistograms( |
if (latency.FindLatency(ui::INPUT_EVENT_LATENCY_ACK_RWH_COMPONENT, 0, |
&acked_component)) { |
DCHECK_EQ(acked_component.event_count, 1u); |
- if (!multi_finger_gesture_ && |
+ if (!multi_finger_touch_gesture && |
main_component.event_time != base::TimeTicks()) { |
UMA_HISTOGRAM_INPUT_LATENCY_MILLISECONDS( |
"Event.Latency.BlockingTime." + event_name + default_action_status, |
@@ -438,6 +441,14 @@ void RenderWidgetHostLatencyTracker::OnInputEvent( |
const blink::WebInputEvent& event, |
LatencyInfo* latency) { |
DCHECK(latency); |
+ |
+ if (event.type() == WebInputEvent::TouchStart) { |
+ const WebTouchEvent& touch_event = |
+ *static_cast<const WebTouchEvent*>(&event); |
+ DCHECK(touch_event.touchesLength >= 1); |
+ active_multi_finger_gesture_ = touch_event.touchesLength != 1; |
+ } |
+ |
if (latency->FindLatency(ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, |
latency_component_id_, NULL)) { |
return; |
@@ -508,10 +519,11 @@ void RenderWidgetHostLatencyTracker::OnInputEventAck( |
const WebTouchEvent& touch_event = |
*static_cast<const WebTouchEvent*>(&event); |
if (event.type() == WebInputEvent::TouchStart) { |
- DCHECK(touch_event.touchesLength >= 1); |
- multi_finger_gesture_ = touch_event.touchesLength != 1; |
touch_start_default_prevented_ = |
ack_result == INPUT_EVENT_ACK_STATE_CONSUMED; |
+ } else if (event.type() == WebInputEvent::TouchEnd || |
+ event.type() == WebInputEvent::TouchCancel) { |
+ active_multi_finger_gesture_ = touch_event.touchesLength > 2; |
} |
} |