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..5d21f94187a6ba9e9aa0dabff4b204d45a07b27b 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" |
@@ -20,11 +21,12 @@ WebViewSchedulerImpl::WebViewSchedulerImpl( |
blink::WebView* web_view, |
RendererSchedulerImpl* renderer_scheduler, |
bool disable_background_timer_throttling) |
- : web_view_(web_view), |
+ : virtual_time_pump_policy_(TaskQueue::PumpPolicy::AUTO), |
+ 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 +37,8 @@ WebViewSchedulerImpl::~WebViewSchedulerImpl() { |
frame_scheduler->DetachFromWebViewScheduler(); |
} |
renderer_scheduler_->RemoveWebViewScheduler(this); |
+ if (virtual_time_domain_) |
+ renderer_scheduler_->UnregisterTimeDomain(virtual_time_domain_.get()); |
} |
void WebViewSchedulerImpl::setPageVisible(bool page_visible) { |
@@ -76,4 +80,44 @@ void WebViewSchedulerImpl::AddConsoleWarning(const std::string& message) { |
web_view_->mainFrame()->addMessageToConsole(console_message); |
} |
+void WebViewSchedulerImpl::enableVirtualTime() { |
+ // 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->OnVirtualTimeDomainChanged(); |
+ } |
+} |
+ |
+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; |
+ |
+ if (virtual_time_domain_) { |
+ virtual_time_domain_->SetCanAdvanceVirtualTime( |
+ allow_virtual_time_to_advance); |
+ } |
+ |
+ for (WebFrameSchedulerImpl* frame_scheduler : frame_schedulers_) { |
+ frame_scheduler->OnVirtualTimePumpPolicyChanged(); |
+ } |
+} |
+ |
+TaskQueue::PumpPolicy WebViewSchedulerImpl::GetVirtualTimePumpPolicy() const { |
+ return allow_virtual_time_to_advance_ ? TaskQueue::PumpPolicy::AUTO |
+ : TaskQueue::PumpPolicy::MANUAL; |
+} |
+ |
} // namespace scheduler |