Chromium Code Reviews| 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 bb5dc7224f7cbf2650d316d3e55060fae20b09b2..6aa24a7a46b04fd7b7df099bf2f238b7edecf0c6 100644 |
| --- a/components/scheduler/renderer/renderer_scheduler_impl.cc |
| +++ b/components/scheduler/renderer/renderer_scheduler_impl.cc |
| @@ -111,7 +111,8 @@ RendererSchedulerImpl::MainThreadOnly::MainThreadOnly() |
| loading_tasks_seem_expensive(false), |
| timer_tasks_seem_expensive(false), |
| touchstart_expected_soon(false), |
| - have_seen_a_begin_main_frame(false) {} |
| + have_seen_a_begin_main_frame(false), |
| + navigation_expected(false) {} |
| RendererSchedulerImpl::MainThreadOnly::~MainThreadOnly() {} |
| @@ -593,6 +594,10 @@ void RendererSchedulerImpl::UpdatePolicyLocked(UpdateType update_type) { |
| if (!MainThreadOnly().have_seen_a_begin_main_frame) |
| block_expensive_tasks = false; |
| + // Don't block expensive tasks if we are expecting a navigation. |
| + if (MainThreadOnly().navigation_expected) |
| + block_expensive_tasks = false; |
| + |
| if (block_expensive_tasks && loading_tasks_seem_expensive) |
| new_policy.loading_queue_priority = TaskQueue::DISABLED_PRIORITY; |
| @@ -769,6 +774,8 @@ RendererSchedulerImpl::AsValueLocked(base::TimeTicks optional_now) const { |
| "rails_loading_priority_deadline", |
| (AnyThread().rails_loading_priority_deadline - base::TimeTicks()) |
| .InMillisecondsF()); |
| + state->SetBoolean("navigation_expected", |
| + MainThreadOnly().navigation_expected); |
| state->SetDouble("last_idle_period_end_time", |
| (AnyThread().last_idle_period_end_time - base::TimeTicks()) |
| .InMillisecondsF()); |
| @@ -811,9 +818,23 @@ void RendererSchedulerImpl::OnIdlePeriodEnded() { |
| UpdatePolicyLocked(UpdateType::MAY_EARLY_OUT_IF_POLICY_UNCHANGED); |
| } |
| -void RendererSchedulerImpl::OnPageLoadStarted() { |
| +void RendererSchedulerImpl::OnNavigationExpected() { |
| + helper_.CheckOnValidThread(); |
| + base::AutoLock lock(any_thread_lock_); |
|
Sami
2015/09/24 15:16:15
nit: Just call UpdatePolicy() to avoid some boiler
alex clarke (OOO till 29th)
2015/09/24 15:37:14
Done.
|
| + MainThreadOnly().navigation_expected = true; |
| + UpdatePolicyLocked(UpdateType::MAY_EARLY_OUT_IF_POLICY_UNCHANGED); |
| +} |
| + |
| +void RendererSchedulerImpl::OnNavigationCanceled() { |
| + helper_.CheckOnValidThread(); |
| + base::AutoLock lock(any_thread_lock_); |
|
Sami
2015/09/24 15:16:15
Ditto.
alex clarke (OOO till 29th)
2015/09/24 15:37:14
Done.
|
| + MainThreadOnly().navigation_expected = false; |
| + UpdatePolicyLocked(UpdateType::MAY_EARLY_OUT_IF_POLICY_UNCHANGED); |
| +} |
| + |
| +void RendererSchedulerImpl::OnNavigationStarted() { |
| TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), |
| - "RendererSchedulerImpl::OnPageLoadStarted"); |
| + "RendererSchedulerImpl::OnNavigationStarted"); |
| base::AutoLock lock(any_thread_lock_); |
| AnyThread().rails_loading_priority_deadline = |
| helper_.Now() + base::TimeDelta::FromMilliseconds( |
| @@ -854,6 +875,7 @@ void RendererSchedulerImpl::ResetForNavigationLocked() { |
| // Make sure that we don't initially assume there is no idle time. |
| MainThreadOnly().short_idle_period_duration.InsertSample( |
| cc::BeginFrameArgs::DefaultInterval()); |
| + MainThreadOnly().navigation_expected = false; |
| AnyThread().user_model.Reset(); |
| MainThreadOnly().have_seen_a_begin_main_frame = false; |
| UpdatePolicyLocked(UpdateType::MAY_EARLY_OUT_IF_POLICY_UNCHANGED); |