Use signals from RenderWidgetImpl to guide scheduling
The main aim of this patch is to add a bit into the scheduler so it
can know if there are any touch handlers that could possibly fire.
If there are none then we should /not/ expect a user gesture
(because expecting one may cause expensive loading and timer tasks
to get blocked).
BUG=510398, 544185
Review URL: https://codereview.chromium.org/1412713002
Cr-Commit-Position: refs/heads/master@{#355298}
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index 1210396..2ece707 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -22,6 +22,7 @@
#include "cc/debug/benchmark_instrumentation.h"
#include "cc/output/output_surface.h"
#include "cc/trees/layer_tree_host.h"
+#include "components/scheduler/renderer/render_widget_scheduling_state.h"
#include "components/scheduler/renderer/renderer_scheduler.h"
#include "content/child/npapi/webplugin.h"
#include "content/common/gpu/client/context_provider_command_buffer.h"
@@ -529,6 +530,15 @@
#if defined(OS_ANDROID)
text_input_info_history_.push_back(blink::WebTextInputInfo());
#endif
+
+ // In tests there may not be a RenderThreadImpl.
+ if (RenderThreadImpl::current()) {
+ render_widget_scheduling_state_ = RenderThreadImpl::current()
+ ->GetRendererScheduler()
+ ->NewRenderWidgetSchedulingState()
+ .Pass();
+ render_widget_scheduling_state_->SetHidden(is_hidden_);
+ }
}
RenderWidget::~RenderWidget() {
@@ -1830,6 +1840,9 @@
RenderThreadImpl::current()->WidgetHidden();
else
RenderThreadImpl::current()->WidgetRestored();
+
+ if (render_widget_scheduling_state_)
+ render_widget_scheduling_state_->SetHidden(hidden);
}
void RenderWidget::DidToggleFullscreen() {
@@ -2239,6 +2252,8 @@
}
void RenderWidget::hasTouchEventHandlers(bool has_handlers) {
+ if (render_widget_scheduling_state_)
+ render_widget_scheduling_state_->SetHasTouchHandler(has_handlers);
Send(new ViewHostMsg_HasTouchEventHandlers(routing_id_, has_handlers));
}