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 da4e80b30b6fdcd2655f330e39d74d0bfb386137..0a9122f5502064f94b66d6ac0463b176c9590c15 100644 |
--- a/components/scheduler/renderer/web_view_scheduler_impl.cc |
+++ b/components/scheduler/renderer/web_view_scheduler_impl.cc |
@@ -25,6 +25,7 @@ WebViewSchedulerImpl::WebViewSchedulerImpl( |
web_view_(web_view), |
renderer_scheduler_(renderer_scheduler), |
virtual_time_policy_(VirtualTimePolicy::ADVANCE), |
+ background_parser_count_(0), |
page_visible_(true), |
disable_background_timer_throttling_(disable_background_timer_throttling), |
allow_virtual_time_to_advance_(true) { |
@@ -119,26 +120,23 @@ bool WebViewSchedulerImpl::virtualTimeAllowedToAdvance() const { |
void WebViewSchedulerImpl::DidStartLoading(unsigned long identifier) { |
pending_loads_.insert(identifier); |
- |
- if (virtual_time_policy_ != |
- VirtualTimePolicy::PAUSE_IF_NETWORK_FETCHES_PENDING) { |
- return; |
- } |
- |
- if (pending_loads_.size() == 1u) |
- setAllowVirtualTimeToAdvance(false); |
+ ApplyVirtualTimePolicy(); |
} |
void WebViewSchedulerImpl::DidStopLoading(unsigned long identifier) { |
pending_loads_.erase(identifier); |
+ ApplyVirtualTimePolicy(); |
+} |
- if (virtual_time_policy_ != |
- VirtualTimePolicy::PAUSE_IF_NETWORK_FETCHES_PENDING) { |
- return; |
- } |
+void WebViewSchedulerImpl::IncrementBackgroundParserCount() { |
+ background_parser_count_++; |
+ ApplyVirtualTimePolicy(); |
+} |
- if (pending_loads_.size() == 0) |
- setAllowVirtualTimeToAdvance(true); |
+void WebViewSchedulerImpl::DecrementBackgroundParserCount() { |
+ background_parser_count_--; |
+ DCHECK_GE(background_parser_count_, 0); |
+ ApplyVirtualTimePolicy(); |
} |
void WebViewSchedulerImpl::setVirtualTimePolicy(VirtualTimePolicy policy) { |
@@ -153,10 +151,19 @@ void WebViewSchedulerImpl::setVirtualTimePolicy(VirtualTimePolicy policy) { |
setAllowVirtualTimeToAdvance(false); |
break; |
- case VirtualTimePolicy::PAUSE_IF_NETWORK_FETCHES_PENDING: |
- setAllowVirtualTimeToAdvance(pending_loads_.size() == 0); |
+ case VirtualTimePolicy::DETERMINISTIC_LOADING: |
+ ApplyVirtualTimePolicy(); |
break; |
} |
} |
+void WebViewSchedulerImpl::ApplyVirtualTimePolicy() { |
+ if (virtual_time_policy_ != VirtualTimePolicy::DETERMINISTIC_LOADING) { |
+ return; |
+ } |
+ |
+ setAllowVirtualTimeToAdvance(pending_loads_.size() == 0 && |
+ background_parser_count_ == 0); |
+} |
+ |
} // namespace scheduler |