Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(92)

Side by Side Diff: components/scheduler/renderer/web_view_scheduler_impl.cc

Issue 2192493002: Let blink scheduler know when background parsing a document (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix some test failures Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/scheduler/renderer/web_view_scheduler_impl.h" 5 #include "components/scheduler/renderer/web_view_scheduler_impl.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "components/scheduler/base/virtual_time_domain.h" 8 #include "components/scheduler/base/virtual_time_domain.h"
9 #include "components/scheduler/child/scheduler_tqm_delegate.h" 9 #include "components/scheduler/child/scheduler_tqm_delegate.h"
10 #include "components/scheduler/renderer/auto_advancing_virtual_time_domain.h" 10 #include "components/scheduler/renderer/auto_advancing_virtual_time_domain.h"
11 #include "components/scheduler/renderer/renderer_scheduler_impl.h" 11 #include "components/scheduler/renderer/renderer_scheduler_impl.h"
12 #include "components/scheduler/renderer/web_frame_scheduler_impl.h" 12 #include "components/scheduler/renderer/web_frame_scheduler_impl.h"
13 #include "third_party/WebKit/public/platform/WebFrameScheduler.h" 13 #include "third_party/WebKit/public/platform/WebFrameScheduler.h"
14 #include "third_party/WebKit/public/web/WebConsoleMessage.h" 14 #include "third_party/WebKit/public/web/WebConsoleMessage.h"
15 #include "third_party/WebKit/public/web/WebFrame.h" 15 #include "third_party/WebKit/public/web/WebFrame.h"
16 #include "third_party/WebKit/public/web/WebView.h" 16 #include "third_party/WebKit/public/web/WebView.h"
17 17
18 namespace scheduler { 18 namespace scheduler {
19 19
20 WebViewSchedulerImpl::WebViewSchedulerImpl( 20 WebViewSchedulerImpl::WebViewSchedulerImpl(
21 blink::WebView* web_view, 21 blink::WebView* web_view,
22 RendererSchedulerImpl* renderer_scheduler, 22 RendererSchedulerImpl* renderer_scheduler,
23 bool disable_background_timer_throttling) 23 bool disable_background_timer_throttling)
24 : virtual_time_pump_policy_(TaskQueue::PumpPolicy::AUTO), 24 : virtual_time_pump_policy_(TaskQueue::PumpPolicy::AUTO),
25 web_view_(web_view), 25 web_view_(web_view),
26 renderer_scheduler_(renderer_scheduler), 26 renderer_scheduler_(renderer_scheduler),
27 virtual_time_policy_(VirtualTimePolicy::ADVANCE), 27 virtual_time_policy_(VirtualTimePolicy::ADVANCE),
28 background_parser_count_(0),
28 page_visible_(true), 29 page_visible_(true),
29 disable_background_timer_throttling_(disable_background_timer_throttling), 30 disable_background_timer_throttling_(disable_background_timer_throttling),
30 allow_virtual_time_to_advance_(true) { 31 allow_virtual_time_to_advance_(true) {
31 renderer_scheduler->AddWebViewScheduler(this); 32 renderer_scheduler->AddWebViewScheduler(this);
32 } 33 }
33 34
34 WebViewSchedulerImpl::~WebViewSchedulerImpl() { 35 WebViewSchedulerImpl::~WebViewSchedulerImpl() {
35 // TODO(alexclarke): Find out why we can't rely on the web view outliving the 36 // TODO(alexclarke): Find out why we can't rely on the web view outliving the
36 // frame. 37 // frame.
37 for (WebFrameSchedulerImpl* frame_scheduler : frame_schedulers_) { 38 for (WebFrameSchedulerImpl* frame_scheduler : frame_schedulers_) {
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 allow_virtual_time_to_advance); 113 allow_virtual_time_to_advance);
113 } 114 }
114 } 115 }
115 116
116 bool WebViewSchedulerImpl::virtualTimeAllowedToAdvance() const { 117 bool WebViewSchedulerImpl::virtualTimeAllowedToAdvance() const {
117 return allow_virtual_time_to_advance_; 118 return allow_virtual_time_to_advance_;
118 } 119 }
119 120
120 void WebViewSchedulerImpl::DidStartLoading(unsigned long identifier) { 121 void WebViewSchedulerImpl::DidStartLoading(unsigned long identifier) {
121 pending_loads_.insert(identifier); 122 pending_loads_.insert(identifier);
122 123 ApplyVirtualTimePolicy();
123 if (virtual_time_policy_ !=
124 VirtualTimePolicy::PAUSE_IF_NETWORK_FETCHES_PENDING) {
125 return;
126 }
127
128 if (pending_loads_.size() == 1u)
129 setAllowVirtualTimeToAdvance(false);
130 } 124 }
131 125
132 void WebViewSchedulerImpl::DidStopLoading(unsigned long identifier) { 126 void WebViewSchedulerImpl::DidStopLoading(unsigned long identifier) {
133 pending_loads_.erase(identifier); 127 pending_loads_.erase(identifier);
128 ApplyVirtualTimePolicy();
129 }
134 130
135 if (virtual_time_policy_ != 131 void WebViewSchedulerImpl::IncrementBackgroundParserCount() {
136 VirtualTimePolicy::PAUSE_IF_NETWORK_FETCHES_PENDING) { 132 background_parser_count_++;
137 return; 133 ApplyVirtualTimePolicy();
138 } 134 }
139 135
140 if (pending_loads_.size() == 0) 136 void WebViewSchedulerImpl::DecrementBackgroundParserCount() {
141 setAllowVirtualTimeToAdvance(true); 137 background_parser_count_--;
138 DCHECK_GE(background_parser_count_, 0);
139 ApplyVirtualTimePolicy();
142 } 140 }
143 141
144 void WebViewSchedulerImpl::setVirtualTimePolicy(VirtualTimePolicy policy) { 142 void WebViewSchedulerImpl::setVirtualTimePolicy(VirtualTimePolicy policy) {
145 virtual_time_policy_ = policy; 143 virtual_time_policy_ = policy;
146 144
147 switch (virtual_time_policy_) { 145 switch (virtual_time_policy_) {
148 case VirtualTimePolicy::ADVANCE: 146 case VirtualTimePolicy::ADVANCE:
149 setAllowVirtualTimeToAdvance(true); 147 setAllowVirtualTimeToAdvance(true);
150 break; 148 break;
151 149
152 case VirtualTimePolicy::PAUSE: 150 case VirtualTimePolicy::PAUSE:
153 setAllowVirtualTimeToAdvance(false); 151 setAllowVirtualTimeToAdvance(false);
154 break; 152 break;
155 153
156 case VirtualTimePolicy::PAUSE_IF_NETWORK_FETCHES_PENDING: 154 case VirtualTimePolicy::DETERMINISTIC_LOADING:
157 setAllowVirtualTimeToAdvance(pending_loads_.size() == 0); 155 ApplyVirtualTimePolicy();
158 break; 156 break;
159 } 157 }
160 } 158 }
161 159
160 void WebViewSchedulerImpl::ApplyVirtualTimePolicy() {
161 if (virtual_time_policy_ != VirtualTimePolicy::DETERMINISTIC_LOADING) {
162 return;
163 }
164
165 setAllowVirtualTimeToAdvance(pending_loads_.size() == 0 &&
166 background_parser_count_ == 0);
167 }
168
162 } // namespace scheduler 169 } // namespace scheduler
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698