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 541be4368f2e2b61eef6e8885650703b658cc0d0..b6c3ecd8655f33d0f601f9a434f22fd5d3b8866e 100644 |
--- a/components/scheduler/renderer/web_frame_scheduler_impl.cc |
+++ b/components/scheduler/renderer/web_frame_scheduler_impl.cc |
@@ -7,6 +7,7 @@ |
#include "components/scheduler/base/real_time_domain.h" |
#include "components/scheduler/base/virtual_time_domain.h" |
#include "components/scheduler/child/web_task_runner_impl.h" |
+#include "components/scheduler/renderer/auto_advancing_virtual_time_domain.h" |
#include "components/scheduler/renderer/renderer_scheduler_impl.h" |
#include "components/scheduler/renderer/web_view_scheduler_impl.h" |
#include "third_party/WebKit/public/platform/WebString.h" |
@@ -42,19 +43,32 @@ void WebFrameSchedulerImpl::setFrameVisible(bool frame_visible) { |
} |
blink::WebTaskRunner* WebFrameSchedulerImpl::loadingTaskRunner() { |
+ DCHECK(parent_web_view_scheduler_); |
if (!loading_web_task_runner_) { |
loading_task_queue_ = |
renderer_scheduler_->NewLoadingTaskRunner("frame_loading_tq"); |
+ if (parent_web_view_scheduler_->virtual_time_domain()) { |
+ loading_task_queue_->SetTimeDomain( |
+ parent_web_view_scheduler_->virtual_time_domain()); |
+ loading_task_queue_->SetPumpPolicy( |
+ parent_web_view_scheduler_->GetVirtualTimePumpPolicy()); |
+ } |
loading_web_task_runner_.reset(new WebTaskRunnerImpl(loading_task_queue_)); |
} |
return loading_web_task_runner_.get(); |
} |
blink::WebTaskRunner* WebFrameSchedulerImpl::timerTaskRunner() { |
+ DCHECK(parent_web_view_scheduler_); |
if (!timer_web_task_runner_) { |
timer_task_queue_ = |
renderer_scheduler_->NewTimerTaskRunner("frame_timer_tq"); |
- if (!page_visible_) { |
+ if (parent_web_view_scheduler_->virtual_time_domain()) { |
+ timer_task_queue_->SetTimeDomain( |
+ parent_web_view_scheduler_->virtual_time_domain()); |
+ timer_task_queue_->SetPumpPolicy( |
+ parent_web_view_scheduler_->GetVirtualTimePumpPolicy()); |
+ } else if (!page_visible_) { |
renderer_scheduler_->throttling_helper()->IncreaseThrottleRefCount( |
timer_task_queue_.get()); |
} |
@@ -70,13 +84,16 @@ void WebFrameSchedulerImpl::setFrameOrigin( |
} |
void WebFrameSchedulerImpl::setPageVisible(bool page_visible) { |
+ DCHECK(parent_web_view_scheduler_); |
if (page_visible_ == page_visible) |
return; |
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( |
@@ -87,4 +104,40 @@ void WebFrameSchedulerImpl::setPageVisible(bool page_visible) { |
} |
} |
+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()); |
+ timer_task_queue_->SetPumpPolicy( |
+ parent_web_view_scheduler_->GetVirtualTimePumpPolicy()); |
+ } |
+ |
+ if (loading_task_queue_) { |
+ loading_task_queue_->SetTimeDomain( |
+ parent_web_view_scheduler_->virtual_time_domain()); |
+ loading_task_queue_->SetPumpPolicy( |
+ parent_web_view_scheduler_->GetVirtualTimePumpPolicy()); |
+ } |
+} |
+ |
+void WebFrameSchedulerImpl::OnVirtualTimePumpPolicyChanged() { |
+ if (!parent_web_view_scheduler_->virtual_time_domain()) |
+ return; |
+ |
+ if (timer_task_queue_) { |
+ timer_task_queue_->SetPumpPolicy( |
+ parent_web_view_scheduler_->GetVirtualTimePumpPolicy()); |
+ } |
+ |
+ if (loading_task_queue_) { |
+ loading_task_queue_->SetPumpPolicy( |
+ parent_web_view_scheduler_->GetVirtualTimePumpPolicy()); |
+ } |
+} |
+ |
} // namespace scheduler |