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

Side by Side Diff: cc/trees/threaded_channel.cc

Issue 1417053005: cc: Split ThreadProxy into ProxyMain and ProxyImpl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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 "cc/trees/threaded_channel.h" 5 #include "cc/trees/threaded_channel.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/single_thread_task_runner.h" 8 #include "base/single_thread_task_runner.h"
9 #include "base/trace_event/trace_event.h" 9 #include "base/trace_event/trace_event.h"
10 #include "cc/trees/layer_tree_host.h"
10 11
11 namespace cc { 12 namespace cc {
12 13
13 scoped_ptr<ThreadedChannel> ThreadedChannel::Create( 14 scoped_ptr<ThreadedChannel> ThreadedChannel::Create(ProxyMain* proxy_main) {
14 ThreadProxy* thread_proxy, 15 return make_scoped_ptr(new ThreadedChannel(proxy_main));
15 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
16 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) {
17 return make_scoped_ptr(
18 new ThreadedChannel(thread_proxy, main_task_runner, impl_task_runner));
19 } 16 }
20 17
21 ThreadedChannel::ThreadedChannel( 18 ThreadedChannel::ThreadedChannel(ProxyMain* proxy_main)
22 ThreadProxy* thread_proxy, 19 : proxy_main_(proxy_main) {}
23 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
24 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner)
25 : proxy_main_(thread_proxy),
26 proxy_impl_(thread_proxy),
27 proxy_(thread_proxy),
28 main_task_runner_(main_task_runner),
29 impl_task_runner_(impl_task_runner) {}
30 20
31 void ThreadedChannel::SetThrottleFrameProductionOnImpl(bool throttle) { 21 void ThreadedChannel::SetThrottleFrameProductionOnImpl(bool throttle) {
32 ImplThreadTaskRunner()->PostTask( 22 ImplThreadTaskRunner()->PostTask(
33 FROM_HERE, base::Bind(&ProxyImpl::SetThrottleFrameProductionOnImpl, 23 FROM_HERE, base::Bind(&ProxyImpl::SetThrottleFrameProductionOnImpl,
34 proxy_impl_->GetImplWeakPtr(), throttle)); 24 proxy_impl_->GetWeakPtr(), throttle));
35 } 25 }
36 26
37 void ThreadedChannel::UpdateTopControlsStateOnImpl(TopControlsState constraints, 27 void ThreadedChannel::UpdateTopControlsStateOnImpl(TopControlsState constraints,
38 TopControlsState current, 28 TopControlsState current,
39 bool animate) { 29 bool animate) {
40 ImplThreadTaskRunner()->PostTask( 30 ImplThreadTaskRunner()->PostTask(
41 FROM_HERE, 31 FROM_HERE,
42 base::Bind(&ProxyImpl::UpdateTopControlsStateOnImpl, 32 base::Bind(&ProxyImpl::UpdateTopControlsStateOnImpl,
43 proxy_impl_->GetImplWeakPtr(), constraints, current, animate)); 33 proxy_impl_->GetWeakPtr(), constraints, current, animate));
44 } 34 }
45 35
46 void ThreadedChannel::InitializeOutputSurfaceOnImpl( 36 void ThreadedChannel::InitializeOutputSurfaceOnImpl(
47 OutputSurface* output_surface) { 37 OutputSurface* output_surface) {
48 ImplThreadTaskRunner()->PostTask( 38 ImplThreadTaskRunner()->PostTask(
49 FROM_HERE, base::Bind(&ProxyImpl::InitializeOutputSurfaceOnImpl, 39 FROM_HERE, base::Bind(&ProxyImpl::InitializeOutputSurfaceOnImpl,
50 proxy_impl_->GetImplWeakPtr(), output_surface)); 40 proxy_impl_->GetWeakPtr(), output_surface));
51 } 41 }
52 42
53 void ThreadedChannel::MainThreadHasStoppedFlingingOnImpl() { 43 void ThreadedChannel::MainThreadHasStoppedFlingingOnImpl() {
54 ImplThreadTaskRunner()->PostTask( 44 ImplThreadTaskRunner()->PostTask(
55 FROM_HERE, base::Bind(&ProxyImpl::MainThreadHasStoppedFlingingOnImpl, 45 FROM_HERE, base::Bind(&ProxyImpl::MainThreadHasStoppedFlingingOnImpl,
56 proxy_impl_->GetImplWeakPtr())); 46 proxy_impl_->GetWeakPtr()));
57 } 47 }
58 48
59 void ThreadedChannel::SetInputThrottledUntilCommitOnImpl(bool is_throttled) { 49 void ThreadedChannel::SetInputThrottledUntilCommitOnImpl(bool is_throttled) {
60 ImplThreadTaskRunner()->PostTask( 50 ImplThreadTaskRunner()->PostTask(
61 FROM_HERE, base::Bind(&ProxyImpl::SetInputThrottledUntilCommitOnImpl, 51 FROM_HERE, base::Bind(&ProxyImpl::SetInputThrottledUntilCommitOnImpl,
62 proxy_impl_->GetImplWeakPtr(), is_throttled)); 52 proxy_impl_->GetWeakPtr(), is_throttled));
63 } 53 }
64 54
65 void ThreadedChannel::SetDeferCommitsOnImpl(bool defer_commits) { 55 void ThreadedChannel::SetDeferCommitsOnImpl(bool defer_commits) {
66 ImplThreadTaskRunner()->PostTask( 56 ImplThreadTaskRunner()->PostTask(
67 FROM_HERE, base::Bind(&ProxyImpl::SetDeferCommitsOnImpl, 57 FROM_HERE, base::Bind(&ProxyImpl::SetDeferCommitsOnImpl,
68 proxy_impl_->GetImplWeakPtr(), defer_commits)); 58 proxy_impl_->GetWeakPtr(), defer_commits));
69 } 59 }
70 60
71 void ThreadedChannel::FinishAllRenderingOnImpl(CompletionEvent* completion) { 61 void ThreadedChannel::FinishAllRenderingOnImpl(CompletionEvent* completion) {
72 ImplThreadTaskRunner()->PostTask( 62 ImplThreadTaskRunner()->PostTask(
73 FROM_HERE, base::Bind(&ProxyImpl::FinishAllRenderingOnImpl, 63 FROM_HERE, base::Bind(&ProxyImpl::FinishAllRenderingOnImpl,
74 proxy_impl_->GetImplWeakPtr(), completion)); 64 proxy_impl_->GetWeakPtr(), completion));
75 } 65 }
76 66
77 void ThreadedChannel::SetNeedsCommitOnImpl() { 67 void ThreadedChannel::SetNeedsCommitOnImpl() {
78 ImplThreadTaskRunner()->PostTask(FROM_HERE, 68 ImplThreadTaskRunner()->PostTask(
79 base::Bind(&ProxyImpl::SetNeedsCommitOnImpl, 69 FROM_HERE,
80 proxy_impl_->GetImplWeakPtr())); 70 base::Bind(&ProxyImpl::SetNeedsCommitOnImpl, proxy_impl_->GetWeakPtr()));
81 } 71 }
82 72
83 void ThreadedChannel::BeginMainFrameAbortedOnImpl(CommitEarlyOutReason reason) { 73 void ThreadedChannel::BeginMainFrameAbortedOnImpl(CommitEarlyOutReason reason) {
84 ImplThreadTaskRunner()->PostTask( 74 ImplThreadTaskRunner()->PostTask(
85 FROM_HERE, base::Bind(&ProxyImpl::BeginMainFrameAbortedOnImpl, 75 FROM_HERE, base::Bind(&ProxyImpl::BeginMainFrameAbortedOnImpl,
86 proxy_impl_->GetImplWeakPtr(), reason)); 76 proxy_impl_->GetWeakPtr(), reason));
87 } 77 }
88 78
89 void ThreadedChannel::SetNeedsRedrawOnImpl(const gfx::Rect& damage_rect) { 79 void ThreadedChannel::SetNeedsRedrawOnImpl(const gfx::Rect& damage_rect) {
90 ImplThreadTaskRunner()->PostTask( 80 ImplThreadTaskRunner()->PostTask(
91 FROM_HERE, base::Bind(&ProxyImpl::SetNeedsRedrawOnImpl, 81 FROM_HERE, base::Bind(&ProxyImpl::SetNeedsRedrawOnImpl,
92 proxy_impl_->GetImplWeakPtr(), damage_rect)); 82 proxy_impl_->GetWeakPtr(), damage_rect));
93 } 83 }
94 84
95 void ThreadedChannel::StartCommitOnImpl(CompletionEvent* completion, 85 void ThreadedChannel::StartCommitOnImpl(CompletionEvent* completion,
96 LayerTreeHost* layer_tree_host, 86 LayerTreeHost* layer_tree_host,
97 bool hold_commit_for_activation) { 87 bool hold_commit_for_activation) {
98 ImplThreadTaskRunner()->PostTask( 88 ImplThreadTaskRunner()->PostTask(
99 FROM_HERE, 89 FROM_HERE,
100 base::Bind(&ProxyImpl::StartCommitOnImpl, proxy_impl_->GetImplWeakPtr(), 90 base::Bind(&ProxyImpl::StartCommitOnImpl, proxy_impl_->GetWeakPtr(),
101 completion, layer_tree_host, hold_commit_for_activation)); 91 completion, layer_tree_host, hold_commit_for_activation));
102 } 92 }
103 93
104 void ThreadedChannel::InitializeImplOnImpl(CompletionEvent* completion, 94 void ThreadedChannel::InitializeImpl(
105 LayerTreeHost* layer_tree_host) { 95 CompletionEvent* completion,
96 LayerTreeHost* layer_tree_host,
97 scoped_ptr<BeginFrameSource> external_begin_frame_source) {
98 TRACE_EVENT0("cc", "ThreadChannel::InitializeImpl");
106 ImplThreadTaskRunner()->PostTask( 99 ImplThreadTaskRunner()->PostTask(
107 FROM_HERE, 100 FROM_HERE, base::Bind(&ThreadedChannel::InitializeImplOnImpl,
108 base::Bind(&ProxyImpl::InitializeImplOnImpl, 101 base::Unretained(this), completion, layer_tree_host,
109 base::Unretained(proxy_impl_), completion, layer_tree_host)); 102 base::Passed(&external_begin_frame_source)));
110 } 103 }
111 104
112 void ThreadedChannel::LayerTreeHostClosedOnImpl(CompletionEvent* completion) { 105 void ThreadedChannel::InitializeImplOnImpl(
106 CompletionEvent* completion,
107 LayerTreeHost* layer_tree_host,
108 scoped_ptr<BeginFrameSource> external_begin_frame_source) {
109 DCHECK(proxy_main_->IsImplThread());
110 proxy_impl_ = CreateProxyImpl(this, layer_tree_host, proxy_main_,
111 external_begin_frame_source.Pass());
112 completion->Signal();
113 }
114
115 scoped_ptr<ProxyImpl> ThreadedChannel::CreateProxyImpl(
116 ChannelImpl* channel_impl,
117 LayerTreeHost* layer_tree_host,
118 TaskRunnerProvider* task_runner_provider,
119 scoped_ptr<BeginFrameSource> external_begin_frame_source) {
120 return ProxyImpl::Create(channel_impl, layer_tree_host, task_runner_provider,
121 external_begin_frame_source.Pass());
122 }
123
124 void ThreadedChannel::CloseImpl(CompletionEvent* completion) {
125 TRACE_EVENT0("cc", "ThreadChannel::~CloseImpl");
113 ImplThreadTaskRunner()->PostTask( 126 ImplThreadTaskRunner()->PostTask(
114 FROM_HERE, base::Bind(&ProxyImpl::LayerTreeHostClosedOnImpl, 127 FROM_HERE, base::Bind(&ThreadedChannel::CloseImplOnImpl,
115 proxy_impl_->GetImplWeakPtr(), completion)); 128 base::Unretained(this), completion));
116 proxy_impl_ = nullptr; 129 }
130
131 void ThreadedChannel::CloseImplOnImpl(CompletionEvent* completion) {
132 DCHECK(proxy_main_->IsImplThread());
133 proxy_impl_->LayerTreeHostClosedOnImpl();
134 proxy_impl_.reset();
135 completion->Signal();
117 } 136 }
118 137
119 void ThreadedChannel::SetVisibleOnImpl(bool visible) { 138 void ThreadedChannel::SetVisibleOnImpl(bool visible) {
120 ImplThreadTaskRunner()->PostTask( 139 ImplThreadTaskRunner()->PostTask(
121 FROM_HERE, base::Bind(&ProxyImpl::SetVisibleOnImpl, 140 FROM_HERE, base::Bind(&ProxyImpl::SetVisibleOnImpl,
122 proxy_impl_->GetImplWeakPtr(), visible)); 141 proxy_impl_->GetWeakPtr(), visible));
123 } 142 }
124 143
125 void ThreadedChannel::ReleaseOutputSurfaceOnImpl(CompletionEvent* completion) { 144 void ThreadedChannel::ReleaseOutputSurfaceOnImpl(CompletionEvent* completion) {
126 ImplThreadTaskRunner()->PostTask( 145 ImplThreadTaskRunner()->PostTask(
127 FROM_HERE, base::Bind(&ProxyImpl::ReleaseOutputSurfaceOnImpl, 146 FROM_HERE, base::Bind(&ProxyImpl::ReleaseOutputSurfaceOnImpl,
128 proxy_impl_->GetImplWeakPtr(), completion)); 147 proxy_impl_->GetWeakPtr(), completion));
129 } 148 }
130 149
131 void ThreadedChannel::FinishGLOnImpl(CompletionEvent* completion) { 150 void ThreadedChannel::FinishGLOnImpl(CompletionEvent* completion) {
132 ImplThreadTaskRunner()->PostTask( 151 ImplThreadTaskRunner()->PostTask(
133 FROM_HERE, base::Bind(&ProxyImpl::FinishGLOnImpl, 152 FROM_HERE, base::Bind(&ProxyImpl::FinishGLOnImpl,
134 proxy_impl_->GetImplWeakPtr(), completion)); 153 proxy_impl_->GetWeakPtr(), completion));
135 } 154 }
136 155
137 void ThreadedChannel::MainFrameWillHappenOnImplForTesting( 156 void ThreadedChannel::MainFrameWillHappenOnImplForTesting(
138 CompletionEvent* completion, 157 CompletionEvent* completion,
139 bool* main_frame_will_happen) { 158 bool* main_frame_will_happen) {
140 ImplThreadTaskRunner()->PostTask( 159 ImplThreadTaskRunner()->PostTask(
141 FROM_HERE, base::Bind(&ProxyImpl::MainFrameWillHappenOnImplForTesting, 160 FROM_HERE, base::Bind(&ProxyImpl::MainFrameWillHappenOnImplForTesting,
142 proxy_impl_->GetImplWeakPtr(), completion, 161 proxy_impl_->GetWeakPtr(), completion,
143 main_frame_will_happen)); 162 main_frame_will_happen));
144 } 163 }
145 164
146 void ThreadedChannel::DidCompleteSwapBuffers() { 165 void ThreadedChannel::DidCompleteSwapBuffers() {
147 MainThreadTaskRunner()->PostTask( 166 MainThreadTaskRunner()->PostTask(
148 FROM_HERE, base::Bind(&ProxyMain::DidCompleteSwapBuffers, 167 FROM_HERE, base::Bind(&ProxyMain::DidCompleteSwapBuffers,
149 proxy_main_->GetMainWeakPtr())); 168 proxy_main_->GetWeakPtr()));
150 } 169 }
151 170
152 void ThreadedChannel::SetRendererCapabilitiesMainCopy( 171 void ThreadedChannel::SetRendererCapabilitiesMainCopy(
153 const RendererCapabilities& capabilities) { 172 const RendererCapabilities& capabilities) {
154 MainThreadTaskRunner()->PostTask( 173 MainThreadTaskRunner()->PostTask(
155 FROM_HERE, base::Bind(&ProxyMain::SetRendererCapabilitiesMainCopy, 174 FROM_HERE, base::Bind(&ProxyMain::SetRendererCapabilitiesMainCopy,
156 proxy_main_->GetMainWeakPtr(), capabilities)); 175 proxy_main_->GetWeakPtr(), capabilities));
157 } 176 }
158 177
159 void ThreadedChannel::BeginMainFrameNotExpectedSoon() { 178 void ThreadedChannel::BeginMainFrameNotExpectedSoon() {
160 MainThreadTaskRunner()->PostTask( 179 MainThreadTaskRunner()->PostTask(
161 FROM_HERE, base::Bind(&ProxyMain::BeginMainFrameNotExpectedSoon, 180 FROM_HERE, base::Bind(&ProxyMain::BeginMainFrameNotExpectedSoon,
162 proxy_main_->GetMainWeakPtr())); 181 proxy_main_->GetWeakPtr()));
163 } 182 }
164 183
165 void ThreadedChannel::DidCommitAndDrawFrame() { 184 void ThreadedChannel::DidCommitAndDrawFrame() {
166 MainThreadTaskRunner()->PostTask(FROM_HERE, 185 MainThreadTaskRunner()->PostTask(
167 base::Bind(&ProxyMain::DidCommitAndDrawFrame, 186 FROM_HERE,
168 proxy_main_->GetMainWeakPtr())); 187 base::Bind(&ProxyMain::DidCommitAndDrawFrame, proxy_main_->GetWeakPtr()));
169 } 188 }
170 189
171 void ThreadedChannel::SetAnimationEvents( 190 void ThreadedChannel::SetAnimationEvents(
172 scoped_ptr<AnimationEventsVector> queue) { 191 scoped_ptr<AnimationEventsVector> queue) {
173 MainThreadTaskRunner()->PostTask( 192 MainThreadTaskRunner()->PostTask(
174 FROM_HERE, 193 FROM_HERE, base::Bind(&ProxyMain::SetAnimationEvents,
175 base::Bind(&ProxyMain::SetAnimationEvents, proxy_main_->GetMainWeakPtr(), 194 proxy_main_->GetWeakPtr(), base::Passed(&queue)));
176 base::Passed(&queue)));
177 } 195 }
178 196
179 void ThreadedChannel::DidLoseOutputSurface() { 197 void ThreadedChannel::DidLoseOutputSurface() {
180 MainThreadTaskRunner()->PostTask(FROM_HERE, 198 MainThreadTaskRunner()->PostTask(
181 base::Bind(&ProxyMain::DidLoseOutputSurface, 199 FROM_HERE,
182 proxy_main_->GetMainWeakPtr())); 200 base::Bind(&ProxyMain::DidLoseOutputSurface, proxy_main_->GetWeakPtr()));
183 } 201 }
184 202
185 void ThreadedChannel::RequestNewOutputSurface() { 203 void ThreadedChannel::RequestNewOutputSurface() {
186 MainThreadTaskRunner()->PostTask( 204 MainThreadTaskRunner()->PostTask(
187 FROM_HERE, base::Bind(&ProxyMain::RequestNewOutputSurface, 205 FROM_HERE, base::Bind(&ProxyMain::RequestNewOutputSurface,
188 proxy_main_->GetMainWeakPtr())); 206 proxy_main_->GetWeakPtr()));
189 } 207 }
190 208
191 void ThreadedChannel::DidInitializeOutputSurface( 209 void ThreadedChannel::DidInitializeOutputSurface(
192 bool success, 210 bool success,
193 const RendererCapabilities& capabilities) { 211 const RendererCapabilities& capabilities) {
194 MainThreadTaskRunner()->PostTask( 212 MainThreadTaskRunner()->PostTask(
195 FROM_HERE, 213 FROM_HERE, base::Bind(&ProxyMain::DidInitializeOutputSurface,
196 base::Bind(&ProxyMain::DidInitializeOutputSurface, 214 proxy_main_->GetWeakPtr(), success, capabilities));
197 proxy_main_->GetMainWeakPtr(), success, capabilities));
198 } 215 }
199 216
200 void ThreadedChannel::DidCompletePageScaleAnimation() { 217 void ThreadedChannel::DidCompletePageScaleAnimation() {
201 MainThreadTaskRunner()->PostTask( 218 MainThreadTaskRunner()->PostTask(
202 FROM_HERE, base::Bind(&ProxyMain::DidCompletePageScaleAnimation, 219 FROM_HERE, base::Bind(&ProxyMain::DidCompletePageScaleAnimation,
203 proxy_main_->GetMainWeakPtr())); 220 proxy_main_->GetWeakPtr()));
204 } 221 }
205 222
206 void ThreadedChannel::PostFrameTimingEventsOnMain( 223 void ThreadedChannel::PostFrameTimingEventsOnMain(
207 scoped_ptr<FrameTimingTracker::CompositeTimingSet> composite_events, 224 scoped_ptr<FrameTimingTracker::CompositeTimingSet> composite_events,
208 scoped_ptr<FrameTimingTracker::MainFrameTimingSet> main_frame_events) { 225 scoped_ptr<FrameTimingTracker::MainFrameTimingSet> main_frame_events) {
209 MainThreadTaskRunner()->PostTask( 226 MainThreadTaskRunner()->PostTask(
210 FROM_HERE, base::Bind(&ProxyMain::PostFrameTimingEventsOnMain, 227 FROM_HERE, base::Bind(&ProxyMain::PostFrameTimingEventsOnMain,
211 proxy_main_->GetMainWeakPtr(), 228 proxy_main_->GetWeakPtr(),
212 base::Passed(composite_events.Pass()), 229 base::Passed(composite_events.Pass()),
213 base::Passed(main_frame_events.Pass()))); 230 base::Passed(main_frame_events.Pass())));
214 } 231 }
215 232
216 void ThreadedChannel::BeginMainFrame( 233 void ThreadedChannel::BeginMainFrame(
217 scoped_ptr<BeginMainFrameAndCommitState> begin_main_frame_state) { 234 scoped_ptr<BeginMainFrameAndCommitState> begin_main_frame_state) {
218 MainThreadTaskRunner()->PostTask( 235 MainThreadTaskRunner()->PostTask(
219 FROM_HERE, 236 FROM_HERE,
220 base::Bind(&ProxyMain::BeginMainFrame, proxy_main_->GetMainWeakPtr(), 237 base::Bind(&ProxyMain::BeginMainFrame, proxy_main_->GetWeakPtr(),
221 base::Passed(&begin_main_frame_state))); 238 base::Passed(&begin_main_frame_state)));
222 } 239 }
223 240
224 ThreadedChannel::~ThreadedChannel() { 241 ThreadedChannel::~ThreadedChannel() {
225 TRACE_EVENT0("cc", "ThreadChannel::~ThreadChannel"); 242 TRACE_EVENT0("cc", "ThreadChannel::~ThreadChannel");
226 } 243 }
227 244
245 bool ThreadedChannel::IsInitialized() const {
246 return !!proxy_impl_.get();
247 }
248
228 base::SingleThreadTaskRunner* ThreadedChannel::MainThreadTaskRunner() const { 249 base::SingleThreadTaskRunner* ThreadedChannel::MainThreadTaskRunner() const {
229 return main_task_runner_.get(); 250 return proxy_main_->MainThreadTaskRunner();
230 } 251 }
231 252
232 base::SingleThreadTaskRunner* ThreadedChannel::ImplThreadTaskRunner() const { 253 base::SingleThreadTaskRunner* ThreadedChannel::ImplThreadTaskRunner() const {
233 return impl_task_runner_.get(); 254 return proxy_main_->ImplThreadTaskRunner();
234 } 255 }
235 256
236 } // namespace cc 257 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698