Chromium Code Reviews| Index: third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc |
| diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc b/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc |
| index 0d5d624c3473fbf9c57ddb54950c5c75b4a7da83..babc1940378cf168b81cf76bb013567ae0027b2c 100644 |
| --- a/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc |
| +++ b/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc |
| @@ -195,7 +195,8 @@ RendererSchedulerImpl::AnyThread::AnyThread() |
| begin_main_frame_on_critical_path(false), |
| last_gesture_was_compositor_driven(false), |
| default_gesture_prevented(true), |
| - have_seen_touchstart(false) {} |
| + have_seen_touchstart(false), |
| + waiting_for_meaningful_paint(false) {} |
| RendererSchedulerImpl::AnyThread::~AnyThread() {} |
| @@ -907,8 +908,8 @@ void RendererSchedulerImpl::UpdatePolicyLocked(UpdateType update_type) { |
| case UseCase::LOADING: |
| new_policy.rail_mode = v8::PERFORMANCE_LOAD; |
| - new_policy.loading_queue_policy.priority = TaskQueue::HIGH_PRIORITY; |
| - new_policy.default_queue_policy.priority = TaskQueue::HIGH_PRIORITY; |
| + // TODO(skyostil): Experiment with increasing loading and default queue |
| + // priorities. |
|
alex clarke (OOO till 29th)
2016/10/11 10:32:50
This is probably sensible for now. Presumably we'd
Sami
2016/10/12 04:21:40
Yeah, something like that might be interesting. Al
|
| break; |
| default: |
| @@ -1101,8 +1102,8 @@ RendererSchedulerImpl::UseCase RendererSchedulerImpl::ComputeCurrentUseCase( |
| } |
| } |
| - // TODO(alexclarke): return UseCase::LOADING if signals suggest the system is |
| - // in the initial 1s of RAIL loading. |
| + if (AnyThread().waiting_for_meaningful_paint) |
|
alex clarke (OOO till 29th)
2016/10/11 10:32:50
So until first meaningful paint, if the user isn't
Sami
2016/10/12 04:21:40
Right, this implementation of 'L' is very greedy i
|
| + return UseCase::LOADING; |
| return UseCase::NONE; |
| } |
| @@ -1249,6 +1250,8 @@ RendererSchedulerImpl::AsValueLocked(base::TimeTicks optional_now) const { |
| state->SetBoolean("renderer_hidden", MainThreadOnly().renderer_hidden); |
| state->SetBoolean("have_seen_a_begin_main_frame", |
| MainThreadOnly().have_seen_a_begin_main_frame); |
| + state->SetBoolean("waiting_for_meaningful_paint", |
| + AnyThread().waiting_for_meaningful_paint); |
| state->SetBoolean( |
| "have_reported_blocking_intervention_in_current_policy", |
| MainThreadOnly().have_reported_blocking_intervention_in_current_policy); |
| @@ -1263,10 +1266,6 @@ RendererSchedulerImpl::AsValueLocked(base::TimeTicks optional_now) const { |
| MainThreadOnly().timer_queue_suspend_count); |
| state->SetDouble("now", (optional_now - base::TimeTicks()).InMillisecondsF()); |
| state->SetDouble( |
| - "rails_loading_priority_deadline", |
| - (AnyThread().rails_loading_priority_deadline - base::TimeTicks()) |
| - .InMillisecondsF()); |
| - state->SetDouble( |
| "fling_compositor_escalation_deadline", |
| (AnyThread().fling_compositor_escalation_deadline - base::TimeTicks()) |
| .InMillisecondsF()); |
| @@ -1356,13 +1355,19 @@ void RendererSchedulerImpl::OnNavigationStarted() { |
| TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), |
| "RendererSchedulerImpl::OnNavigationStarted"); |
| base::AutoLock lock(any_thread_lock_); |
| - AnyThread().rails_loading_priority_deadline = |
| - helper_.scheduler_tqm_delegate()->NowTicks() + |
| - base::TimeDelta::FromMilliseconds( |
| - kRailsInitialLoadingPrioritizationMillis); |
| ResetForNavigationLocked(); |
| } |
| +void RendererSchedulerImpl::OnFirstMeaningfulPaint() { |
| + TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), |
| + "RendererSchedulerImpl::OnFirstMeaningfulPaint"); |
| + { |
| + base::AutoLock lock(any_thread_lock_); |
| + AnyThread().waiting_for_meaningful_paint = false; |
| + } |
| + UpdatePolicy(); |
| +} |
| + |
| void RendererSchedulerImpl::SuspendTimerQueueWhenBackgrounded() { |
| DCHECK(MainThreadOnly().renderer_backgrounded); |
| if (MainThreadOnly().timer_queue_suspended_when_backgrounded) |
| @@ -1386,6 +1391,7 @@ void RendererSchedulerImpl::ResetForNavigationLocked() { |
| any_thread_lock_.AssertAcquired(); |
| AnyThread().user_model.Reset(helper_.scheduler_tqm_delegate()->NowTicks()); |
| AnyThread().have_seen_touchstart = false; |
| + AnyThread().waiting_for_meaningful_paint = true; |
| MainThreadOnly().loading_task_cost_estimator.Clear(); |
| MainThreadOnly().timer_task_cost_estimator.Clear(); |
| MainThreadOnly().idle_time_estimator.Clear(); |