Index: components/scheduler/renderer/renderer_scheduler_impl.cc |
diff --git a/components/scheduler/renderer/renderer_scheduler_impl.cc b/components/scheduler/renderer/renderer_scheduler_impl.cc |
index 98e4209c0eec07e99c79b8d2b299f3bd16f28598..55efbf6f810b7c0654fe31fb73698781ec5f746c 100644 |
--- a/components/scheduler/renderer/renderer_scheduler_impl.cc |
+++ b/components/scheduler/renderer/renderer_scheduler_impl.cc |
@@ -127,7 +127,8 @@ RendererSchedulerImpl::MainThreadOnly::MainThreadOnly( |
touchstart_expected_soon(false), |
have_seen_a_begin_main_frame(false), |
has_visible_render_widget_with_touch_handler(false), |
- begin_frame_not_expected_soon(false) {} |
+ begin_frame_not_expected_soon(false), |
+ expensive_task_blocking_allowed(true) {} |
RendererSchedulerImpl::MainThreadOnly::~MainThreadOnly() {} |
@@ -718,6 +719,11 @@ void RendererSchedulerImpl::UpdatePolicyLocked(UpdateType update_type) { |
NOTREACHED(); |
} |
+ if (!MainThreadOnly().expensive_task_blocking_allowed) { |
+ block_expensive_loading_tasks = false; |
+ block_expensive_timer_tasks = false; |
+ } |
+ |
// Don't block expensive tasks unless we have actually seen something. |
if (!MainThreadOnly().have_seen_a_begin_main_frame) { |
block_expensive_loading_tasks = false; |
@@ -1083,6 +1089,10 @@ void RendererSchedulerImpl::UnregisterTimeDomain(TimeDomain* time_domain) { |
helper_.UnregisterTimeDomain(time_domain); |
} |
+void RendererSchedulerImpl::SetExpensiveTaskBlockingAllowed(bool allowed) { |
+ MainThreadOnly().expensive_task_blocking_allowed = allowed; |
+} |
+ |
base::TickClock* RendererSchedulerImpl::tick_clock() const { |
return helper_.scheduler_tqm_delegate().get(); |
} |