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

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

Issue 1652083002: Prepare for per-webview virtual time (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rename useVirtualTime 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_frame_scheduler_impl.h" 5 #include "components/scheduler/renderer/web_frame_scheduler_impl.h"
6 6
7 #include "components/scheduler/base/real_time_domain.h" 7 #include "components/scheduler/base/real_time_domain.h"
8 #include "components/scheduler/base/virtual_time_domain.h" 8 #include "components/scheduler/base/virtual_time_domain.h"
9 #include "components/scheduler/child/web_task_runner_impl.h" 9 #include "components/scheduler/child/web_task_runner_impl.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_view_scheduler_impl.h" 12 #include "components/scheduler/renderer/web_view_scheduler_impl.h"
12 #include "third_party/WebKit/public/platform/WebString.h" 13 #include "third_party/WebKit/public/platform/WebString.h"
13 14
14 namespace scheduler { 15 namespace scheduler {
15 16
16 WebFrameSchedulerImpl::WebFrameSchedulerImpl( 17 WebFrameSchedulerImpl::WebFrameSchedulerImpl(
17 RendererSchedulerImpl* renderer_scheduler, 18 RendererSchedulerImpl* renderer_scheduler,
18 WebViewSchedulerImpl* parent_web_view_scheduler) 19 WebViewSchedulerImpl* parent_web_view_scheduler)
19 : renderer_scheduler_(renderer_scheduler), 20 : renderer_scheduler_(renderer_scheduler),
(...skipping 18 matching lines...) Expand all
38 39
39 void WebFrameSchedulerImpl::setFrameVisible(bool frame_visible) { 40 void WebFrameSchedulerImpl::setFrameVisible(bool frame_visible) {
40 frame_visible_ = frame_visible; 41 frame_visible_ = frame_visible;
41 // TODO(alexclarke): Do something with this flag. 42 // TODO(alexclarke): Do something with this flag.
42 } 43 }
43 44
44 blink::WebTaskRunner* WebFrameSchedulerImpl::loadingTaskRunner() { 45 blink::WebTaskRunner* WebFrameSchedulerImpl::loadingTaskRunner() {
45 if (!loading_web_task_runner_) { 46 if (!loading_web_task_runner_) {
46 loading_task_queue_ = 47 loading_task_queue_ =
47 renderer_scheduler_->NewLoadingTaskRunner("frame_loading_tq"); 48 renderer_scheduler_->NewLoadingTaskRunner("frame_loading_tq");
49 if (parent_web_view_scheduler_->virtual_time_domain()) {
50 loading_task_queue_->SetTimeDomain(
51 parent_web_view_scheduler_->virtual_time_domain());
52 loading_task_queue_->SetPumpPolicy(
53 parent_web_view_scheduler_->GetVirtualTimePumpPolicy());
54 }
48 loading_web_task_runner_.reset(new WebTaskRunnerImpl(loading_task_queue_)); 55 loading_web_task_runner_.reset(new WebTaskRunnerImpl(loading_task_queue_));
49 } 56 }
50 return loading_web_task_runner_.get(); 57 return loading_web_task_runner_.get();
51 } 58 }
52 59
53 blink::WebTaskRunner* WebFrameSchedulerImpl::timerTaskRunner() { 60 blink::WebTaskRunner* WebFrameSchedulerImpl::timerTaskRunner() {
54 if (!timer_web_task_runner_) { 61 if (!timer_web_task_runner_) {
55 timer_task_queue_ = 62 timer_task_queue_ =
56 renderer_scheduler_->NewTimerTaskRunner("frame_timer_tq"); 63 renderer_scheduler_->NewTimerTaskRunner("frame_timer_tq");
57 if (!page_visible_) { 64 if (parent_web_view_scheduler_->virtual_time_domain()) {
65 timer_task_queue_->SetTimeDomain(
66 parent_web_view_scheduler_->virtual_time_domain());
67 timer_task_queue_->SetPumpPolicy(
68 parent_web_view_scheduler_->GetVirtualTimePumpPolicy());
69 } else if (!page_visible_) {
58 renderer_scheduler_->throttling_helper()->IncreaseThrottleRefCount( 70 renderer_scheduler_->throttling_helper()->IncreaseThrottleRefCount(
59 timer_task_queue_.get()); 71 timer_task_queue_.get());
60 } 72 }
61 timer_web_task_runner_.reset(new WebTaskRunnerImpl(timer_task_queue_)); 73 timer_web_task_runner_.reset(new WebTaskRunnerImpl(timer_task_queue_));
62 } 74 }
63 return timer_web_task_runner_.get(); 75 return timer_web_task_runner_.get();
64 } 76 }
65 77
66 void WebFrameSchedulerImpl::setFrameOrigin( 78 void WebFrameSchedulerImpl::setFrameOrigin(
67 const blink::WebSecurityOrigin& origin) { 79 const blink::WebSecurityOrigin& origin) {
68 origin_ = origin; 80 origin_ = origin;
69 // TODO(skyostil): Associate the task queues with this origin. 81 // TODO(skyostil): Associate the task queues with this origin.
70 } 82 }
71 83
72 void WebFrameSchedulerImpl::setPageVisible(bool page_visible) { 84 void WebFrameSchedulerImpl::setPageVisible(bool page_visible) {
73 if (page_visible_ == page_visible) 85 if (page_visible_ == page_visible)
74 return; 86 return;
75 87
76 page_visible_ = page_visible; 88 page_visible_ = page_visible;
77 89
78 if (!timer_web_task_runner_) 90 if (!timer_web_task_runner_ ||
91 parent_web_view_scheduler_->virtual_time_domain()) {
79 return; 92 return;
93 }
80 94
81 if (page_visible_) { 95 if (page_visible_) {
82 renderer_scheduler_->throttling_helper()->DecreaseThrottleRefCount( 96 renderer_scheduler_->throttling_helper()->DecreaseThrottleRefCount(
83 timer_task_queue_.get()); 97 timer_task_queue_.get());
84 } else { 98 } else {
85 renderer_scheduler_->throttling_helper()->IncreaseThrottleRefCount( 99 renderer_scheduler_->throttling_helper()->IncreaseThrottleRefCount(
86 timer_task_queue_.get()); 100 timer_task_queue_.get());
87 } 101 }
88 } 102 }
89 103
104 void WebFrameSchedulerImpl::OnVirtualTimeDomainChanged() {
105 DCHECK(parent_web_view_scheduler_->virtual_time_domain());
106
107 if (timer_task_queue_.get()) {
Sami 2016/02/01 17:05:39 nit: IIRC you don't need the .get() in these condi
alex clarke (OOO till 29th) 2016/02/01 17:50:09 Done.
108 renderer_scheduler_->throttling_helper()->UnregisterTaskQueue(
109 timer_task_queue_.get());
110 timer_task_queue_->SetTimeDomain(
111 parent_web_view_scheduler_->virtual_time_domain());
112 timer_task_queue_->SetPumpPolicy(
113 parent_web_view_scheduler_->GetVirtualTimePumpPolicy());
114 }
115
116 if (loading_task_queue_.get()) {
117 loading_task_queue_->SetTimeDomain(
118 parent_web_view_scheduler_->virtual_time_domain());
119 loading_task_queue_->SetPumpPolicy(
120 parent_web_view_scheduler_->GetVirtualTimePumpPolicy());
121 }
122 }
123
124 void WebFrameSchedulerImpl::OnVirtualTimePumpPolicyChanged() {
125 if (!parent_web_view_scheduler_->virtual_time_domain())
126 return;
127
128 if (timer_task_queue_.get()) {
129 timer_task_queue_->SetPumpPolicy(
130 parent_web_view_scheduler_->GetVirtualTimePumpPolicy());
131 }
132
133 if (loading_task_queue_.get()) {
134 loading_task_queue_->SetPumpPolicy(
135 parent_web_view_scheduler_->GetVirtualTimePumpPolicy());
136 }
137 }
138
90 } // namespace scheduler 139 } // namespace scheduler
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698