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

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

Issue 2246493002: Revert of Change VirtualTimePolicy::PAUSE_IF_NETWORK_FETCHES_PENDING (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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/real_time_domain.h"
9 #include "components/scheduler/base/virtual_time_domain.h" 8 #include "components/scheduler/base/virtual_time_domain.h"
10 #include "components/scheduler/child/scheduler_tqm_delegate.h" 9 #include "components/scheduler/child/scheduler_tqm_delegate.h"
11 #include "components/scheduler/renderer/auto_advancing_virtual_time_domain.h" 10 #include "components/scheduler/renderer/auto_advancing_virtual_time_domain.h"
12 #include "components/scheduler/renderer/renderer_scheduler_impl.h" 11 #include "components/scheduler/renderer/renderer_scheduler_impl.h"
13 #include "components/scheduler/renderer/web_frame_scheduler_impl.h" 12 #include "components/scheduler/renderer/web_frame_scheduler_impl.h"
14 #include "third_party/WebKit/public/platform/WebFrameScheduler.h" 13 #include "third_party/WebKit/public/platform/WebFrameScheduler.h"
15 #include "third_party/WebKit/public/web/WebConsoleMessage.h" 14 #include "third_party/WebKit/public/web/WebConsoleMessage.h"
16 #include "third_party/WebKit/public/web/WebFrame.h" 15 #include "third_party/WebKit/public/web/WebFrame.h"
17 #include "third_party/WebKit/public/web/WebView.h" 16 #include "third_party/WebKit/public/web/WebView.h"
18 17
19 namespace scheduler { 18 namespace scheduler {
20 19
21 WebViewSchedulerImpl::WebViewSchedulerImpl( 20 WebViewSchedulerImpl::WebViewSchedulerImpl(
22 blink::WebView* web_view, 21 blink::WebView* web_view,
23 RendererSchedulerImpl* renderer_scheduler, 22 RendererSchedulerImpl* renderer_scheduler,
24 bool disable_background_timer_throttling) 23 bool disable_background_timer_throttling)
25 : web_view_(web_view), 24 : virtual_time_pump_policy_(TaskQueue::PumpPolicy::AUTO),
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 background_parser_count_(0),
29 page_visible_(true), 29 page_visible_(true),
30 disable_background_timer_throttling_(disable_background_timer_throttling), 30 disable_background_timer_throttling_(disable_background_timer_throttling),
31 allow_virtual_time_to_advance_(true), 31 allow_virtual_time_to_advance_(true) {
32 have_seen_loading_task_(false),
33 virtual_time_(false) {
34 renderer_scheduler->AddWebViewScheduler(this); 32 renderer_scheduler->AddWebViewScheduler(this);
35 } 33 }
36 34
37 WebViewSchedulerImpl::~WebViewSchedulerImpl() { 35 WebViewSchedulerImpl::~WebViewSchedulerImpl() {
38 // 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
39 // frame. 37 // frame.
40 for (WebFrameSchedulerImpl* frame_scheduler : frame_schedulers_) { 38 for (WebFrameSchedulerImpl* frame_scheduler : frame_schedulers_) {
41 frame_scheduler->DetachFromWebViewScheduler(); 39 frame_scheduler->DetachFromWebViewScheduler();
42 } 40 }
43 renderer_scheduler_->RemoveWebViewScheduler(this); 41 renderer_scheduler_->RemoveWebViewScheduler(this);
42 if (virtual_time_domain_)
43 renderer_scheduler_->UnregisterTimeDomain(virtual_time_domain_.get());
44 } 44 }
45 45
46 void WebViewSchedulerImpl::setPageVisible(bool page_visible) { 46 void WebViewSchedulerImpl::setPageVisible(bool page_visible) {
47 if (disable_background_timer_throttling_ || page_visible_ == page_visible) 47 if (disable_background_timer_throttling_ || page_visible_ == page_visible)
48 return; 48 return;
49 49
50 page_visible_ = page_visible; 50 page_visible_ = page_visible;
51 51
52 for (WebFrameSchedulerImpl* frame_scheduler : frame_schedulers_) { 52 for (WebFrameSchedulerImpl* frame_scheduler : frame_schedulers_) {
53 frame_scheduler->setPageVisible(page_visible_); 53 frame_scheduler->setPageVisible(page_visible_);
(...skipping 23 matching lines...) Expand all
77 void WebViewSchedulerImpl::AddConsoleWarning(const std::string& message) { 77 void WebViewSchedulerImpl::AddConsoleWarning(const std::string& message) {
78 if (!web_view_ || !web_view_->mainFrame()) 78 if (!web_view_ || !web_view_->mainFrame())
79 return; 79 return;
80 blink::WebConsoleMessage console_message( 80 blink::WebConsoleMessage console_message(
81 blink::WebConsoleMessage::LevelWarning, 81 blink::WebConsoleMessage::LevelWarning,
82 blink::WebString::fromUTF8(message)); 82 blink::WebString::fromUTF8(message));
83 web_view_->mainFrame()->addMessageToConsole(console_message); 83 web_view_->mainFrame()->addMessageToConsole(console_message);
84 } 84 }
85 85
86 void WebViewSchedulerImpl::enableVirtualTime() { 86 void WebViewSchedulerImpl::enableVirtualTime() {
87 if (virtual_time_) 87 // If we've already switched to virtual time then we don't need to do
88 // anything more.
89 if (virtual_time_domain_.get())
88 return; 90 return;
89 91
90 virtual_time_ = true; 92 virtual_time_domain_.reset(new AutoAdvancingVirtualTimeDomain(
91 renderer_scheduler_->GetVirtualTimeDomain()->SetCanAdvanceVirtualTime( 93 renderer_scheduler_->tick_clock()->NowTicks()));
94 renderer_scheduler_->RegisterTimeDomain(virtual_time_domain_.get());
95
96 virtual_time_domain_->SetCanAdvanceVirtualTime(
92 allow_virtual_time_to_advance_); 97 allow_virtual_time_to_advance_);
93 98
94 renderer_scheduler_->EnableVirtualTime(); 99 for (WebFrameSchedulerImpl* frame_scheduler : frame_schedulers_) {
100 frame_scheduler->OnVirtualTimeDomainChanged();
101 }
95 } 102 }
96 103
97 void WebViewSchedulerImpl::setAllowVirtualTimeToAdvance( 104 void WebViewSchedulerImpl::setAllowVirtualTimeToAdvance(
98 bool allow_virtual_time_to_advance) { 105 bool allow_virtual_time_to_advance) {
106 if (allow_virtual_time_to_advance_ == allow_virtual_time_to_advance)
107 return;
108
99 allow_virtual_time_to_advance_ = allow_virtual_time_to_advance; 109 allow_virtual_time_to_advance_ = allow_virtual_time_to_advance;
100 110
101 if (!virtual_time_) 111 if (virtual_time_domain_) {
102 return; 112 virtual_time_domain_->SetCanAdvanceVirtualTime(
103 113 allow_virtual_time_to_advance);
104 renderer_scheduler_->GetVirtualTimeDomain()->SetCanAdvanceVirtualTime( 114 }
105 allow_virtual_time_to_advance);
106 } 115 }
107 116
108 bool WebViewSchedulerImpl::virtualTimeAllowedToAdvance() const { 117 bool WebViewSchedulerImpl::virtualTimeAllowedToAdvance() const {
109 return allow_virtual_time_to_advance_; 118 return allow_virtual_time_to_advance_;
110 } 119 }
111 120
112 void WebViewSchedulerImpl::DidStartLoading(unsigned long identifier) { 121 void WebViewSchedulerImpl::DidStartLoading(unsigned long identifier) {
113 pending_loads_.insert(identifier); 122 pending_loads_.insert(identifier);
114 have_seen_loading_task_ = true;
115 ApplyVirtualTimePolicy(); 123 ApplyVirtualTimePolicy();
116 } 124 }
117 125
118 void WebViewSchedulerImpl::DidStopLoading(unsigned long identifier) { 126 void WebViewSchedulerImpl::DidStopLoading(unsigned long identifier) {
119 pending_loads_.erase(identifier); 127 pending_loads_.erase(identifier);
120 ApplyVirtualTimePolicy(); 128 ApplyVirtualTimePolicy();
121 } 129 }
122 130
123 void WebViewSchedulerImpl::IncrementBackgroundParserCount() { 131 void WebViewSchedulerImpl::IncrementBackgroundParserCount() {
124 background_parser_count_++; 132 background_parser_count_++;
(...skipping 22 matching lines...) Expand all
147 ApplyVirtualTimePolicy(); 155 ApplyVirtualTimePolicy();
148 break; 156 break;
149 } 157 }
150 } 158 }
151 159
152 void WebViewSchedulerImpl::ApplyVirtualTimePolicy() { 160 void WebViewSchedulerImpl::ApplyVirtualTimePolicy() {
153 if (virtual_time_policy_ != VirtualTimePolicy::DETERMINISTIC_LOADING) { 161 if (virtual_time_policy_ != VirtualTimePolicy::DETERMINISTIC_LOADING) {
154 return; 162 return;
155 } 163 }
156 164
157 // We pause virtual time until we've seen a loading task posted, because
158 // otherwise we could advance virtual time arbitarially far before the
159 // first load arrives.
160 setAllowVirtualTimeToAdvance(pending_loads_.size() == 0 && 165 setAllowVirtualTimeToAdvance(pending_loads_.size() == 0 &&
161 background_parser_count_ == 0 && 166 background_parser_count_ == 0);
162 have_seen_loading_task_);
163 } 167 }
164 168
165 } // namespace scheduler 169 } // namespace scheduler
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698