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

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

Issue 1646583002: [Reland] Per WebViewScheduler virtual time (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: WebViewSchedulerImpl to unregister the virtual_time_domain_ in the destructor Created 4 years, 10 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/renderer_scheduler_impl.h" 11 #include "components/scheduler/renderer/renderer_scheduler_impl.h"
11 #include "components/scheduler/renderer/web_frame_scheduler_impl.h" 12 #include "components/scheduler/renderer/web_frame_scheduler_impl.h"
12 #include "third_party/WebKit/public/platform/WebFrameScheduler.h" 13 #include "third_party/WebKit/public/platform/WebFrameScheduler.h"
13 #include "third_party/WebKit/public/web/WebConsoleMessage.h" 14 #include "third_party/WebKit/public/web/WebConsoleMessage.h"
14 #include "third_party/WebKit/public/web/WebFrame.h" 15 #include "third_party/WebKit/public/web/WebFrame.h"
15 #include "third_party/WebKit/public/web/WebView.h" 16 #include "third_party/WebKit/public/web/WebView.h"
16 17
17 namespace scheduler { 18 namespace scheduler {
18 19
19 WebViewSchedulerImpl::WebViewSchedulerImpl( 20 WebViewSchedulerImpl::WebViewSchedulerImpl(
20 blink::WebView* web_view, 21 blink::WebView* web_view,
21 RendererSchedulerImpl* renderer_scheduler, 22 RendererSchedulerImpl* renderer_scheduler,
22 bool disable_background_timer_throttling) 23 bool disable_background_timer_throttling)
23 : web_view_(web_view), 24 : web_view_(web_view),
24 renderer_scheduler_(renderer_scheduler), 25 renderer_scheduler_(renderer_scheduler),
25 page_visible_(true), 26 page_visible_(true),
26 disable_background_timer_throttling_( 27 disable_background_timer_throttling_(disable_background_timer_throttling),
27 disable_background_timer_throttling) { 28 allow_virtual_time_to_advance_(true) {
28 renderer_scheduler->AddWebViewScheduler(this); 29 renderer_scheduler->AddWebViewScheduler(this);
29 } 30 }
30 31
31 WebViewSchedulerImpl::~WebViewSchedulerImpl() { 32 WebViewSchedulerImpl::~WebViewSchedulerImpl() {
32 // TODO(alexclarke): Find out why we can't rely on the web view outliving the 33 // TODO(alexclarke): Find out why we can't rely on the web view outliving the
33 // frame. 34 // frame.
34 for (WebFrameSchedulerImpl* frame_scheduler : frame_schedulers_) { 35 for (WebFrameSchedulerImpl* frame_scheduler : frame_schedulers_) {
35 frame_scheduler->DetachFromWebViewScheduler(); 36 frame_scheduler->DetachFromWebViewScheduler();
36 } 37 }
37 renderer_scheduler_->RemoveWebViewScheduler(this); 38 renderer_scheduler_->RemoveWebViewScheduler(this);
39 if (virtual_time_domain_.get())
40 renderer_scheduler_->UnregisterTimeDomain(virtual_time_domain_.get());
38 } 41 }
39 42
40 void WebViewSchedulerImpl::setPageVisible(bool page_visible) { 43 void WebViewSchedulerImpl::setPageVisible(bool page_visible) {
41 if (disable_background_timer_throttling_ || page_visible_ == page_visible) 44 if (disable_background_timer_throttling_ || page_visible_ == page_visible)
42 return; 45 return;
43 46
44 page_visible_ = page_visible; 47 page_visible_ = page_visible;
45 48
46 for (WebFrameSchedulerImpl* frame_scheduler : frame_schedulers_) { 49 for (WebFrameSchedulerImpl* frame_scheduler : frame_schedulers_) {
47 frame_scheduler->setPageVisible(page_visible_); 50 frame_scheduler->setPageVisible(page_visible_);
(...skipping 21 matching lines...) Expand all
69 72
70 void WebViewSchedulerImpl::AddConsoleWarning(const std::string& message) { 73 void WebViewSchedulerImpl::AddConsoleWarning(const std::string& message) {
71 if (!web_view_ || !web_view_->mainFrame()) 74 if (!web_view_ || !web_view_->mainFrame())
72 return; 75 return;
73 blink::WebConsoleMessage console_message( 76 blink::WebConsoleMessage console_message(
74 blink::WebConsoleMessage::LevelWarning, 77 blink::WebConsoleMessage::LevelWarning,
75 blink::WebString::fromUTF8(message)); 78 blink::WebString::fromUTF8(message));
76 web_view_->mainFrame()->addMessageToConsole(console_message); 79 web_view_->mainFrame()->addMessageToConsole(console_message);
77 } 80 }
78 81
82 void WebViewSchedulerImpl::useVirtualTime() {
83 // If we've already switched to virtual time then we don't need to do
84 // anything more.
85 if (virtual_time_domain_.get())
86 return;
87
88 virtual_time_domain_.reset(new AutoAdvancingVirtualTimeDomain(
89 renderer_scheduler_->tick_clock()->NowTicks()));
90 renderer_scheduler_->RegisterTimeDomain(virtual_time_domain_.get());
91
92 virtual_time_domain_->SetCanAdvanceVirtualTime(
93 allow_virtual_time_to_advance_);
94
95 for (WebFrameSchedulerImpl* frame_scheduler : frame_schedulers_) {
96 frame_scheduler->UseVirtualTime(virtual_time_domain_.get());
97 }
98 }
99
100 void WebViewSchedulerImpl::setAllowVirtualTimeToAdvance(
101 bool allow_virtual_time_to_advance) {
102 if (allow_virtual_time_to_advance_ == allow_virtual_time_to_advance)
103 return;
104
105 allow_virtual_time_to_advance_ = allow_virtual_time_to_advance;
106
107 for (WebFrameSchedulerImpl* frame_scheduler : frame_schedulers_) {
108 frame_scheduler->SetCanAdvanceVirtualTime(allow_virtual_time_to_advance);
109 }
110
111 if (virtual_time_domain_.get()) {
Sami 2016/02/01 11:15:07 Should we DCHECK(virtual_time_domain_) instead? If
alex clarke (OOO till 29th) 2016/02/01 14:16:54 But it doesn't fail :) See line 92
112 virtual_time_domain_->SetCanAdvanceVirtualTime(
113 allow_virtual_time_to_advance);
114 }
115 }
116
79 } // namespace scheduler 117 } // namespace scheduler
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698