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

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

Issue 1506023008: [NOT LANDED] Revert of cc: Split ThreadProxy into ProxyMain and ProxyImpl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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
« no previous file with comments | « cc/trees/threaded_channel.h ('k') | cc/trees/threaded_channel_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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"
11 10
12 namespace cc { 11 namespace cc {
13 12
14 ThreadedChannel::ThreadedChannel(ProxyMain* proxy_main, 13 scoped_ptr<ThreadedChannel> ThreadedChannel::Create(
14 ThreadProxy* thread_proxy,
15 TaskRunnerProvider* task_runner_provider) {
16 return make_scoped_ptr(
17 new ThreadedChannel(thread_proxy, task_runner_provider));
18 }
19
20 ThreadedChannel::ThreadedChannel(ThreadProxy* thread_proxy,
15 TaskRunnerProvider* task_runner_provider) 21 TaskRunnerProvider* task_runner_provider)
16 : task_runner_provider_(task_runner_provider), 22 : proxy_main_(thread_proxy),
17 main_thread_only_vars_unsafe_(proxy_main), 23 proxy_impl_(thread_proxy),
18 compositor_thread_vars_unsafe_( 24 task_runner_provider_(task_runner_provider) {}
19 main()
20 .proxy_main_weak_factory.GetWeakPtr()) {
21 DCHECK(IsMainThread());
22 }
23
24 ThreadedChannel::~ThreadedChannel() {
25 TRACE_EVENT0("cc", "ThreadChannel::~ThreadChannel");
26 DCHECK(IsMainThread());
27 DCHECK(!IsInitialized());
28 }
29 25
30 void ThreadedChannel::SetThrottleFrameProductionOnImpl(bool throttle) { 26 void ThreadedChannel::SetThrottleFrameProductionOnImpl(bool throttle) {
31 DCHECK(IsMainThread());
32 ImplThreadTaskRunner()->PostTask( 27 ImplThreadTaskRunner()->PostTask(
33 FROM_HERE, base::Bind(&ProxyImpl::SetThrottleFrameProductionOnImpl, 28 FROM_HERE, base::Bind(&ProxyImpl::SetThrottleFrameProductionOnImpl,
34 proxy_impl_weak_ptr_, throttle)); 29 proxy_impl_->GetImplWeakPtr(), throttle));
35 } 30 }
36 31
37 void ThreadedChannel::UpdateTopControlsStateOnImpl(TopControlsState constraints, 32 void ThreadedChannel::UpdateTopControlsStateOnImpl(TopControlsState constraints,
38 TopControlsState current, 33 TopControlsState current,
39 bool animate) { 34 bool animate) {
40 DCHECK(IsMainThread()); 35 ImplThreadTaskRunner()->PostTask(
41 ImplThreadTaskRunner()->PostTask( 36 FROM_HERE,
42 FROM_HERE, 37 base::Bind(&ProxyImpl::UpdateTopControlsStateOnImpl,
43 base::Bind(&ProxyImpl::UpdateTopControlsStateOnImpl, proxy_impl_weak_ptr_, 38 proxy_impl_->GetImplWeakPtr(), constraints, current, animate));
44 constraints, current, animate));
45 } 39 }
46 40
47 void ThreadedChannel::InitializeOutputSurfaceOnImpl( 41 void ThreadedChannel::InitializeOutputSurfaceOnImpl(
48 OutputSurface* output_surface) { 42 OutputSurface* output_surface) {
49 DCHECK(IsMainThread());
50 ImplThreadTaskRunner()->PostTask( 43 ImplThreadTaskRunner()->PostTask(
51 FROM_HERE, base::Bind(&ProxyImpl::InitializeOutputSurfaceOnImpl, 44 FROM_HERE, base::Bind(&ProxyImpl::InitializeOutputSurfaceOnImpl,
52 proxy_impl_weak_ptr_, output_surface)); 45 proxy_impl_->GetImplWeakPtr(), output_surface));
53 } 46 }
54 47
55 void ThreadedChannel::MainThreadHasStoppedFlingingOnImpl() { 48 void ThreadedChannel::MainThreadHasStoppedFlingingOnImpl() {
56 DCHECK(IsMainThread());
57 ImplThreadTaskRunner()->PostTask( 49 ImplThreadTaskRunner()->PostTask(
58 FROM_HERE, base::Bind(&ProxyImpl::MainThreadHasStoppedFlingingOnImpl, 50 FROM_HERE, base::Bind(&ProxyImpl::MainThreadHasStoppedFlingingOnImpl,
59 proxy_impl_weak_ptr_)); 51 proxy_impl_->GetImplWeakPtr()));
60 } 52 }
61 53
62 void ThreadedChannel::SetInputThrottledUntilCommitOnImpl(bool is_throttled) { 54 void ThreadedChannel::SetInputThrottledUntilCommitOnImpl(bool is_throttled) {
63 DCHECK(IsMainThread());
64 ImplThreadTaskRunner()->PostTask( 55 ImplThreadTaskRunner()->PostTask(
65 FROM_HERE, base::Bind(&ProxyImpl::SetInputThrottledUntilCommitOnImpl, 56 FROM_HERE, base::Bind(&ProxyImpl::SetInputThrottledUntilCommitOnImpl,
66 proxy_impl_weak_ptr_, is_throttled)); 57 proxy_impl_->GetImplWeakPtr(), is_throttled));
67 } 58 }
68 59
69 void ThreadedChannel::SetDeferCommitsOnImpl(bool defer_commits) { 60 void ThreadedChannel::SetDeferCommitsOnImpl(bool defer_commits) {
70 DCHECK(IsMainThread());
71 ImplThreadTaskRunner()->PostTask( 61 ImplThreadTaskRunner()->PostTask(
72 FROM_HERE, base::Bind(&ProxyImpl::SetDeferCommitsOnImpl, 62 FROM_HERE, base::Bind(&ProxyImpl::SetDeferCommitsOnImpl,
73 proxy_impl_weak_ptr_, defer_commits)); 63 proxy_impl_->GetImplWeakPtr(), defer_commits));
64 }
65
66 void ThreadedChannel::FinishAllRenderingOnImpl(CompletionEvent* completion) {
67 ImplThreadTaskRunner()->PostTask(
68 FROM_HERE, base::Bind(&ProxyImpl::FinishAllRenderingOnImpl,
69 proxy_impl_->GetImplWeakPtr(), completion));
74 } 70 }
75 71
76 void ThreadedChannel::SetNeedsCommitOnImpl() { 72 void ThreadedChannel::SetNeedsCommitOnImpl() {
77 DCHECK(IsMainThread()); 73 ImplThreadTaskRunner()->PostTask(FROM_HERE,
78 ImplThreadTaskRunner()->PostTask( 74 base::Bind(&ProxyImpl::SetNeedsCommitOnImpl,
79 FROM_HERE, 75 proxy_impl_->GetImplWeakPtr()));
80 base::Bind(&ProxyImpl::SetNeedsCommitOnImpl, proxy_impl_weak_ptr_));
81 } 76 }
82 77
83 void ThreadedChannel::BeginMainFrameAbortedOnImpl( 78 void ThreadedChannel::BeginMainFrameAbortedOnImpl(
84 CommitEarlyOutReason reason, 79 CommitEarlyOutReason reason,
85 base::TimeTicks main_thread_start_time) { 80 base::TimeTicks main_thread_start_time) {
86 DCHECK(IsMainThread()); 81 ImplThreadTaskRunner()->PostTask(
87 ImplThreadTaskRunner()->PostTask( 82 FROM_HERE, base::Bind(&ProxyImpl::BeginMainFrameAbortedOnImpl,
88 FROM_HERE, 83 proxy_impl_->GetImplWeakPtr(), reason,
89 base::Bind(&ProxyImpl::BeginMainFrameAbortedOnImpl, proxy_impl_weak_ptr_, 84 main_thread_start_time));
90 reason, main_thread_start_time));
91 } 85 }
92 86
93 void ThreadedChannel::SetNeedsRedrawOnImpl(const gfx::Rect& damage_rect) { 87 void ThreadedChannel::SetNeedsRedrawOnImpl(const gfx::Rect& damage_rect) {
94 DCHECK(IsMainThread());
95 ImplThreadTaskRunner()->PostTask( 88 ImplThreadTaskRunner()->PostTask(
96 FROM_HERE, base::Bind(&ProxyImpl::SetNeedsRedrawOnImpl, 89 FROM_HERE, base::Bind(&ProxyImpl::SetNeedsRedrawOnImpl,
97 proxy_impl_weak_ptr_, damage_rect)); 90 proxy_impl_->GetImplWeakPtr(), damage_rect));
98 }
99
100 void ThreadedChannel::SetVisibleOnImpl(bool visible) {
101 DCHECK(IsMainThread());
102 ImplThreadTaskRunner()->PostTask(
103 FROM_HERE,
104 base::Bind(&ProxyImpl::SetVisibleOnImpl, proxy_impl_weak_ptr_, visible));
105 }
106
107 void ThreadedChannel::FinishAllRenderingOnImpl(CompletionEvent* completion) {
108 DCHECK(IsMainThread());
109 ImplThreadTaskRunner()->PostTask(
110 FROM_HERE, base::Bind(&ProxyImpl::FinishAllRenderingOnImpl,
111 proxy_impl_weak_ptr_, completion));
112 }
113
114 void ThreadedChannel::ReleaseOutputSurfaceOnImpl(CompletionEvent* completion) {
115 DCHECK(IsMainThread());
116 ImplThreadTaskRunner()->PostTask(
117 FROM_HERE, base::Bind(&ProxyImpl::ReleaseOutputSurfaceOnImpl,
118 proxy_impl_weak_ptr_, completion));
119 }
120
121 void ThreadedChannel::MainFrameWillHappenOnImplForTesting(
122 CompletionEvent* completion,
123 bool* main_frame_will_happen) {
124 DCHECK(IsMainThread());
125 ImplThreadTaskRunner()->PostTask(
126 FROM_HERE,
127 base::Bind(&ProxyImpl::MainFrameWillHappenOnImplForTesting,
128 proxy_impl_weak_ptr_, completion, main_frame_will_happen));
129 } 91 }
130 92
131 void ThreadedChannel::StartCommitOnImpl(CompletionEvent* completion, 93 void ThreadedChannel::StartCommitOnImpl(CompletionEvent* completion,
132 LayerTreeHost* layer_tree_host, 94 LayerTreeHost* layer_tree_host,
133 base::TimeTicks main_thread_start_time, 95 base::TimeTicks main_thread_start_time,
134 bool hold_commit_for_activation) { 96 bool hold_commit_for_activation) {
135 DCHECK(IsMainThread()); 97 ImplThreadTaskRunner()->PostTask(
136 ImplThreadTaskRunner()->PostTask( 98 FROM_HERE,
137 FROM_HERE, base::Bind(&ProxyImpl::StartCommitOnImpl, proxy_impl_weak_ptr_, 99 base::Bind(&ProxyImpl::StartCommitOnImpl, proxy_impl_->GetImplWeakPtr(),
138 completion, layer_tree_host, main_thread_start_time, 100 completion, layer_tree_host, main_thread_start_time,
139 hold_commit_for_activation)); 101 hold_commit_for_activation));
140 } 102 }
141 103
142 void ThreadedChannel::SynchronouslyInitializeImpl( 104 void ThreadedChannel::InitializeImplOnImpl(CompletionEvent* completion,
143 LayerTreeHost* layer_tree_host, 105 LayerTreeHost* layer_tree_host) {
144 scoped_ptr<BeginFrameSource> external_begin_frame_source) { 106 ImplThreadTaskRunner()->PostTask(
145 TRACE_EVENT0("cc", "ThreadChannel::SynchronouslyInitializeImpl"); 107 FROM_HERE,
146 DCHECK(IsMainThread()); 108 base::Bind(&ProxyImpl::InitializeImplOnImpl,
147 { 109 base::Unretained(proxy_impl_), completion, layer_tree_host));
148 DebugScopedSetMainThreadBlocked main_thread_blocked(task_runner_provider_); 110 }
149 CompletionEvent completion; 111
150 ImplThreadTaskRunner()->PostTask( 112 void ThreadedChannel::LayerTreeHostClosedOnImpl(CompletionEvent* completion) {
151 FROM_HERE, 113 ImplThreadTaskRunner()->PostTask(
152 base::Bind(&ThreadedChannel::InitializeImplOnImpl, 114 FROM_HERE, base::Bind(&ProxyImpl::LayerTreeHostClosedOnImpl,
153 base::Unretained(this), &completion, layer_tree_host, 115 proxy_impl_->GetImplWeakPtr(), completion));
154 base::Passed(&external_begin_frame_source))); 116 proxy_impl_ = nullptr;
155 completion.Wait(); 117 }
156 } 118
157 main().initialized = true; 119 void ThreadedChannel::SetVisibleOnImpl(bool visible) {
158 } 120 ImplThreadTaskRunner()->PostTask(
159 121 FROM_HERE, base::Bind(&ProxyImpl::SetVisibleOnImpl,
160 void ThreadedChannel::SynchronouslyCloseImpl() { 122 proxy_impl_->GetImplWeakPtr(), visible));
161 TRACE_EVENT0("cc", "ThreadChannel::~SynchronouslyCloseImpl"); 123 }
162 DCHECK(IsMainThread()); 124
163 125 void ThreadedChannel::ReleaseOutputSurfaceOnImpl(CompletionEvent* completion) {
164 // Synchronously finishes pending GL operations and deletes the impl. 126 ImplThreadTaskRunner()->PostTask(
165 // The two steps are done as separate post tasks, so that tasks posted 127 FROM_HERE, base::Bind(&ProxyImpl::ReleaseOutputSurfaceOnImpl,
166 // by the GL implementation due to the Finish can be executed by the 128 proxy_impl_->GetImplWeakPtr(), completion));
167 // renderer before shutting it down. 129 }
168 { 130
169 DebugScopedSetMainThreadBlocked main_thread_blocked(task_runner_provider_); 131 void ThreadedChannel::FinishGLOnImpl(CompletionEvent* completion) {
170 CompletionEvent completion; 132 ImplThreadTaskRunner()->PostTask(
171 ImplThreadTaskRunner()->PostTask( 133 FROM_HERE, base::Bind(&ProxyImpl::FinishGLOnImpl,
172 FROM_HERE, base::Bind(&ProxyImpl::FinishGLOnImpl, proxy_impl_weak_ptr_, 134 proxy_impl_->GetImplWeakPtr(), completion));
173 &completion)); 135 }
174 completion.Wait(); 136
175 } 137 void ThreadedChannel::MainFrameWillHappenOnImplForTesting(
176 { 138 CompletionEvent* completion,
177 DebugScopedSetMainThreadBlocked main_thread_blocked(task_runner_provider_); 139 bool* main_frame_will_happen) {
178 CompletionEvent completion; 140 ImplThreadTaskRunner()->PostTask(
179 ImplThreadTaskRunner()->PostTask( 141 FROM_HERE, base::Bind(&ProxyImpl::MainFrameWillHappenOnImplForTesting,
180 FROM_HERE, base::Bind(&ThreadedChannel::CloseImplOnImpl, 142 proxy_impl_->GetImplWeakPtr(), completion,
181 base::Unretained(this), &completion)); 143 main_frame_will_happen));
182 completion.Wait();
183 }
184 main().proxy_main_weak_factory.InvalidateWeakPtrs();
185 main().initialized = false;
186 } 144 }
187 145
188 void ThreadedChannel::DidCompleteSwapBuffers() { 146 void ThreadedChannel::DidCompleteSwapBuffers() {
189 DCHECK(IsImplThread());
190 MainThreadTaskRunner()->PostTask( 147 MainThreadTaskRunner()->PostTask(
191 FROM_HERE, base::Bind(&ProxyMain::DidCompleteSwapBuffers, 148 FROM_HERE, base::Bind(&ProxyMain::DidCompleteSwapBuffers,
192 impl().proxy_main_weak_ptr)); 149 proxy_main_->GetMainWeakPtr()));
193 } 150 }
194 151
195 void ThreadedChannel::SetRendererCapabilitiesMainCopy( 152 void ThreadedChannel::SetRendererCapabilitiesMainCopy(
196 const RendererCapabilities& capabilities) { 153 const RendererCapabilities& capabilities) {
197 DCHECK(IsImplThread()); 154 MainThreadTaskRunner()->PostTask(
198 MainThreadTaskRunner()->PostTask( 155 FROM_HERE, base::Bind(&ProxyMain::SetRendererCapabilitiesMainCopy,
199 FROM_HERE, base::Bind(&ProxyMain::SetRendererCapabilities, 156 proxy_main_->GetMainWeakPtr(), capabilities));
200 impl().proxy_main_weak_ptr, capabilities));
201 } 157 }
202 158
203 void ThreadedChannel::BeginMainFrameNotExpectedSoon() { 159 void ThreadedChannel::BeginMainFrameNotExpectedSoon() {
204 DCHECK(IsImplThread());
205 MainThreadTaskRunner()->PostTask( 160 MainThreadTaskRunner()->PostTask(
206 FROM_HERE, base::Bind(&ProxyMain::BeginMainFrameNotExpectedSoon, 161 FROM_HERE, base::Bind(&ProxyMain::BeginMainFrameNotExpectedSoon,
207 impl().proxy_main_weak_ptr)); 162 proxy_main_->GetMainWeakPtr()));
208 } 163 }
209 164
210 void ThreadedChannel::DidCommitAndDrawFrame() { 165 void ThreadedChannel::DidCommitAndDrawFrame() {
211 DCHECK(IsImplThread());
212 MainThreadTaskRunner()->PostTask(FROM_HERE, 166 MainThreadTaskRunner()->PostTask(FROM_HERE,
213 base::Bind(&ProxyMain::DidCommitAndDrawFrame, 167 base::Bind(&ProxyMain::DidCommitAndDrawFrame,
214 impl().proxy_main_weak_ptr)); 168 proxy_main_->GetMainWeakPtr()));
215 } 169 }
216 170
217 void ThreadedChannel::SetAnimationEvents( 171 void ThreadedChannel::SetAnimationEvents(
218 scoped_ptr<AnimationEventsVector> queue) { 172 scoped_ptr<AnimationEventsVector> queue) {
219 DCHECK(IsImplThread()); 173 MainThreadTaskRunner()->PostTask(
220 MainThreadTaskRunner()->PostTask( 174 FROM_HERE,
221 FROM_HERE, base::Bind(&ProxyMain::SetAnimationEvents, 175 base::Bind(&ProxyMain::SetAnimationEvents, proxy_main_->GetMainWeakPtr(),
222 impl().proxy_main_weak_ptr, base::Passed(&queue))); 176 base::Passed(&queue)));
223 } 177 }
224 178
225 void ThreadedChannel::DidLoseOutputSurface() { 179 void ThreadedChannel::DidLoseOutputSurface() {
226 DCHECK(IsImplThread()); 180 MainThreadTaskRunner()->PostTask(FROM_HERE,
227 MainThreadTaskRunner()->PostTask( 181 base::Bind(&ProxyMain::DidLoseOutputSurface,
228 FROM_HERE, 182 proxy_main_->GetMainWeakPtr()));
229 base::Bind(&ProxyMain::DidLoseOutputSurface, impl().proxy_main_weak_ptr));
230 } 183 }
231 184
232 void ThreadedChannel::RequestNewOutputSurface() { 185 void ThreadedChannel::RequestNewOutputSurface() {
233 DCHECK(IsImplThread());
234 MainThreadTaskRunner()->PostTask( 186 MainThreadTaskRunner()->PostTask(
235 FROM_HERE, base::Bind(&ProxyMain::RequestNewOutputSurface, 187 FROM_HERE, base::Bind(&ProxyMain::RequestNewOutputSurface,
236 impl().proxy_main_weak_ptr)); 188 proxy_main_->GetMainWeakPtr()));
237 } 189 }
238 190
239 void ThreadedChannel::DidInitializeOutputSurface( 191 void ThreadedChannel::DidInitializeOutputSurface(
240 bool success, 192 bool success,
241 const RendererCapabilities& capabilities) { 193 const RendererCapabilities& capabilities) {
242 DCHECK(IsImplThread()); 194 MainThreadTaskRunner()->PostTask(
243 MainThreadTaskRunner()->PostTask( 195 FROM_HERE,
244 FROM_HERE, base::Bind(&ProxyMain::DidInitializeOutputSurface, 196 base::Bind(&ProxyMain::DidInitializeOutputSurface,
245 impl().proxy_main_weak_ptr, success, capabilities)); 197 proxy_main_->GetMainWeakPtr(), success, capabilities));
246 } 198 }
247 199
248 void ThreadedChannel::DidCompletePageScaleAnimation() { 200 void ThreadedChannel::DidCompletePageScaleAnimation() {
249 DCHECK(IsImplThread());
250 MainThreadTaskRunner()->PostTask( 201 MainThreadTaskRunner()->PostTask(
251 FROM_HERE, base::Bind(&ProxyMain::DidCompletePageScaleAnimation, 202 FROM_HERE, base::Bind(&ProxyMain::DidCompletePageScaleAnimation,
252 impl().proxy_main_weak_ptr)); 203 proxy_main_->GetMainWeakPtr()));
253 } 204 }
254 205
255 void ThreadedChannel::PostFrameTimingEventsOnMain( 206 void ThreadedChannel::PostFrameTimingEventsOnMain(
256 scoped_ptr<FrameTimingTracker::CompositeTimingSet> composite_events, 207 scoped_ptr<FrameTimingTracker::CompositeTimingSet> composite_events,
257 scoped_ptr<FrameTimingTracker::MainFrameTimingSet> main_frame_events) { 208 scoped_ptr<FrameTimingTracker::MainFrameTimingSet> main_frame_events) {
258 DCHECK(IsImplThread());
259 MainThreadTaskRunner()->PostTask( 209 MainThreadTaskRunner()->PostTask(
260 FROM_HERE, base::Bind(&ProxyMain::PostFrameTimingEventsOnMain, 210 FROM_HERE, base::Bind(&ProxyMain::PostFrameTimingEventsOnMain,
261 impl().proxy_main_weak_ptr, 211 proxy_main_->GetMainWeakPtr(),
262 base::Passed(std::move(composite_events)), 212 base::Passed(std::move(composite_events)),
263 base::Passed(std::move(main_frame_events)))); 213 base::Passed(std::move(main_frame_events))));
264 } 214 }
265 215
266 void ThreadedChannel::BeginMainFrame( 216 void ThreadedChannel::BeginMainFrame(
267 scoped_ptr<BeginMainFrameAndCommitState> begin_main_frame_state) { 217 scoped_ptr<BeginMainFrameAndCommitState> begin_main_frame_state) {
268 DCHECK(IsImplThread()); 218 MainThreadTaskRunner()->PostTask(
269 MainThreadTaskRunner()->PostTask( 219 FROM_HERE,
270 FROM_HERE, 220 base::Bind(&ProxyMain::BeginMainFrame, proxy_main_->GetMainWeakPtr(),
271 base::Bind(&ProxyMain::BeginMainFrame, impl().proxy_main_weak_ptr,
272 base::Passed(&begin_main_frame_state))); 221 base::Passed(&begin_main_frame_state)));
273 } 222 }
274 223
275 ProxyImpl* ThreadedChannel::GetProxyImplForTesting() const { 224 ThreadedChannel::~ThreadedChannel() {
276 return impl().proxy_impl.get(); 225 TRACE_EVENT0("cc", "ThreadChannel::~ThreadChannel");
277 }
278
279 scoped_ptr<ProxyImpl> ThreadedChannel::CreateProxyImpl(
280 ChannelImpl* channel_impl,
281 LayerTreeHost* layer_tree_host,
282 TaskRunnerProvider* task_runner_provider,
283 scoped_ptr<BeginFrameSource> external_begin_frame_source) {
284 DCHECK(IsImplThread());
285 return ProxyImpl::Create(channel_impl, layer_tree_host, task_runner_provider,
286 std::move(external_begin_frame_source));
287 }
288
289 void ThreadedChannel::InitializeImplOnImpl(
290 CompletionEvent* completion,
291 LayerTreeHost* layer_tree_host,
292 scoped_ptr<BeginFrameSource> external_begin_frame_source) {
293 DCHECK(IsImplThread());
294 impl().proxy_impl =
295 CreateProxyImpl(this, layer_tree_host, task_runner_provider_,
296 std::move(external_begin_frame_source));
297 impl().proxy_impl_weak_factory = make_scoped_ptr(
298 new base::WeakPtrFactory<ProxyImpl>(impl().proxy_impl.get()));
299 proxy_impl_weak_ptr_ = impl().proxy_impl_weak_factory->GetWeakPtr();
300 completion->Signal();
301 }
302
303 void ThreadedChannel::CloseImplOnImpl(CompletionEvent* completion) {
304 DCHECK(IsImplThread());
305
306 // We must destroy the factory and ensure that the ProxyImpl weak pointers are
307 // invalidated before destroying proxy_impl.
308 impl().proxy_impl_weak_factory.reset();
309
310 impl().proxy_impl.reset();
311 completion->Signal();
312 }
313
314 bool ThreadedChannel::IsInitialized() const {
315 return main().initialized;
316 } 226 }
317 227
318 base::SingleThreadTaskRunner* ThreadedChannel::MainThreadTaskRunner() const { 228 base::SingleThreadTaskRunner* ThreadedChannel::MainThreadTaskRunner() const {
319 return task_runner_provider_->MainThreadTaskRunner(); 229 return task_runner_provider_->MainThreadTaskRunner();
320 } 230 }
321 231
322 base::SingleThreadTaskRunner* ThreadedChannel::ImplThreadTaskRunner() const { 232 base::SingleThreadTaskRunner* ThreadedChannel::ImplThreadTaskRunner() const {
323 return task_runner_provider_->ImplThreadTaskRunner(); 233 return task_runner_provider_->ImplThreadTaskRunner();
324 } 234 }
325 235
326 bool ThreadedChannel::IsMainThread() const {
327 return task_runner_provider_->IsMainThread();
328 }
329
330 bool ThreadedChannel::IsImplThread() const {
331 return task_runner_provider_->IsImplThread();
332 }
333
334 ThreadedChannel::MainThreadOnly& ThreadedChannel::main() {
335 DCHECK(task_runner_provider_->IsMainThread());
336 return main_thread_only_vars_unsafe_;
337 }
338
339 const ThreadedChannel::MainThreadOnly& ThreadedChannel::main() const {
340 DCHECK(task_runner_provider_->IsMainThread());
341 return main_thread_only_vars_unsafe_;
342 }
343
344 ThreadedChannel::CompositorThreadOnly& ThreadedChannel::impl() {
345 DCHECK(task_runner_provider_->IsImplThread());
346 return compositor_thread_vars_unsafe_;
347 }
348
349 const ThreadedChannel::CompositorThreadOnly& ThreadedChannel::impl() const {
350 DCHECK(task_runner_provider_->IsImplThread());
351 return compositor_thread_vars_unsafe_;
352 }
353
354 ThreadedChannel::MainThreadOnly::MainThreadOnly(ProxyMain* proxy_main)
355 : proxy_main_weak_factory(proxy_main), initialized(false) {}
356
357 ThreadedChannel::MainThreadOnly::~MainThreadOnly() {}
358
359 ThreadedChannel::CompositorThreadOnly::CompositorThreadOnly(
360 base::WeakPtr<ProxyMain> proxy_main_weak_ptr)
361 : proxy_main_weak_ptr(proxy_main_weak_ptr) {}
362
363 ThreadedChannel::CompositorThreadOnly::~CompositorThreadOnly() {}
364
365 scoped_ptr<ThreadedChannel> ThreadedChannel::Create(
366 ProxyMain* proxy_main,
367 TaskRunnerProvider* task_runner_provider) {
368 return make_scoped_ptr(new ThreadedChannel(proxy_main, task_runner_provider));
369 }
370
371 } // namespace cc 236 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/threaded_channel.h ('k') | cc/trees/threaded_channel_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698