OLD | NEW |
---|---|
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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/thread_proxy.h" | 5 #include "cc/trees/thread_proxy.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
132 main().channel_main = threaded_channel_.get(); | 132 main().channel_main = threaded_channel_.get(); |
133 } | 133 } |
134 | 134 |
135 void ThreadProxy::FinishAllRendering() { | 135 void ThreadProxy::FinishAllRendering() { |
136 DCHECK(Proxy::IsMainThread()); | 136 DCHECK(Proxy::IsMainThread()); |
137 DCHECK(!main().defer_commits); | 137 DCHECK(!main().defer_commits); |
138 | 138 |
139 // Make sure all GL drawing is finished on the impl thread. | 139 // Make sure all GL drawing is finished on the impl thread. |
140 DebugScopedSetMainThreadBlocked main_thread_blocked(this); | 140 DebugScopedSetMainThreadBlocked main_thread_blocked(this); |
141 CompletionEvent completion; | 141 CompletionEvent completion; |
142 Proxy::ImplThreadTaskRunner()->PostTask( | 142 main().channel_main->FinishAllRenderingOnImpl(&completion); |
vmpstr
2015/10/15 20:25:04
It's a bit awkward for me that channel_main refers
Khushal
2015/10/15 23:45:51
Since the class is split into the main and impl co
vmpstr
2015/10/17 00:05:51
I'm not sure, that's also very verbose. I guess we
Khushal
2015/10/17 02:02:48
main() wouldn't be there when ProxyMain comes. The
| |
143 FROM_HERE, | |
144 base::Bind(&ThreadProxy::FinishAllRenderingOnImplThread, | |
145 impl_thread_weak_ptr_, | |
146 &completion)); | |
147 completion.Wait(); | 143 completion.Wait(); |
vmpstr
2015/10/15 20:25:04
The typical thing to do is create a completion / p
Khushal
2015/10/15 23:45:50
Right now completion events make it explicit to me
vmpstr
2015/10/17 00:05:51
Specifically what logic are you referring to? I mo
Khushal
2015/10/17 02:02:48
I like the idea of keeping it completely in the ch
| |
148 } | 144 } |
149 | 145 |
150 bool ThreadProxy::IsStarted() const { | 146 bool ThreadProxy::IsStarted() const { |
151 DCHECK(Proxy::IsMainThread()); | 147 DCHECK(Proxy::IsMainThread()); |
152 return main().started; | 148 return main().started; |
153 } | 149 } |
154 | 150 |
155 bool ThreadProxy::CommitToActiveTree() const { | 151 bool ThreadProxy::CommitToActiveTree() const { |
156 // With ThreadProxy, we use a pending tree and activate it once it's ready to | 152 // With ThreadProxy, we use a pending tree and activate it once it's ready to |
157 // draw to allow input to modify the active tree and draw during raster. | 153 // draw to allow input to modify the active tree and draw during raster. |
158 return false; | 154 return false; |
159 } | 155 } |
160 | 156 |
161 void ThreadProxy::SetVisible(bool visible) { | 157 void ThreadProxy::SetVisible(bool visible) { |
162 TRACE_EVENT1("cc", "ThreadProxy::SetVisible", "visible", visible); | 158 TRACE_EVENT1("cc", "ThreadProxy::SetVisible", "visible", visible); |
163 DebugScopedSetMainThreadBlocked main_thread_blocked(this); | 159 DebugScopedSetMainThreadBlocked main_thread_blocked(this); |
164 | 160 |
165 CompletionEvent completion; | 161 CompletionEvent completion; |
166 Proxy::ImplThreadTaskRunner()->PostTask( | 162 main().channel_main->SetVisibleOnImpl(&completion, visible); |
167 FROM_HERE, | |
168 base::Bind(&ThreadProxy::SetVisibleOnImplThread, | |
169 impl_thread_weak_ptr_, | |
170 &completion, | |
171 visible)); | |
172 completion.Wait(); | 163 completion.Wait(); |
173 } | 164 } |
174 | 165 |
175 void ThreadProxy::SetVisibleOnImplThread(CompletionEvent* completion, | 166 void ThreadProxy::SetVisibleOnImpl(CompletionEvent* completion, bool visible) { |
176 bool visible) { | |
177 TRACE_EVENT1("cc", "ThreadProxy::SetVisibleOnImplThread", "visible", visible); | 167 TRACE_EVENT1("cc", "ThreadProxy::SetVisibleOnImplThread", "visible", visible); |
178 impl().layer_tree_host_impl->SetVisible(visible); | 168 impl().layer_tree_host_impl->SetVisible(visible); |
179 impl().scheduler->SetVisible(visible); | 169 impl().scheduler->SetVisible(visible); |
180 completion->Signal(); | 170 completion->Signal(); |
181 } | 171 } |
182 | 172 |
183 void ThreadProxy::SetThrottleFrameProduction(bool throttle) { | 173 void ThreadProxy::SetThrottleFrameProduction(bool throttle) { |
184 TRACE_EVENT1("cc", "ThreadProxy::SetThrottleFrameProduction", "throttle", | 174 TRACE_EVENT1("cc", "ThreadProxy::SetThrottleFrameProduction", "throttle", |
185 throttle); | 175 throttle); |
186 main().channel_main->SetThrottleFrameProductionOnImpl(throttle); | 176 main().channel_main->SetThrottleFrameProductionOnImpl(throttle); |
(...skipping 10 matching lines...) Expand all Loading... | |
197 DCHECK(IsMainThread()); | 187 DCHECK(IsMainThread()); |
198 layer_tree_host()->DidLoseOutputSurface(); | 188 layer_tree_host()->DidLoseOutputSurface(); |
199 } | 189 } |
200 | 190 |
201 void ThreadProxy::RequestNewOutputSurface() { | 191 void ThreadProxy::RequestNewOutputSurface() { |
202 DCHECK(IsMainThread()); | 192 DCHECK(IsMainThread()); |
203 layer_tree_host()->RequestNewOutputSurface(); | 193 layer_tree_host()->RequestNewOutputSurface(); |
204 } | 194 } |
205 | 195 |
206 void ThreadProxy::SetOutputSurface(OutputSurface* output_surface) { | 196 void ThreadProxy::SetOutputSurface(OutputSurface* output_surface) { |
207 Proxy::ImplThreadTaskRunner()->PostTask( | 197 main().channel_main->InitializeOutputSurfaceOnImpl(output_surface); |
208 FROM_HERE, base::Bind(&ThreadProxy::InitializeOutputSurfaceOnImplThread, | |
209 impl_thread_weak_ptr_, output_surface)); | |
210 } | 198 } |
211 | 199 |
212 void ThreadProxy::ReleaseOutputSurface() { | 200 void ThreadProxy::ReleaseOutputSurface() { |
213 DCHECK(IsMainThread()); | 201 DCHECK(IsMainThread()); |
214 DCHECK(layer_tree_host()->output_surface_lost()); | 202 DCHECK(layer_tree_host()->output_surface_lost()); |
215 | 203 |
216 DebugScopedSetMainThreadBlocked main_thread_blocked(this); | 204 DebugScopedSetMainThreadBlocked main_thread_blocked(this); |
217 CompletionEvent completion; | 205 CompletionEvent completion; |
218 Proxy::ImplThreadTaskRunner()->PostTask( | 206 main().channel_main->ReleaseOutputSurfaceOnImpl(&completion); |
219 FROM_HERE, base::Bind(&ThreadProxy::ReleaseOutputSurfaceOnImplThread, | |
220 impl_thread_weak_ptr_, &completion)); | |
221 completion.Wait(); | 207 completion.Wait(); |
222 } | 208 } |
223 | 209 |
224 void ThreadProxy::DidInitializeOutputSurface( | 210 void ThreadProxy::DidInitializeOutputSurface( |
225 bool success, | 211 bool success, |
226 const RendererCapabilities& capabilities) { | 212 const RendererCapabilities& capabilities) { |
227 TRACE_EVENT0("cc", "ThreadProxy::DidInitializeOutputSurface"); | 213 TRACE_EVENT0("cc", "ThreadProxy::DidInitializeOutputSurface"); |
228 DCHECK(IsMainThread()); | 214 DCHECK(IsMainThread()); |
229 | 215 |
230 if (!success) { | 216 if (!success) { |
231 layer_tree_host()->DidFailToInitializeOutputSurface(); | 217 layer_tree_host()->DidFailToInitializeOutputSurface(); |
232 return; | 218 return; |
233 } | 219 } |
234 main().renderer_capabilities_main_thread_copy = capabilities; | 220 main().renderer_capabilities_main_thread_copy = capabilities; |
235 layer_tree_host()->DidInitializeOutputSurface(); | 221 layer_tree_host()->DidInitializeOutputSurface(); |
236 } | 222 } |
237 | 223 |
238 void ThreadProxy::SetRendererCapabilitiesMainThreadCopy( | 224 void ThreadProxy::SetRendererCapabilitiesMainCopy( |
239 const RendererCapabilities& capabilities) { | 225 const RendererCapabilities& capabilities) { |
240 main().renderer_capabilities_main_thread_copy = capabilities; | 226 main().renderer_capabilities_main_thread_copy = capabilities; |
241 } | 227 } |
242 | 228 |
243 bool ThreadProxy::SendCommitRequestToImplThreadIfNeeded( | 229 bool ThreadProxy::SendCommitRequestToImplThreadIfNeeded( |
244 CommitPipelineStage required_stage) { | 230 CommitPipelineStage required_stage) { |
245 DCHECK(IsMainThread()); | 231 DCHECK(IsMainThread()); |
246 DCHECK_NE(NO_PIPELINE_STAGE, required_stage); | 232 DCHECK_NE(NO_PIPELINE_STAGE, required_stage); |
247 bool already_posted = | 233 bool already_posted = |
248 main().max_requested_pipeline_stage != NO_PIPELINE_STAGE; | 234 main().max_requested_pipeline_stage != NO_PIPELINE_STAGE; |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
301 return; | 287 return; |
302 } | 288 } |
303 if (SendCommitRequestToImplThreadIfNeeded(COMMIT_PIPELINE_STAGE)) { | 289 if (SendCommitRequestToImplThreadIfNeeded(COMMIT_PIPELINE_STAGE)) { |
304 TRACE_EVENT_INSTANT0("cc", "ThreadProxy::SetNeedsCommit", | 290 TRACE_EVENT_INSTANT0("cc", "ThreadProxy::SetNeedsCommit", |
305 TRACE_EVENT_SCOPE_THREAD); | 291 TRACE_EVENT_SCOPE_THREAD); |
306 } | 292 } |
307 } | 293 } |
308 | 294 |
309 void ThreadProxy::UpdateRendererCapabilitiesOnImplThread() { | 295 void ThreadProxy::UpdateRendererCapabilitiesOnImplThread() { |
310 DCHECK(IsImplThread()); | 296 DCHECK(IsImplThread()); |
311 Proxy::MainThreadTaskRunner()->PostTask( | 297 impl().channel_impl->SetRendererCapabilitiesMainCopy( |
312 FROM_HERE, | 298 impl() |
313 base::Bind(&ThreadProxy::SetRendererCapabilitiesMainThreadCopy, | 299 .layer_tree_host_impl->GetRendererCapabilities() |
314 main_thread_weak_ptr_, | 300 .MainThreadCapabilities()); |
315 impl() | |
316 .layer_tree_host_impl->GetRendererCapabilities() | |
317 .MainThreadCapabilities())); | |
318 } | 301 } |
319 | 302 |
320 void ThreadProxy::DidLoseOutputSurfaceOnImplThread() { | 303 void ThreadProxy::DidLoseOutputSurfaceOnImplThread() { |
321 TRACE_EVENT0("cc", "ThreadProxy::DidLoseOutputSurfaceOnImplThread"); | 304 TRACE_EVENT0("cc", "ThreadProxy::DidLoseOutputSurfaceOnImplThread"); |
322 DCHECK(IsImplThread()); | 305 DCHECK(IsImplThread()); |
323 Proxy::MainThreadTaskRunner()->PostTask( | 306 impl().channel_impl->DidLoseOutputSurface(); |
324 FROM_HERE, | |
325 base::Bind(&ThreadProxy::DidLoseOutputSurface, main_thread_weak_ptr_)); | |
326 impl().scheduler->DidLoseOutputSurface(); | 307 impl().scheduler->DidLoseOutputSurface(); |
327 } | 308 } |
328 | 309 |
329 void ThreadProxy::CommitVSyncParameters(base::TimeTicks timebase, | 310 void ThreadProxy::CommitVSyncParameters(base::TimeTicks timebase, |
330 base::TimeDelta interval) { | 311 base::TimeDelta interval) { |
331 impl().scheduler->CommitVSyncParameters(timebase, interval); | 312 impl().scheduler->CommitVSyncParameters(timebase, interval); |
332 } | 313 } |
333 | 314 |
334 void ThreadProxy::SetEstimatedParentDrawTime(base::TimeDelta draw_time) { | 315 void ThreadProxy::SetEstimatedParentDrawTime(base::TimeDelta draw_time) { |
335 impl().scheduler->SetEstimatedParentDrawTime(draw_time); | 316 impl().scheduler->SetEstimatedParentDrawTime(draw_time); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
395 // In tests the layer tree is destroyed after the scheduler is. | 376 // In tests the layer tree is destroyed after the scheduler is. |
396 if (impl().scheduler) | 377 if (impl().scheduler) |
397 impl().scheduler->SetVideoNeedsBeginFrames(needs_begin_frames); | 378 impl().scheduler->SetVideoNeedsBeginFrames(needs_begin_frames); |
398 } | 379 } |
399 | 380 |
400 void ThreadProxy::PostAnimationEventsToMainThreadOnImplThread( | 381 void ThreadProxy::PostAnimationEventsToMainThreadOnImplThread( |
401 scoped_ptr<AnimationEventsVector> events) { | 382 scoped_ptr<AnimationEventsVector> events) { |
402 TRACE_EVENT0("cc", | 383 TRACE_EVENT0("cc", |
403 "ThreadProxy::PostAnimationEventsToMainThreadOnImplThread"); | 384 "ThreadProxy::PostAnimationEventsToMainThreadOnImplThread"); |
404 DCHECK(IsImplThread()); | 385 DCHECK(IsImplThread()); |
405 Proxy::MainThreadTaskRunner()->PostTask( | 386 impl().channel_impl->SetAnimationEvents(events.Pass()); |
406 FROM_HERE, | |
407 base::Bind(&ThreadProxy::SetAnimationEvents, | |
408 main_thread_weak_ptr_, | |
409 base::Passed(&events))); | |
410 } | 387 } |
411 | 388 |
412 bool ThreadProxy::IsInsideDraw() { return impl().inside_draw; } | 389 bool ThreadProxy::IsInsideDraw() { return impl().inside_draw; } |
413 | 390 |
414 void ThreadProxy::SetNeedsRedraw(const gfx::Rect& damage_rect) { | 391 void ThreadProxy::SetNeedsRedraw(const gfx::Rect& damage_rect) { |
415 TRACE_EVENT0("cc", "ThreadProxy::SetNeedsRedraw"); | 392 TRACE_EVENT0("cc", "ThreadProxy::SetNeedsRedraw"); |
416 DCHECK(IsMainThread()); | 393 DCHECK(IsMainThread()); |
417 Proxy::ImplThreadTaskRunner()->PostTask( | 394 Proxy::ImplThreadTaskRunner()->PostTask( |
vmpstr
2015/10/15 20:25:04
Why did you only do this for a particular set of P
Khushal
2015/10/15 23:45:50
I missed this one. Will change it in this patch.
vmpstr
2015/10/17 00:05:51
You can probably do all of the call sites that are
Khushal
2015/10/17 02:02:48
Done.
The only calls left are for initializing and
| |
418 FROM_HERE, | 395 FROM_HERE, |
419 base::Bind(&ThreadProxy::SetNeedsRedrawRectOnImplThread, | 396 base::Bind(&ThreadProxy::SetNeedsRedrawRectOnImplThread, |
420 impl_thread_weak_ptr_, | 397 impl_thread_weak_ptr_, |
421 damage_rect)); | 398 damage_rect)); |
422 } | 399 } |
423 | 400 |
424 void ThreadProxy::SetNextCommitWaitsForActivation() { | 401 void ThreadProxy::SetNextCommitWaitsForActivation() { |
425 DCHECK(IsMainThread()); | 402 DCHECK(IsMainThread()); |
426 DCHECK(!blocked_main().main_thread_inside_commit); | 403 DCHECK(!blocked_main().main_thread_inside_commit); |
427 blocked_main().commit_waits_for_activation = true; | 404 blocked_main().commit_waits_for_activation = true; |
428 } | 405 } |
429 | 406 |
430 void ThreadProxy::SetDeferCommits(bool defer_commits) { | 407 void ThreadProxy::SetDeferCommits(bool defer_commits) { |
431 DCHECK(IsMainThread()); | 408 DCHECK(IsMainThread()); |
432 if (main().defer_commits == defer_commits) | 409 if (main().defer_commits == defer_commits) |
433 return; | 410 return; |
434 | 411 |
435 main().defer_commits = defer_commits; | 412 main().defer_commits = defer_commits; |
436 if (main().defer_commits) | 413 if (main().defer_commits) |
437 TRACE_EVENT_ASYNC_BEGIN0("cc", "ThreadProxy::SetDeferCommits", this); | 414 TRACE_EVENT_ASYNC_BEGIN0("cc", "ThreadProxy::SetDeferCommits", this); |
438 else | 415 else |
439 TRACE_EVENT_ASYNC_END0("cc", "ThreadProxy::SetDeferCommits", this); | 416 TRACE_EVENT_ASYNC_END0("cc", "ThreadProxy::SetDeferCommits", this); |
440 | 417 |
441 Proxy::ImplThreadTaskRunner()->PostTask( | 418 main().channel_main->SetDeferCommitsOnImpl(defer_commits); |
442 FROM_HERE, | |
443 base::Bind(&ThreadProxy::SetDeferCommitsOnImplThread, | |
444 impl_thread_weak_ptr_, | |
445 defer_commits)); | |
446 } | 419 } |
447 | 420 |
448 void ThreadProxy::SetDeferCommitsOnImplThread(bool defer_commits) const { | 421 void ThreadProxy::SetDeferCommitsOnImpl(bool defer_commits) { |
449 DCHECK(IsImplThread()); | 422 DCHECK(IsImplThread()); |
450 impl().scheduler->SetDeferCommits(defer_commits); | 423 impl().scheduler->SetDeferCommits(defer_commits); |
451 } | 424 } |
452 | 425 |
453 bool ThreadProxy::CommitRequested() const { | 426 bool ThreadProxy::CommitRequested() const { |
454 DCHECK(IsMainThread()); | 427 DCHECK(IsMainThread()); |
455 // TODO(skyostil): Split this into something like CommitRequested() and | 428 // TODO(skyostil): Split this into something like CommitRequested() and |
456 // CommitInProgress(). | 429 // CommitInProgress(). |
457 return main().current_pipeline_stage != NO_PIPELINE_STAGE || | 430 return main().current_pipeline_stage != NO_PIPELINE_STAGE || |
458 main().max_requested_pipeline_stage >= COMMIT_PIPELINE_STAGE; | 431 main().max_requested_pipeline_stage >= COMMIT_PIPELINE_STAGE; |
(...skipping 22 matching lines...) Expand all Loading... | |
481 } | 454 } |
482 | 455 |
483 void ThreadProxy::SetNeedsRedrawRectOnImplThread(const gfx::Rect& damage_rect) { | 456 void ThreadProxy::SetNeedsRedrawRectOnImplThread(const gfx::Rect& damage_rect) { |
484 DCHECK(IsImplThread()); | 457 DCHECK(IsImplThread()); |
485 impl().layer_tree_host_impl->SetViewportDamage(damage_rect); | 458 impl().layer_tree_host_impl->SetViewportDamage(damage_rect); |
486 SetNeedsRedrawOnImplThread(); | 459 SetNeedsRedrawOnImplThread(); |
487 } | 460 } |
488 | 461 |
489 void ThreadProxy::MainThreadHasStoppedFlinging() { | 462 void ThreadProxy::MainThreadHasStoppedFlinging() { |
490 DCHECK(IsMainThread()); | 463 DCHECK(IsMainThread()); |
491 Proxy::ImplThreadTaskRunner()->PostTask( | 464 main().channel_main->MainThreadHasStoppedFlingingOnImpl(); |
492 FROM_HERE, | |
493 base::Bind(&ThreadProxy::MainThreadHasStoppedFlingingOnImplThread, | |
494 impl_thread_weak_ptr_)); | |
495 } | 465 } |
496 | 466 |
497 void ThreadProxy::MainThreadHasStoppedFlingingOnImplThread() { | 467 void ThreadProxy::MainThreadHasStoppedFlingingOnImpl() { |
498 DCHECK(IsImplThread()); | 468 DCHECK(IsImplThread()); |
499 impl().layer_tree_host_impl->MainThreadHasStoppedFlinging(); | 469 impl().layer_tree_host_impl->MainThreadHasStoppedFlinging(); |
500 } | 470 } |
501 | 471 |
502 void ThreadProxy::NotifyInputThrottledUntilCommit() { | 472 void ThreadProxy::NotifyInputThrottledUntilCommit() { |
503 DCHECK(IsMainThread()); | 473 DCHECK(IsMainThread()); |
504 Proxy::ImplThreadTaskRunner()->PostTask( | 474 main().channel_main->SetInputThrottledUntilCommitOnImpl(true); |
505 FROM_HERE, | |
506 base::Bind(&ThreadProxy::SetInputThrottledUntilCommitOnImplThread, | |
507 impl_thread_weak_ptr_, | |
508 true)); | |
509 } | 475 } |
510 | 476 |
511 void ThreadProxy::SetInputThrottledUntilCommitOnImplThread(bool is_throttled) { | 477 void ThreadProxy::SetInputThrottledUntilCommitOnImpl(bool is_throttled) { |
512 DCHECK(IsImplThread()); | 478 DCHECK(IsImplThread()); |
513 if (is_throttled == impl().input_throttled_until_commit) | 479 if (is_throttled == impl().input_throttled_until_commit) |
514 return; | 480 return; |
515 impl().input_throttled_until_commit = is_throttled; | 481 impl().input_throttled_until_commit = is_throttled; |
516 RenewTreePriority(); | 482 RenewTreePriority(); |
517 } | 483 } |
518 | 484 |
519 LayerTreeHost* ThreadProxy::layer_tree_host() { | 485 LayerTreeHost* ThreadProxy::layer_tree_host() { |
520 return blocked_main().layer_tree_host; | 486 return blocked_main().layer_tree_host; |
521 } | 487 } |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
577 TRACE_EVENT0("cc", "ThreadProxy::Stop"); | 543 TRACE_EVENT0("cc", "ThreadProxy::Stop"); |
578 DCHECK(IsMainThread()); | 544 DCHECK(IsMainThread()); |
579 DCHECK(main().started); | 545 DCHECK(main().started); |
580 | 546 |
581 // Synchronously finishes pending GL operations and deletes the impl. | 547 // Synchronously finishes pending GL operations and deletes the impl. |
582 // The two steps are done as separate post tasks, so that tasks posted | 548 // The two steps are done as separate post tasks, so that tasks posted |
583 // by the GL implementation due to the Finish can be executed by the | 549 // by the GL implementation due to the Finish can be executed by the |
584 // renderer before shutting it down. | 550 // renderer before shutting it down. |
585 { | 551 { |
586 DebugScopedSetMainThreadBlocked main_thread_blocked(this); | 552 DebugScopedSetMainThreadBlocked main_thread_blocked(this); |
587 | |
588 CompletionEvent completion; | 553 CompletionEvent completion; |
589 Proxy::ImplThreadTaskRunner()->PostTask( | 554 main().channel_main->FinishGLOnImpl(&completion); |
590 FROM_HERE, | |
591 base::Bind(&ThreadProxy::FinishGLOnImplThread, | |
592 impl_thread_weak_ptr_, | |
593 &completion)); | |
594 completion.Wait(); | 555 completion.Wait(); |
595 } | 556 } |
596 { | 557 { |
597 DebugScopedSetMainThreadBlocked main_thread_blocked(this); | 558 DebugScopedSetMainThreadBlocked main_thread_blocked(this); |
598 | 559 |
599 CompletionEvent completion; | 560 CompletionEvent completion; |
600 Proxy::ImplThreadTaskRunner()->PostTask( | 561 Proxy::ImplThreadTaskRunner()->PostTask( |
601 FROM_HERE, | 562 FROM_HERE, |
602 base::Bind(&ThreadProxy::LayerTreeHostClosedOnImplThread, | 563 base::Bind(&ThreadProxy::LayerTreeHostClosedOnImplThread, |
603 impl_thread_weak_ptr_, | 564 impl_thread_weak_ptr_, |
604 &completion)); | 565 &completion)); |
605 completion.Wait(); | 566 completion.Wait(); |
606 } | 567 } |
607 | 568 |
608 main().weak_factory.InvalidateWeakPtrs(); | 569 main().weak_factory.InvalidateWeakPtrs(); |
609 blocked_main().layer_tree_host = NULL; | 570 blocked_main().layer_tree_host = NULL; |
610 main().started = false; | 571 main().started = false; |
611 } | 572 } |
612 | 573 |
613 bool ThreadProxy::SupportsImplScrolling() const { | 574 bool ThreadProxy::SupportsImplScrolling() const { |
614 return true; | 575 return true; |
615 } | 576 } |
616 | 577 |
617 void ThreadProxy::FinishAllRenderingOnImplThread(CompletionEvent* completion) { | 578 void ThreadProxy::FinishAllRenderingOnImpl(CompletionEvent* completion) { |
618 TRACE_EVENT0("cc", "ThreadProxy::FinishAllRenderingOnImplThread"); | 579 TRACE_EVENT0("cc", "ThreadProxy::FinishAllRenderingOnImplThread"); |
619 DCHECK(IsImplThread()); | 580 DCHECK(IsImplThread()); |
620 impl().layer_tree_host_impl->FinishAllRendering(); | 581 impl().layer_tree_host_impl->FinishAllRendering(); |
621 completion->Signal(); | 582 completion->Signal(); |
622 } | 583 } |
623 | 584 |
624 void ThreadProxy::ScheduledActionSendBeginMainFrame() { | 585 void ThreadProxy::ScheduledActionSendBeginMainFrame() { |
625 unsigned int begin_frame_id = nextBeginFrameId++; | 586 unsigned int begin_frame_id = nextBeginFrameId++; |
626 benchmark_instrumentation::ScopedBeginFrameTask begin_frame_task( | 587 benchmark_instrumentation::ScopedBeginFrameTask begin_frame_task( |
627 benchmark_instrumentation::kSendBeginFrame, begin_frame_id); | 588 benchmark_instrumentation::kSendBeginFrame, begin_frame_id); |
(...skipping 15 matching lines...) Expand all Loading... | |
643 Proxy::MainThreadTaskRunner()->PostTask( | 604 Proxy::MainThreadTaskRunner()->PostTask( |
644 FROM_HERE, | 605 FROM_HERE, |
645 base::Bind(&ThreadProxy::BeginMainFrame, | 606 base::Bind(&ThreadProxy::BeginMainFrame, |
646 main_thread_weak_ptr_, | 607 main_thread_weak_ptr_, |
647 base::Passed(&begin_main_frame_state))); | 608 base::Passed(&begin_main_frame_state))); |
648 devtools_instrumentation::DidRequestMainThreadFrame( | 609 devtools_instrumentation::DidRequestMainThreadFrame( |
649 impl().layer_tree_host_id); | 610 impl().layer_tree_host_id); |
650 } | 611 } |
651 | 612 |
652 void ThreadProxy::SendBeginMainFrameNotExpectedSoon() { | 613 void ThreadProxy::SendBeginMainFrameNotExpectedSoon() { |
653 Proxy::MainThreadTaskRunner()->PostTask( | 614 impl().channel_impl->BeginMainFrameNotExpectedSoon(); |
654 FROM_HERE, base::Bind(&ThreadProxy::BeginMainFrameNotExpectedSoon, | |
655 main_thread_weak_ptr_)); | |
656 } | 615 } |
657 | 616 |
658 void ThreadProxy::BeginMainFrame( | 617 void ThreadProxy::BeginMainFrame( |
659 scoped_ptr<BeginMainFrameAndCommitState> begin_main_frame_state) { | 618 scoped_ptr<BeginMainFrameAndCommitState> begin_main_frame_state) { |
660 benchmark_instrumentation::ScopedBeginFrameTask begin_frame_task( | 619 benchmark_instrumentation::ScopedBeginFrameTask begin_frame_task( |
661 benchmark_instrumentation::kDoBeginFrame, | 620 benchmark_instrumentation::kDoBeginFrame, |
662 begin_main_frame_state->begin_frame_id); | 621 begin_main_frame_state->begin_frame_id); |
663 TRACE_EVENT_SYNTHETIC_DELAY_BEGIN("cc.BeginMainFrame"); | 622 TRACE_EVENT_SYNTHETIC_DELAY_BEGIN("cc.BeginMainFrame"); |
664 DCHECK(IsMainThread()); | 623 DCHECK(IsMainThread()); |
665 DCHECK_EQ(NO_PIPELINE_STAGE, main().current_pipeline_stage); | 624 DCHECK_EQ(NO_PIPELINE_STAGE, main().current_pipeline_stage); |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
809 void ThreadProxy::BeginMainFrameAbortedOnImplThread( | 768 void ThreadProxy::BeginMainFrameAbortedOnImplThread( |
810 CommitEarlyOutReason reason) { | 769 CommitEarlyOutReason reason) { |
811 TRACE_EVENT1("cc", "ThreadProxy::BeginMainFrameAbortedOnImplThread", "reason", | 770 TRACE_EVENT1("cc", "ThreadProxy::BeginMainFrameAbortedOnImplThread", "reason", |
812 CommitEarlyOutReasonToString(reason)); | 771 CommitEarlyOutReasonToString(reason)); |
813 DCHECK(IsImplThread()); | 772 DCHECK(IsImplThread()); |
814 DCHECK(impl().scheduler); | 773 DCHECK(impl().scheduler); |
815 DCHECK(impl().scheduler->CommitPending()); | 774 DCHECK(impl().scheduler->CommitPending()); |
816 DCHECK(!impl().layer_tree_host_impl->pending_tree()); | 775 DCHECK(!impl().layer_tree_host_impl->pending_tree()); |
817 | 776 |
818 if (CommitEarlyOutHandledCommit(reason)) { | 777 if (CommitEarlyOutHandledCommit(reason)) { |
819 SetInputThrottledUntilCommitOnImplThread(false); | 778 SetInputThrottledUntilCommitOnImpl(false); |
820 impl().last_processed_begin_main_frame_args = | 779 impl().last_processed_begin_main_frame_args = |
821 impl().last_begin_main_frame_args; | 780 impl().last_begin_main_frame_args; |
822 } | 781 } |
823 impl().layer_tree_host_impl->BeginMainFrameAborted(reason); | 782 impl().layer_tree_host_impl->BeginMainFrameAborted(reason); |
824 impl().scheduler->BeginMainFrameAborted(reason); | 783 impl().scheduler->BeginMainFrameAborted(reason); |
825 } | 784 } |
826 | 785 |
827 void ThreadProxy::ScheduledActionAnimate() { | 786 void ThreadProxy::ScheduledActionAnimate() { |
828 TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionAnimate"); | 787 TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionAnimate"); |
829 DCHECK(IsImplThread()); | 788 DCHECK(IsImplThread()); |
(...skipping 28 matching lines...) Expand all Loading... | |
858 impl().commit_completion_event->Signal(); | 817 impl().commit_completion_event->Signal(); |
859 impl().commit_completion_event = NULL; | 818 impl().commit_completion_event = NULL; |
860 } | 819 } |
861 | 820 |
862 impl().scheduler->DidCommit(); | 821 impl().scheduler->DidCommit(); |
863 | 822 |
864 // Delay this step until afer the main thread has been released as it's | 823 // Delay this step until afer the main thread has been released as it's |
865 // often a good bit of work to update the tree and prepare the new frame. | 824 // often a good bit of work to update the tree and prepare the new frame. |
866 impl().layer_tree_host_impl->CommitComplete(); | 825 impl().layer_tree_host_impl->CommitComplete(); |
867 | 826 |
868 SetInputThrottledUntilCommitOnImplThread(false); | 827 SetInputThrottledUntilCommitOnImpl(false); |
869 | 828 |
870 impl().next_frame_is_newly_committed_frame = true; | 829 impl().next_frame_is_newly_committed_frame = true; |
871 } | 830 } |
872 | 831 |
873 void ThreadProxy::ScheduledActionActivateSyncTree() { | 832 void ThreadProxy::ScheduledActionActivateSyncTree() { |
874 TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionActivateSyncTree"); | 833 TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionActivateSyncTree"); |
875 DCHECK(IsImplThread()); | 834 DCHECK(IsImplThread()); |
876 impl().layer_tree_host_impl->ActivateSyncTree(); | 835 impl().layer_tree_host_impl->ActivateSyncTree(); |
877 } | 836 } |
878 | 837 |
879 void ThreadProxy::ScheduledActionBeginOutputSurfaceCreation() { | 838 void ThreadProxy::ScheduledActionBeginOutputSurfaceCreation() { |
880 TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionBeginOutputSurfaceCreation"); | 839 TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionBeginOutputSurfaceCreation"); |
881 DCHECK(IsImplThread()); | 840 DCHECK(IsImplThread()); |
882 Proxy::MainThreadTaskRunner()->PostTask( | 841 impl().channel_impl->RequestNewOutputSurface(); |
883 FROM_HERE, | |
884 base::Bind(&ThreadProxy::RequestNewOutputSurface, main_thread_weak_ptr_)); | |
885 } | 842 } |
886 | 843 |
887 DrawResult ThreadProxy::DrawSwapInternal(bool forced_draw) { | 844 DrawResult ThreadProxy::DrawSwapInternal(bool forced_draw) { |
888 TRACE_EVENT_SYNTHETIC_DELAY("cc.DrawAndSwap"); | 845 TRACE_EVENT_SYNTHETIC_DELAY("cc.DrawAndSwap"); |
889 DrawResult result; | 846 DrawResult result; |
890 | 847 |
891 DCHECK(IsImplThread()); | 848 DCHECK(IsImplThread()); |
892 DCHECK(impl().layer_tree_host_impl.get()); | 849 DCHECK(impl().layer_tree_host_impl.get()); |
893 | 850 |
894 base::AutoReset<bool> mark_inside(&impl().inside_draw, true); | 851 base::AutoReset<bool> mark_inside(&impl().inside_draw, true); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
930 | 887 |
931 bool start_ready_animations = draw_frame; | 888 bool start_ready_animations = draw_frame; |
932 impl().layer_tree_host_impl->UpdateAnimationState(start_ready_animations); | 889 impl().layer_tree_host_impl->UpdateAnimationState(start_ready_animations); |
933 | 890 |
934 if (draw_frame) | 891 if (draw_frame) |
935 impl().layer_tree_host_impl->SwapBuffers(frame); | 892 impl().layer_tree_host_impl->SwapBuffers(frame); |
936 | 893 |
937 // Tell the main thread that the the newly-commited frame was drawn. | 894 // Tell the main thread that the the newly-commited frame was drawn. |
938 if (impl().next_frame_is_newly_committed_frame) { | 895 if (impl().next_frame_is_newly_committed_frame) { |
939 impl().next_frame_is_newly_committed_frame = false; | 896 impl().next_frame_is_newly_committed_frame = false; |
940 Proxy::MainThreadTaskRunner()->PostTask( | 897 impl().channel_impl->DidCommitAndDrawFrame(); |
941 FROM_HERE, | |
942 base::Bind(&ThreadProxy::DidCommitAndDrawFrame, main_thread_weak_ptr_)); | |
943 } | 898 } |
944 | 899 |
945 DCHECK_NE(INVALID_RESULT, result); | 900 DCHECK_NE(INVALID_RESULT, result); |
946 return result; | 901 return result; |
947 } | 902 } |
948 | 903 |
949 void ThreadProxy::ScheduledActionPrepareTiles() { | 904 void ThreadProxy::ScheduledActionPrepareTiles() { |
950 TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionPrepareTiles"); | 905 TRACE_EVENT0("cc", "ThreadProxy::ScheduledActionPrepareTiles"); |
951 impl().layer_tree_host_impl->PrepareTiles(); | 906 impl().layer_tree_host_impl->PrepareTiles(); |
952 } | 907 } |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1026 this, scheduler_settings, impl().layer_tree_host_id, | 981 this, scheduler_settings, impl().layer_tree_host_id, |
1027 ImplThreadTaskRunner(), impl().external_begin_frame_source.get(), | 982 ImplThreadTaskRunner(), impl().external_begin_frame_source.get(), |
1028 compositor_timing_history.Pass()); | 983 compositor_timing_history.Pass()); |
1029 | 984 |
1030 DCHECK_EQ(impl().scheduler->visible(), | 985 DCHECK_EQ(impl().scheduler->visible(), |
1031 impl().layer_tree_host_impl->visible()); | 986 impl().layer_tree_host_impl->visible()); |
1032 impl_thread_weak_ptr_ = impl().weak_factory.GetWeakPtr(); | 987 impl_thread_weak_ptr_ = impl().weak_factory.GetWeakPtr(); |
1033 completion->Signal(); | 988 completion->Signal(); |
1034 } | 989 } |
1035 | 990 |
1036 void ThreadProxy::InitializeOutputSurfaceOnImplThread( | 991 void ThreadProxy::InitializeOutputSurfaceOnImpl(OutputSurface* output_surface) { |
1037 OutputSurface* output_surface) { | |
1038 TRACE_EVENT0("cc", "ThreadProxy::InitializeOutputSurfaceOnImplThread"); | 992 TRACE_EVENT0("cc", "ThreadProxy::InitializeOutputSurfaceOnImplThread"); |
1039 DCHECK(IsImplThread()); | 993 DCHECK(IsImplThread()); |
1040 | 994 |
1041 LayerTreeHostImpl* host_impl = impl().layer_tree_host_impl.get(); | 995 LayerTreeHostImpl* host_impl = impl().layer_tree_host_impl.get(); |
1042 bool success = host_impl->InitializeRenderer(output_surface); | 996 bool success = host_impl->InitializeRenderer(output_surface); |
1043 RendererCapabilities capabilities; | 997 RendererCapabilities capabilities; |
1044 if (success) { | 998 if (success) { |
1045 capabilities = | 999 capabilities = |
1046 host_impl->GetRendererCapabilities().MainThreadCapabilities(); | 1000 host_impl->GetRendererCapabilities().MainThreadCapabilities(); |
1047 } | 1001 } |
1048 | 1002 |
1049 Proxy::MainThreadTaskRunner()->PostTask( | 1003 impl().channel_impl->DidInitializeOutputSurface(success, capabilities); |
1050 FROM_HERE, | |
1051 base::Bind(&ThreadProxy::DidInitializeOutputSurface, | |
1052 main_thread_weak_ptr_, | |
1053 success, | |
1054 capabilities)); | |
1055 | 1004 |
1056 if (success) | 1005 if (success) |
1057 impl().scheduler->DidCreateAndInitializeOutputSurface(); | 1006 impl().scheduler->DidCreateAndInitializeOutputSurface(); |
1058 } | 1007 } |
1059 | 1008 |
1060 void ThreadProxy::ReleaseOutputSurfaceOnImplThread( | 1009 void ThreadProxy::ReleaseOutputSurfaceOnImpl(CompletionEvent* completion) { |
1061 CompletionEvent* completion) { | |
1062 DCHECK(IsImplThread()); | 1010 DCHECK(IsImplThread()); |
1063 | 1011 |
1064 // Unlike DidLoseOutputSurfaceOnImplThread, we don't need to call | 1012 // Unlike DidLoseOutputSurfaceOnImplThread, we don't need to call |
1065 // LayerTreeHost::DidLoseOutputSurface since it already knows. | 1013 // LayerTreeHost::DidLoseOutputSurface since it already knows. |
1066 impl().scheduler->DidLoseOutputSurface(); | 1014 impl().scheduler->DidLoseOutputSurface(); |
1067 impl().layer_tree_host_impl->ReleaseOutputSurface(); | 1015 impl().layer_tree_host_impl->ReleaseOutputSurface(); |
1068 completion->Signal(); | 1016 completion->Signal(); |
1069 } | 1017 } |
1070 | 1018 |
1071 void ThreadProxy::FinishGLOnImplThread(CompletionEvent* completion) { | 1019 void ThreadProxy::FinishGLOnImpl(CompletionEvent* completion) { |
1072 TRACE_EVENT0("cc", "ThreadProxy::FinishGLOnImplThread"); | 1020 TRACE_EVENT0("cc", "ThreadProxy::FinishGLOnImplThread"); |
1073 DCHECK(IsImplThread()); | 1021 DCHECK(IsImplThread()); |
1074 if (impl().layer_tree_host_impl->output_surface()) { | 1022 if (impl().layer_tree_host_impl->output_surface()) { |
1075 ContextProvider* context_provider = | 1023 ContextProvider* context_provider = |
1076 impl().layer_tree_host_impl->output_surface()->context_provider(); | 1024 impl().layer_tree_host_impl->output_surface()->context_provider(); |
1077 if (context_provider) | 1025 if (context_provider) |
1078 context_provider->ContextGL()->Finish(); | 1026 context_provider->ContextGL()->Finish(); |
1079 } | 1027 } |
1080 completion->Signal(); | 1028 completion->Signal(); |
1081 } | 1029 } |
(...skipping 14 matching lines...) Expand all Loading... | |
1096 } | 1044 } |
1097 | 1045 |
1098 ThreadProxy::BeginMainFrameAndCommitState::BeginMainFrameAndCommitState() | 1046 ThreadProxy::BeginMainFrameAndCommitState::BeginMainFrameAndCommitState() |
1099 : memory_allocation_limit_bytes(0), | 1047 : memory_allocation_limit_bytes(0), |
1100 evicted_ui_resources(false) {} | 1048 evicted_ui_resources(false) {} |
1101 | 1049 |
1102 ThreadProxy::BeginMainFrameAndCommitState::~BeginMainFrameAndCommitState() {} | 1050 ThreadProxy::BeginMainFrameAndCommitState::~BeginMainFrameAndCommitState() {} |
1103 | 1051 |
1104 bool ThreadProxy::MainFrameWillHappenForTesting() { | 1052 bool ThreadProxy::MainFrameWillHappenForTesting() { |
1105 DCHECK(IsMainThread()); | 1053 DCHECK(IsMainThread()); |
1106 CompletionEvent completion; | |
1107 bool main_frame_will_happen = false; | 1054 bool main_frame_will_happen = false; |
1108 { | 1055 { |
1109 DebugScopedSetMainThreadBlocked main_thread_blocked(this); | 1056 DebugScopedSetMainThreadBlocked main_thread_blocked(this); |
1110 Proxy::ImplThreadTaskRunner()->PostTask( | 1057 CompletionEvent completion; |
1111 FROM_HERE, | 1058 main().channel_main->MainFrameWillHappenOnImplForTesting( |
1112 base::Bind(&ThreadProxy::MainFrameWillHappenOnImplThreadForTesting, | 1059 &completion, &main_frame_will_happen); |
1113 impl_thread_weak_ptr_, | |
1114 &completion, | |
1115 &main_frame_will_happen)); | |
1116 completion.Wait(); | 1060 completion.Wait(); |
1117 } | 1061 } |
1118 return main_frame_will_happen; | 1062 return main_frame_will_happen; |
1119 } | 1063 } |
1120 | 1064 |
1121 void ThreadProxy::SetChildrenNeedBeginFrames(bool children_need_begin_frames) { | 1065 void ThreadProxy::SetChildrenNeedBeginFrames(bool children_need_begin_frames) { |
1122 NOTREACHED() << "Only used by SingleThreadProxy"; | 1066 NOTREACHED() << "Only used by SingleThreadProxy"; |
1123 } | 1067 } |
1124 | 1068 |
1125 void ThreadProxy::MainFrameWillHappenOnImplThreadForTesting( | 1069 void ThreadProxy::MainFrameWillHappenOnImplForTesting( |
1126 CompletionEvent* completion, | 1070 CompletionEvent* completion, |
1127 bool* main_frame_will_happen) { | 1071 bool* main_frame_will_happen) { |
1128 DCHECK(IsImplThread()); | 1072 DCHECK(IsImplThread()); |
1129 if (impl().layer_tree_host_impl->output_surface()) { | 1073 if (impl().layer_tree_host_impl->output_surface()) { |
1130 *main_frame_will_happen = impl().scheduler->MainFrameForTestingWillHappen(); | 1074 *main_frame_will_happen = impl().scheduler->MainFrameForTestingWillHappen(); |
1131 } else { | 1075 } else { |
1132 *main_frame_will_happen = false; | 1076 *main_frame_will_happen = false; |
1133 } | 1077 } |
1134 completion->Signal(); | 1078 completion->Signal(); |
1135 } | 1079 } |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1210 impl().scheduler->WillPrepareTiles(); | 1154 impl().scheduler->WillPrepareTiles(); |
1211 } | 1155 } |
1212 | 1156 |
1213 void ThreadProxy::DidPrepareTiles() { | 1157 void ThreadProxy::DidPrepareTiles() { |
1214 DCHECK(IsImplThread()); | 1158 DCHECK(IsImplThread()); |
1215 impl().scheduler->DidPrepareTiles(); | 1159 impl().scheduler->DidPrepareTiles(); |
1216 } | 1160 } |
1217 | 1161 |
1218 void ThreadProxy::DidCompletePageScaleAnimationOnImplThread() { | 1162 void ThreadProxy::DidCompletePageScaleAnimationOnImplThread() { |
1219 DCHECK(IsImplThread()); | 1163 DCHECK(IsImplThread()); |
1220 Proxy::MainThreadTaskRunner()->PostTask( | 1164 impl().channel_impl->DidCompletePageScaleAnimation(); |
1221 FROM_HERE, base::Bind(&ThreadProxy::DidCompletePageScaleAnimation, | |
1222 main_thread_weak_ptr_)); | |
1223 } | 1165 } |
1224 | 1166 |
1225 void ThreadProxy::OnDrawForOutputSurface() { | 1167 void ThreadProxy::OnDrawForOutputSurface() { |
1226 DCHECK(IsImplThread()); | 1168 DCHECK(IsImplThread()); |
1227 impl().scheduler->OnDrawForOutputSurface(); | 1169 impl().scheduler->OnDrawForOutputSurface(); |
1228 } | 1170 } |
1229 | 1171 |
1230 void ThreadProxy::PostFrameTimingEventsOnImplThread( | 1172 void ThreadProxy::PostFrameTimingEventsOnImplThread( |
1231 scoped_ptr<FrameTimingTracker::CompositeTimingSet> composite_events, | 1173 scoped_ptr<FrameTimingTracker::CompositeTimingSet> composite_events, |
1232 scoped_ptr<FrameTimingTracker::MainFrameTimingSet> main_frame_events) { | 1174 scoped_ptr<FrameTimingTracker::MainFrameTimingSet> main_frame_events) { |
1233 DCHECK(IsImplThread()); | 1175 DCHECK(IsImplThread()); |
1234 Proxy::MainThreadTaskRunner()->PostTask( | 1176 impl().channel_impl->PostFrameTimingEventsOnMain(composite_events.Pass(), |
1235 FROM_HERE, | 1177 main_frame_events.Pass()); |
1236 base::Bind(&ThreadProxy::PostFrameTimingEvents, main_thread_weak_ptr_, | |
1237 base::Passed(composite_events.Pass()), | |
1238 base::Passed(main_frame_events.Pass()))); | |
1239 } | 1178 } |
1240 | 1179 |
1241 void ThreadProxy::PostFrameTimingEvents( | 1180 void ThreadProxy::PostFrameTimingEventsOnMain( |
1242 scoped_ptr<FrameTimingTracker::CompositeTimingSet> composite_events, | 1181 scoped_ptr<FrameTimingTracker::CompositeTimingSet> composite_events, |
1243 scoped_ptr<FrameTimingTracker::MainFrameTimingSet> main_frame_events) { | 1182 scoped_ptr<FrameTimingTracker::MainFrameTimingSet> main_frame_events) { |
1244 DCHECK(IsMainThread()); | 1183 DCHECK(IsMainThread()); |
1245 layer_tree_host()->RecordFrameTimingEvents(composite_events.Pass(), | 1184 layer_tree_host()->RecordFrameTimingEvents(composite_events.Pass(), |
1246 main_frame_events.Pass()); | 1185 main_frame_events.Pass()); |
1247 } | 1186 } |
1248 | 1187 |
1249 base::WeakPtr<ProxyMain> ThreadProxy::GetMainWeakPtr() { | 1188 base::WeakPtr<ProxyMain> ThreadProxy::GetMainWeakPtr() { |
1250 return main_thread_weak_ptr_; | 1189 return main_thread_weak_ptr_; |
1251 } | 1190 } |
1252 | 1191 |
1253 base::WeakPtr<ProxyImpl> ThreadProxy::GetImplWeakPtr() { | 1192 base::WeakPtr<ProxyImpl> ThreadProxy::GetImplWeakPtr() { |
1254 return impl_thread_weak_ptr_; | 1193 return impl_thread_weak_ptr_; |
1255 } | 1194 } |
1256 | 1195 |
1257 } // namespace cc | 1196 } // namespace cc |
OLD | NEW |