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

Unified Diff: components/scheduler/renderer/renderer_scheduler_impl.cc

Issue 1368643002: Add a signal to the scheduler that a navigation is expected (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 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: 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..e852d91413ca0f65e5863630a87ff8d8b5c08691 100644
--- a/components/scheduler/renderer/renderer_scheduler_impl.cc
+++ b/components/scheduler/renderer/renderer_scheduler_impl.cc
@@ -116,7 +116,8 @@ RendererSchedulerImpl::MainThreadOnly::MainThreadOnly()
RendererSchedulerImpl::MainThreadOnly::~MainThreadOnly() {}
RendererSchedulerImpl::AnyThread::AnyThread()
- : awaiting_touch_start_response(false),
+ : navigation_expected(false),
+ awaiting_touch_start_response(false),
in_idle_period(false),
begin_main_frame_on_critical_path(false) {}
@@ -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 (AnyThread().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,7 @@ RendererSchedulerImpl::AsValueLocked(base::TimeTicks optional_now) const {
"rails_loading_priority_deadline",
(AnyThread().rails_loading_priority_deadline - base::TimeTicks())
.InMillisecondsF());
+ state->SetBoolean("navigation_expected", AnyThread().navigation_expected);
state->SetDouble("last_idle_period_end_time",
(AnyThread().last_idle_period_end_time - base::TimeTicks())
.InMillisecondsF());
@@ -811,9 +817,21 @@ void RendererSchedulerImpl::OnIdlePeriodEnded() {
UpdatePolicyLocked(UpdateType::MAY_EARLY_OUT_IF_POLICY_UNCHANGED);
}
-void RendererSchedulerImpl::OnPageLoadStarted() {
+void RendererSchedulerImpl::OnNavigationExpected() {
+ base::AutoLock lock(any_thread_lock_);
Sami 2015/09/24 14:15:04 nit: helper_.CheckOnValidThread();
alex clarke (OOO till 29th) 2015/09/24 14:53:10 Done.
+ AnyThread().navigation_expected = true;
+ UpdatePolicyLocked(UpdateType::MAY_EARLY_OUT_IF_POLICY_UNCHANGED);
+}
+
+void RendererSchedulerImpl::OnNavigationCanceled() {
+ base::AutoLock lock(any_thread_lock_);
Sami 2015/09/24 14:15:04 Ditto.
alex clarke (OOO till 29th) 2015/09/24 14:53:10 Done.
+ AnyThread().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 +872,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());
+ AnyThread().navigation_expected = false;
AnyThread().user_model.Reset();
MainThreadOnly().have_seen_a_begin_main_frame = false;
UpdatePolicyLocked(UpdateType::MAY_EARLY_OUT_IF_POLICY_UNCHANGED);

Powered by Google App Engine
This is Rietveld 408576698