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 fa6a06c86d0821630db268290ca2b6f145301b08..8d158fcc5e6e21dff8ada450249467a6e78d5ecd 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 |
| @@ -219,6 +219,7 @@ RendererSchedulerImpl::MainThreadOnly::MainThreadOnly( |
| in_idle_period_for_testing(false), |
| use_virtual_time(false), |
| is_audio_playing(false), |
| + virtual_time_suspended(false), |
| rail_mode_observer(nullptr), |
| wake_up_budget_pool(nullptr), |
| task_duration_per_queue_type_histogram(base::Histogram::FactoryGet( |
| @@ -370,6 +371,8 @@ scoped_refptr<TaskQueue> RendererSchedulerImpl::NewTimerTaskQueue( |
| TimeDomainType::THROTTLED) { |
| task_queue_throttler_->IncreaseThrottleRefCount(timer_task_queue.get()); |
| } |
| + if (GetMainThreadOnly().virtual_time_suspended) |
|
altimin
2017/05/31 11:44:06
Is virtual_time_expired a better name?
alex clarke (OOO till 29th)
2017/05/31 15:11:36
virtual_time_paused is possibly the most accurate
alex clarke (OOO till 29th)
2017/05/31 16:48:48
I understand Alexander has a strong preference for
altimin
2017/05/31 16:51:24
Yes, it makes sense, thanks for the explanation.
|
| + timer_task_queue->InsertFence(TaskQueue::InsertFencePosition::NOW); |
| timer_task_queue->AddTaskObserver( |
| &GetMainThreadOnly().timer_task_cost_estimator); |
| AddQueueToWakeUpBudgetPool(timer_task_queue.get()); |
| @@ -1413,6 +1416,22 @@ void RendererSchedulerImpl::ResumeTimerQueue() { |
| ForceUpdatePolicy(); |
| } |
| +void RendererSchedulerImpl::InsertTimerFence() { |
| + GetMainThreadOnly().virtual_time_suspended = true; |
| + for (const auto& pair : timer_task_runners_) { |
| + DCHECK(!task_queue_throttler_->IsThrottled(pair.first.get())); |
|
altimin
2017/05/31 11:44:06
Also DCHECK for not having a fence already and vir
alex clarke (OOO till 29th)
2017/05/31 15:11:36
Done.
|
| + pair.first->InsertFence(TaskQueue::InsertFencePosition::NOW); |
| + } |
| +} |
| + |
| +void RendererSchedulerImpl::RemoveTimerFence() { |
| + GetMainThreadOnly().virtual_time_suspended = false; |
| + for (const auto& pair : timer_task_runners_) { |
| + DCHECK(!task_queue_throttler_->IsThrottled(pair.first.get())); |
| + pair.first->RemoveFence(); |
| + } |
| +} |
| + |
| void RendererSchedulerImpl::SetTimerQueueSuspensionWhenBackgroundedEnabled( |
| bool enabled) { |
| // Note that this will only take effect for the next backgrounded signal. |
| @@ -1527,6 +1546,8 @@ RendererSchedulerImpl::AsValueLocked(base::TimeTicks optional_now) const { |
| .timer_task_cost_estimator.expected_task_duration() |
| .InMillisecondsF()); |
| state->SetBoolean("is_audio_playing", GetMainThreadOnly().is_audio_playing); |
| + state->SetBoolean("virtual_time_suspended", |
| + GetMainThreadOnly().virtual_time_suspended); |
| state->BeginDictionary("web_view_schedulers"); |
| for (WebViewSchedulerImpl* web_view_scheduler : |