Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1151)

Unified Diff: content/browser/renderer_host/render_widget_host_impl.cc

Issue 938123003: Prevent hang monitor restarts when hidden (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Cleanup Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 f1cbc2a9bc2bad989f3eab13ed7a24ebd2fd4259..29ec4b7416ba4b8bfdbba64ce6c6ed13d53a2b1e 100644
--- a/content/browser/renderer_host/render_widget_host_impl.cc
+++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -160,7 +160,8 @@ RenderWidgetHostImpl::RenderWidgetHostImpl(RenderWidgetHostDelegate* delegate,
bool hidden)
: view_(NULL),
renderer_initialized_(false),
- hung_renderer_delay_ms_(kHungRendererDelayMs),
+ hung_renderer_delay_(
+ base::TimeDelta::FromMilliseconds(kHungRendererDelayMs)),
delegate_(delegate),
process_(process),
routing_id_(routing_id),
@@ -537,6 +538,11 @@ void RenderWidgetHostImpl::WasShown(const ui::LatencyInfo& latency_info) {
SendScreenRects();
+ // When hidden, timeout monitoring for input events is disabled. Restore it
+ // now to ensure consistent hang detection.
+ if (in_flight_event_count_)
+ RestartHangMonitorTimeout();
+
// Always repaint on restore.
bool needs_repainting = true;
needs_repainting_on_restore_ = false;
@@ -863,8 +869,7 @@ void RenderWidgetHostImpl::StartHangMonitorTimeout(base::TimeDelta delay) {
void RenderWidgetHostImpl::RestartHangMonitorTimeout() {
if (hang_monitor_timeout_)
- hang_monitor_timeout_->Restart(
- base::TimeDelta::FromMilliseconds(hung_renderer_delay_ms_));
+ hang_monitor_timeout_->Restart(hung_renderer_delay_);
}
void RenderWidgetHostImpl::StopHangMonitorTimeout() {
@@ -1210,6 +1215,7 @@ void RenderWidgetHostImpl::RendererExited(base::TerminationStatus status,
// Reset this to ensure the hung renderer mechanism is working properly.
in_flight_event_count_ = 0;
+ StopHangMonitorTimeout();
if (view_) {
GpuSurfaceTracker::Get()->SetSurfaceHandle(surface_id_,
@@ -1793,9 +1799,9 @@ InputEventAckState RenderWidgetHostImpl::FilterInputEvent(
}
void RenderWidgetHostImpl::IncrementInFlightEventCount() {
- StartHangMonitorTimeout(
- TimeDelta::FromMilliseconds(hung_renderer_delay_ms_));
increment_in_flight_event_count();
+ if (!is_hidden_)
+ StartHangMonitorTimeout(hung_renderer_delay_);
}
void RenderWidgetHostImpl::DecrementInFlightEventCount() {
@@ -1804,7 +1810,8 @@ void RenderWidgetHostImpl::DecrementInFlightEventCount() {
StopHangMonitorTimeout();
} else {
// The renderer is responsive, but there are in-flight events to wait for.
- RestartHangMonitorTimeout();
+ if (!is_hidden_)
+ RestartHangMonitorTimeout();
}
}
« no previous file with comments | « content/browser/renderer_host/render_widget_host_impl.h ('k') | content/browser/renderer_host/render_widget_host_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698