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

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: Rebased 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 15 matching lines...) Expand all
35 void WebFrameSchedulerImpl::DetachFromWebViewScheduler() { 36 void WebFrameSchedulerImpl::DetachFromWebViewScheduler() {
36 parent_web_view_scheduler_ = nullptr; 37 parent_web_view_scheduler_ = nullptr;
37 } 38 }
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() {
46 DCHECK(parent_web_view_scheduler_);
45 if (!loading_web_task_runner_) { 47 if (!loading_web_task_runner_) {
46 loading_task_queue_ = 48 loading_task_queue_ =
47 renderer_scheduler_->NewLoadingTaskRunner("frame_loading_tq"); 49 renderer_scheduler_->NewLoadingTaskRunner("frame_loading_tq");
50 if (parent_web_view_scheduler_->virtual_time_domain()) {
51 loading_task_queue_->SetTimeDomain(
52 parent_web_view_scheduler_->virtual_time_domain());
53 loading_task_queue_->SetPumpPolicy(
54 parent_web_view_scheduler_->GetVirtualTimePumpPolicy());
55 }
48 loading_web_task_runner_.reset(new WebTaskRunnerImpl(loading_task_queue_)); 56 loading_web_task_runner_.reset(new WebTaskRunnerImpl(loading_task_queue_));
49 } 57 }
50 return loading_web_task_runner_.get(); 58 return loading_web_task_runner_.get();
51 } 59 }
52 60
53 blink::WebTaskRunner* WebFrameSchedulerImpl::timerTaskRunner() { 61 blink::WebTaskRunner* WebFrameSchedulerImpl::timerTaskRunner() {
62 DCHECK(parent_web_view_scheduler_);
54 if (!timer_web_task_runner_) { 63 if (!timer_web_task_runner_) {
55 timer_task_queue_ = 64 timer_task_queue_ =
56 renderer_scheduler_->NewTimerTaskRunner("frame_timer_tq"); 65 renderer_scheduler_->NewTimerTaskRunner("frame_timer_tq");
57 if (!page_visible_) { 66 if (parent_web_view_scheduler_->virtual_time_domain()) {
67 timer_task_queue_->SetTimeDomain(
68 parent_web_view_scheduler_->virtual_time_domain());
69 timer_task_queue_->SetPumpPolicy(
70 parent_web_view_scheduler_->GetVirtualTimePumpPolicy());
71 } else if (!page_visible_) {
58 renderer_scheduler_->throttling_helper()->IncreaseThrottleRefCount( 72 renderer_scheduler_->throttling_helper()->IncreaseThrottleRefCount(
59 timer_task_queue_.get()); 73 timer_task_queue_.get());
60 } 74 }
61 timer_web_task_runner_.reset(new WebTaskRunnerImpl(timer_task_queue_)); 75 timer_web_task_runner_.reset(new WebTaskRunnerImpl(timer_task_queue_));
62 } 76 }
63 return timer_web_task_runner_.get(); 77 return timer_web_task_runner_.get();
64 } 78 }
65 79
66 void WebFrameSchedulerImpl::setFrameOrigin( 80 void WebFrameSchedulerImpl::setFrameOrigin(
67 const blink::WebSecurityOrigin& origin) { 81 const blink::WebSecurityOrigin& origin) {
68 origin_ = origin; 82 origin_ = origin;
69 // TODO(skyostil): Associate the task queues with this origin. 83 // TODO(skyostil): Associate the task queues with this origin.
70 } 84 }
71 85
72 void WebFrameSchedulerImpl::setPageVisible(bool page_visible) { 86 void WebFrameSchedulerImpl::setPageVisible(bool page_visible) {
87 DCHECK(parent_web_view_scheduler_);
73 if (page_visible_ == page_visible) 88 if (page_visible_ == page_visible)
74 return; 89 return;
75 90
76 page_visible_ = page_visible; 91 page_visible_ = page_visible;
77 92
78 if (!timer_web_task_runner_) 93 if (!timer_web_task_runner_ ||
94 parent_web_view_scheduler_->virtual_time_domain()) {
79 return; 95 return;
96 }
80 97
81 if (page_visible_) { 98 if (page_visible_) {
82 renderer_scheduler_->throttling_helper()->DecreaseThrottleRefCount( 99 renderer_scheduler_->throttling_helper()->DecreaseThrottleRefCount(
83 timer_task_queue_.get()); 100 timer_task_queue_.get());
84 } else { 101 } else {
85 renderer_scheduler_->throttling_helper()->IncreaseThrottleRefCount( 102 renderer_scheduler_->throttling_helper()->IncreaseThrottleRefCount(
86 timer_task_queue_.get()); 103 timer_task_queue_.get());
87 } 104 }
88 } 105 }
89 106
107 void WebFrameSchedulerImpl::OnVirtualTimeDomainChanged() {
108 DCHECK(parent_web_view_scheduler_);
109 DCHECK(parent_web_view_scheduler_->virtual_time_domain());
110
111 if (timer_task_queue_) {
112 renderer_scheduler_->throttling_helper()->UnregisterTaskQueue(
113 timer_task_queue_.get());
114 timer_task_queue_->SetTimeDomain(
115 parent_web_view_scheduler_->virtual_time_domain());
116 timer_task_queue_->SetPumpPolicy(
117 parent_web_view_scheduler_->GetVirtualTimePumpPolicy());
118 }
119
120 if (loading_task_queue_) {
121 loading_task_queue_->SetTimeDomain(
122 parent_web_view_scheduler_->virtual_time_domain());
123 loading_task_queue_->SetPumpPolicy(
124 parent_web_view_scheduler_->GetVirtualTimePumpPolicy());
125 }
126 }
127
128 void WebFrameSchedulerImpl::OnVirtualTimePumpPolicyChanged() {
129 if (!parent_web_view_scheduler_->virtual_time_domain())
130 return;
131
132 if (timer_task_queue_) {
133 timer_task_queue_->SetPumpPolicy(
134 parent_web_view_scheduler_->GetVirtualTimePumpPolicy());
135 }
136
137 if (loading_task_queue_) {
138 loading_task_queue_->SetPumpPolicy(
139 parent_web_view_scheduler_->GetVirtualTimePumpPolicy());
140 }
141 }
142
90 } // namespace scheduler 143 } // namespace scheduler
OLDNEW
« no previous file with comments | « components/scheduler/renderer/web_frame_scheduler_impl.h ('k') | components/scheduler/renderer/web_view_scheduler_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698