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 4ab4c11c570b329381533f53069073ab19c9eb29..48f565c02f6d4df15209c2cf8034ecd53850a7e3 100644 |
--- a/components/scheduler/renderer/web_view_scheduler_impl.cc |
+++ b/components/scheduler/renderer/web_view_scheduler_impl.cc |
@@ -24,6 +24,8 @@ WebViewSchedulerImpl::WebViewSchedulerImpl( |
: virtual_time_pump_policy_(TaskQueue::PumpPolicy::AUTO), |
web_view_(web_view), |
renderer_scheduler_(renderer_scheduler), |
+ pending_resource_load_count_(0), |
+ virtual_time_policy_(VirtualTimePolicy::ADVANCE), |
page_visible_(true), |
disable_background_timer_throttling_(disable_background_timer_throttling), |
allow_virtual_time_to_advance_(true) { |
@@ -112,4 +114,51 @@ void WebViewSchedulerImpl::setAllowVirtualTimeToAdvance( |
} |
} |
+bool WebViewSchedulerImpl::virtualTimeAllowedToAdvance() const { |
+ return allow_virtual_time_to_advance_; |
+} |
+ |
+void WebViewSchedulerImpl::incrementPendingResourceLoadCount() { |
+ pending_resource_load_count_++; |
+ |
+ if (virtual_time_policy_ != |
+ VirtualTimePolicy::PAUSE_IF_NETWORK_FETCHES_PENDING) { |
+ return; |
+ } |
+ |
+ if (pending_resource_load_count_ == 1) |
+ setAllowVirtualTimeToAdvance(false); |
+} |
+ |
+void WebViewSchedulerImpl::decrementPendingResourceLoadCount() { |
+ pending_resource_load_count_--; |
+ DCHECK_GE(pending_resource_load_count_, 0); |
+ |
+ if (virtual_time_policy_ != |
+ VirtualTimePolicy::PAUSE_IF_NETWORK_FETCHES_PENDING) { |
+ return; |
+ } |
+ |
+ if (pending_resource_load_count_ == 0) |
+ setAllowVirtualTimeToAdvance(true); |
+} |
+ |
+void WebViewSchedulerImpl::setVirtualTimePolicy(VirtualTimePolicy policy) { |
+ virtual_time_policy_ = policy; |
+ |
+ switch (virtual_time_policy_) { |
+ case VirtualTimePolicy::ADVANCE: |
+ setAllowVirtualTimeToAdvance(true); |
+ break; |
+ |
+ case VirtualTimePolicy::PAUSE: |
+ setAllowVirtualTimeToAdvance(false); |
+ break; |
+ |
+ case VirtualTimePolicy::PAUSE_IF_NETWORK_FETCHES_PENDING: |
+ setAllowVirtualTimeToAdvance(pending_resource_load_count_ == 0); |
+ break; |
+ } |
+} |
+ |
} // namespace scheduler |