Chromium Code Reviews| Index: components/scheduler/renderer/web_view_scheduler_impl.cc |
| diff --git a/components/scheduler/renderer/web_view_scheduler_impl.cc b/components/scheduler/renderer/web_view_scheduler_impl.cc |
| index 3e7785b0842fb5ea6ed60c44306091359d0e4876..fe8e5488cad6ffa2d484a4fafcbdc3380d7c50c8 100644 |
| --- a/components/scheduler/renderer/web_view_scheduler_impl.cc |
| +++ b/components/scheduler/renderer/web_view_scheduler_impl.cc |
| @@ -7,6 +7,7 @@ |
| #include "base/logging.h" |
| #include "components/scheduler/base/virtual_time_domain.h" |
| #include "components/scheduler/child/scheduler_tqm_delegate.h" |
| +#include "components/scheduler/renderer/auto_advancing_virtual_time_domain.h" |
| #include "components/scheduler/renderer/renderer_scheduler_impl.h" |
| #include "components/scheduler/renderer/web_frame_scheduler_impl.h" |
| #include "third_party/WebKit/public/platform/WebFrameScheduler.h" |
| @@ -23,8 +24,8 @@ WebViewSchedulerImpl::WebViewSchedulerImpl( |
| : web_view_(web_view), |
| renderer_scheduler_(renderer_scheduler), |
| page_visible_(true), |
| - disable_background_timer_throttling_( |
| - disable_background_timer_throttling) { |
| + disable_background_timer_throttling_(disable_background_timer_throttling), |
| + allow_virtual_time_to_advance_(true) { |
| renderer_scheduler->AddWebViewScheduler(this); |
| } |
| @@ -35,6 +36,8 @@ WebViewSchedulerImpl::~WebViewSchedulerImpl() { |
| frame_scheduler->DetachFromWebViewScheduler(); |
| } |
| renderer_scheduler_->RemoveWebViewScheduler(this); |
| + if (virtual_time_domain_.get()) |
| + renderer_scheduler_->UnregisterTimeDomain(virtual_time_domain_.get()); |
| } |
| void WebViewSchedulerImpl::setPageVisible(bool page_visible) { |
| @@ -76,4 +79,39 @@ void WebViewSchedulerImpl::AddConsoleWarning(const std::string& message) { |
| web_view_->mainFrame()->addMessageToConsole(console_message); |
| } |
| +void WebViewSchedulerImpl::useVirtualTime() { |
| + // If we've already switched to virtual time then we don't need to do |
| + // anything more. |
| + if (virtual_time_domain_.get()) |
| + return; |
| + |
| + virtual_time_domain_.reset(new AutoAdvancingVirtualTimeDomain( |
| + renderer_scheduler_->tick_clock()->NowTicks())); |
| + renderer_scheduler_->RegisterTimeDomain(virtual_time_domain_.get()); |
| + |
| + virtual_time_domain_->SetCanAdvanceVirtualTime( |
| + allow_virtual_time_to_advance_); |
| + |
| + for (WebFrameSchedulerImpl* frame_scheduler : frame_schedulers_) { |
| + frame_scheduler->UseVirtualTime(virtual_time_domain_.get()); |
| + } |
| +} |
| + |
| +void WebViewSchedulerImpl::setAllowVirtualTimeToAdvance( |
| + bool allow_virtual_time_to_advance) { |
| + if (allow_virtual_time_to_advance_ == allow_virtual_time_to_advance) |
| + return; |
| + |
| + allow_virtual_time_to_advance_ = allow_virtual_time_to_advance; |
| + |
| + for (WebFrameSchedulerImpl* frame_scheduler : frame_schedulers_) { |
| + frame_scheduler->SetCanAdvanceVirtualTime(allow_virtual_time_to_advance); |
| + } |
| + |
| + if (virtual_time_domain_.get()) { |
|
Sami
2016/02/01 11:15:07
Should we DCHECK(virtual_time_domain_) instead? If
alex clarke (OOO till 29th)
2016/02/01 14:16:54
But it doesn't fail :) See line 92
|
| + virtual_time_domain_->SetCanAdvanceVirtualTime( |
| + allow_virtual_time_to_advance); |
| + } |
| +} |
| + |
| } // namespace scheduler |