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

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

Issue 2109843003: Adds enableVirtualTime and setVirtualTimePolicy To Emulation domain. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove frame iteration Created 4 years, 5 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 pending_resource_load_count_(0),
28 virtual_time_policy_(VirtualTimePolicy::ADVANCE),
27 page_visible_(true), 29 page_visible_(true),
28 disable_background_timer_throttling_(disable_background_timer_throttling), 30 disable_background_timer_throttling_(disable_background_timer_throttling),
29 allow_virtual_time_to_advance_(true) { 31 allow_virtual_time_to_advance_(true) {
30 renderer_scheduler->AddWebViewScheduler(this); 32 renderer_scheduler->AddWebViewScheduler(this);
31 } 33 }
32 34
33 WebViewSchedulerImpl::~WebViewSchedulerImpl() { 35 WebViewSchedulerImpl::~WebViewSchedulerImpl() {
34 // 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
35 // frame. 37 // frame.
36 for (WebFrameSchedulerImpl* frame_scheduler : frame_schedulers_) { 38 for (WebFrameSchedulerImpl* frame_scheduler : frame_schedulers_) {
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 return; 107 return;
106 108
107 allow_virtual_time_to_advance_ = allow_virtual_time_to_advance; 109 allow_virtual_time_to_advance_ = allow_virtual_time_to_advance;
108 110
109 if (virtual_time_domain_) { 111 if (virtual_time_domain_) {
110 virtual_time_domain_->SetCanAdvanceVirtualTime( 112 virtual_time_domain_->SetCanAdvanceVirtualTime(
111 allow_virtual_time_to_advance); 113 allow_virtual_time_to_advance);
112 } 114 }
113 } 115 }
114 116
117 bool WebViewSchedulerImpl::virtualTimeAllowedToAdvance() const {
118 return allow_virtual_time_to_advance_;
119 }
120
121 void WebViewSchedulerImpl::incrementPendingResourceLoadCount() {
122 pending_resource_load_count_++;
123
124 if (virtual_time_policy_ !=
125 VirtualTimePolicy::PAUSE_IF_NETWORK_FETCHES_PENDING) {
126 return;
127 }
128
129 if (pending_resource_load_count_ == 1)
130 setAllowVirtualTimeToAdvance(false);
131 }
132
133 void WebViewSchedulerImpl::decrementPendingResourceLoadCount() {
134 pending_resource_load_count_--;
135 DCHECK_GE(pending_resource_load_count_, 0);
136
137 if (virtual_time_policy_ !=
138 VirtualTimePolicy::PAUSE_IF_NETWORK_FETCHES_PENDING) {
139 return;
140 }
141
142 if (pending_resource_load_count_ == 0)
143 setAllowVirtualTimeToAdvance(true);
144 }
145
146 void WebViewSchedulerImpl::setVirtualTimePolicy(VirtualTimePolicy policy) {
147 virtual_time_policy_ = policy;
148
149 switch (virtual_time_policy_) {
150 case VirtualTimePolicy::ADVANCE:
151 setAllowVirtualTimeToAdvance(true);
152 break;
153
154 case VirtualTimePolicy::PAUSE:
155 setAllowVirtualTimeToAdvance(false);
156 break;
157
158 case VirtualTimePolicy::PAUSE_IF_NETWORK_FETCHES_PENDING:
159 setAllowVirtualTimeToAdvance(pending_resource_load_count_ == 0);
160 break;
161 }
162 }
163
115 } // namespace scheduler 164 } // namespace scheduler
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698