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

Powered by Google App Engine
This is Rietveld 408576698