| 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..a989e7d42ab115a88cb035732ae0d7f0b590e3b5 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) {
|
| @@ -154,9 +152,19 @@ void WebViewSchedulerImpl::setVirtualTimePolicy(VirtualTimePolicy policy) {
|
| break;
|
|
|
| case VirtualTimePolicy::PAUSE_IF_NETWORK_FETCHES_PENDING:
|
| - setAllowVirtualTimeToAdvance(pending_loads_.size() == 0);
|
| + ApplyVirtualTimePolicy();
|
| break;
|
| }
|
| }
|
|
|
| +void WebViewSchedulerImpl::ApplyVirtualTimePolicy() {
|
| + if (virtual_time_policy_ !=
|
| + VirtualTimePolicy::PAUSE_IF_NETWORK_FETCHES_PENDING) {
|
| + return;
|
| + }
|
| +
|
| + setAllowVirtualTimeToAdvance(pending_loads_.size() == 0 &&
|
| + background_parser_count_ == 0);
|
| +}
|
| +
|
| } // namespace scheduler
|
|
|