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

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

Issue 2023033003: scheduler: Throttle timers in out-of-view frames (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add cross origin check, tests 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 bool allow_hidden_timer_throttling)
24 : virtual_time_pump_policy_(TaskQueue::PumpPolicy::AUTO), 25 : virtual_time_pump_policy_(TaskQueue::PumpPolicy::AUTO),
25 web_view_(web_view), 26 web_view_(web_view),
26 renderer_scheduler_(renderer_scheduler), 27 renderer_scheduler_(renderer_scheduler),
27 page_visible_(true), 28 page_visible_(true),
28 disable_background_timer_throttling_(disable_background_timer_throttling), 29 disable_background_timer_throttling_(disable_background_timer_throttling),
29 allow_virtual_time_to_advance_(true) { 30 allow_virtual_time_to_advance_(true),
31 allow_hidden_timer_throttling_(allow_hidden_timer_throttling) {
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_) {
37 frame_scheduler->DetachFromWebViewScheduler(); 39 frame_scheduler->DetachFromWebViewScheduler();
38 } 40 }
39 renderer_scheduler_->RemoveWebViewScheduler(this); 41 renderer_scheduler_->RemoveWebViewScheduler(this);
40 if (virtual_time_domain_) 42 if (virtual_time_domain_)
41 renderer_scheduler_->UnregisterTimeDomain(virtual_time_domain_.get()); 43 renderer_scheduler_->UnregisterTimeDomain(virtual_time_domain_.get());
42 } 44 }
43 45
44 void WebViewSchedulerImpl::setPageVisible(bool page_visible) { 46 void WebViewSchedulerImpl::setPageVisible(bool page_visible) {
45 if (disable_background_timer_throttling_ || page_visible_ == page_visible) 47 if (disable_background_timer_throttling_ || page_visible_ == page_visible)
46 return; 48 return;
47 49
48 page_visible_ = page_visible; 50 page_visible_ = page_visible;
49 51
50 for (WebFrameSchedulerImpl* frame_scheduler : frame_schedulers_) { 52 for (WebFrameSchedulerImpl* frame_scheduler : frame_schedulers_) {
51 frame_scheduler->setPageVisible(page_visible_); 53 frame_scheduler->setPageVisible(page_visible_);
52 } 54 }
53 } 55 }
54 56
55 std::unique_ptr<WebFrameSchedulerImpl> 57 std::unique_ptr<WebFrameSchedulerImpl>
56 WebViewSchedulerImpl::createWebFrameSchedulerImpl( 58 WebViewSchedulerImpl::createWebFrameSchedulerImpl(
57 base::trace_event::BlameContext* blame_context) { 59 base::trace_event::BlameContext* blame_context) {
58 std::unique_ptr<WebFrameSchedulerImpl> frame_scheduler( 60 std::unique_ptr<WebFrameSchedulerImpl> frame_scheduler(
59 new WebFrameSchedulerImpl(renderer_scheduler_, this, blame_context)); 61 new WebFrameSchedulerImpl(renderer_scheduler_, this, blame_context,
62 allow_hidden_timer_throttling_));
60 frame_scheduler->setPageVisible(page_visible_); 63 frame_scheduler->setPageVisible(page_visible_);
61 frame_schedulers_.insert(frame_scheduler.get()); 64 frame_schedulers_.insert(frame_scheduler.get());
62 return frame_scheduler; 65 return frame_scheduler;
63 } 66 }
64 67
65 std::unique_ptr<blink::WebFrameScheduler> 68 std::unique_ptr<blink::WebFrameScheduler>
66 WebViewSchedulerImpl::createFrameScheduler(blink::BlameContext* blame_context) { 69 WebViewSchedulerImpl::createFrameScheduler(blink::BlameContext* blame_context) {
67 return createWebFrameSchedulerImpl(blame_context); 70 return createWebFrameSchedulerImpl(blame_context);
68 } 71 }
69 72
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 109
107 allow_virtual_time_to_advance_ = allow_virtual_time_to_advance; 110 allow_virtual_time_to_advance_ = allow_virtual_time_to_advance;
108 111
109 if (virtual_time_domain_) { 112 if (virtual_time_domain_) {
110 virtual_time_domain_->SetCanAdvanceVirtualTime( 113 virtual_time_domain_->SetCanAdvanceVirtualTime(
111 allow_virtual_time_to_advance); 114 allow_virtual_time_to_advance);
112 } 115 }
113 } 116 }
114 117
115 } // namespace scheduler 118 } // namespace scheduler
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698