Index: content/browser/renderer_host/render_widget_host_impl.cc |
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc |
index fd5e142a65e0c9541368a7f55266e6af2c861e6b..1bd01c298353152e6f8c0bbde58ec9205dda8f59 100644 |
--- a/content/browser/renderer_host/render_widget_host_impl.cc |
+++ b/content/browser/renderer_host/render_widget_host_impl.cc |
@@ -662,9 +662,13 @@ void RenderWidgetHostImpl::StartHangMonitorTimeout(TimeDelta delay) { |
return; |
} |
- // Set time_when_considered_hung_ if it's null. |
+ // Set time_when_considered_hung_ if it's null. Otherwise, update |
+ // time_when_considered_hung_ if the caller's request is sooner than the |
+ // existing one. This will have the side effect that the existing timeout will |
+ // be forgotten. |
Time requested_end_time = Time::Now() + delay; |
- if (time_when_considered_hung_.is_null()) |
+ if (time_when_considered_hung_.is_null() || |
+ time_when_considered_hung_ > requested_end_time) |
time_when_considered_hung_ = requested_end_time; |
// If we already have a timer with the same or shorter duration, then we can |
@@ -879,7 +883,7 @@ void RenderWidgetHostImpl::ForwardInputEvent(const WebInputEvent& input_event, |
// after this line. |
next_mouse_move_.reset(); |
- in_flight_event_count_++; |
+ increment_in_flight_event_count(); |
StartHangMonitorTimeout( |
TimeDelta::FromMilliseconds(hung_renderer_delay_ms_)); |
} |
@@ -1321,7 +1325,7 @@ void RenderWidgetHostImpl::OnMsgInputEventAck(WebInputEvent::Type event_type, |
UMA_HISTOGRAM_TIMES("MPArch.RWH_InputEventDelta", delta); |
// Cancel pending hung renderer checks since the renderer is responsive. |
- if (--in_flight_event_count_ == 0) |
+ if (decrement_in_flight_event_count() == 0) |
StopHangMonitorTimeout(); |
int type = static_cast<int>(event_type); |