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 : |