| 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..8d663ced688e91b390fc176d6e2722a6b0e4c426 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 and throttling rendering frame rate.
|
| 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)
|
| + 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();
|
|
|