Index: components/scheduler/renderer/web_frame_scheduler_impl.cc |
diff --git a/components/scheduler/renderer/web_frame_scheduler_impl.cc b/components/scheduler/renderer/web_frame_scheduler_impl.cc |
index cbf66774a3fc3df49a0498a85e224bf4d3d2f0bd..d6a6ca6eafc50742bddb84c38fb7fa99e9cb66f7 100644 |
--- a/components/scheduler/renderer/web_frame_scheduler_impl.cc |
+++ b/components/scheduler/renderer/web_frame_scheduler_impl.cc |
@@ -61,6 +61,10 @@ |
loading_task_queue_ = |
renderer_scheduler_->NewLoadingTaskRunner("frame_loading_tq"); |
loading_task_queue_->SetBlameContext(blame_context_); |
+ if (parent_web_view_scheduler_->virtual_time_domain()) { |
+ loading_task_queue_->SetTimeDomain( |
+ parent_web_view_scheduler_->virtual_time_domain()); |
+ } |
loading_web_task_runner_.reset(new WebTaskRunnerImpl(loading_task_queue_)); |
} |
return loading_web_task_runner_.get(); |
@@ -72,7 +76,10 @@ |
timer_task_queue_ = |
renderer_scheduler_->NewTimerTaskRunner("frame_timer_tq"); |
timer_task_queue_->SetBlameContext(blame_context_); |
- if (!page_visible_) { |
+ if (parent_web_view_scheduler_->virtual_time_domain()) { |
+ timer_task_queue_->SetTimeDomain( |
+ parent_web_view_scheduler_->virtual_time_domain()); |
+ } else if (!page_visible_) { |
renderer_scheduler_->throttling_helper()->IncreaseThrottleRefCount( |
timer_task_queue_.get()); |
} |
@@ -87,6 +94,10 @@ |
unthrottled_task_queue_ = |
renderer_scheduler_->NewUnthrottledTaskRunner("frame_unthrottled_tq"); |
unthrottled_task_queue_->SetBlameContext(blame_context_); |
+ if (parent_web_view_scheduler_->virtual_time_domain()) { |
+ unthrottled_task_queue_->SetTimeDomain( |
+ parent_web_view_scheduler_->virtual_time_domain()); |
+ } |
unthrottled_web_task_runner_.reset( |
new WebTaskRunnerImpl(unthrottled_task_queue_)); |
} |
@@ -122,8 +133,10 @@ |
page_visible_ = page_visible; |
- if (!timer_web_task_runner_) |
+ if (!timer_web_task_runner_ || |
+ parent_web_view_scheduler_->virtual_time_domain()) { |
return; |
+ } |
if (page_visible_) { |
renderer_scheduler_->throttling_helper()->DecreaseThrottleRefCount( |
@@ -134,4 +147,21 @@ |
} |
} |
+void WebFrameSchedulerImpl::OnVirtualTimeDomainChanged() { |
+ DCHECK(parent_web_view_scheduler_); |
+ DCHECK(parent_web_view_scheduler_->virtual_time_domain()); |
+ |
+ if (timer_task_queue_) { |
+ renderer_scheduler_->throttling_helper()->UnregisterTaskQueue( |
+ timer_task_queue_.get()); |
+ timer_task_queue_->SetTimeDomain( |
+ parent_web_view_scheduler_->virtual_time_domain()); |
+ } |
+ |
+ if (loading_task_queue_) { |
+ loading_task_queue_->SetTimeDomain( |
+ parent_web_view_scheduler_->virtual_time_domain()); |
+ } |
+} |
+ |
} // namespace scheduler |