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/single_thread_proxy.h" | 5 #include "cc/trees/single_thread_proxy.h" |
6 | 6 |
7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
8 #include "base/debug/trace_event.h" | 8 #include "base/debug/trace_event.h" |
9 #include "cc/debug/benchmark_instrumentation.h" | 9 #include "cc/debug/benchmark_instrumentation.h" |
10 #include "cc/output/context_provider.h" | 10 #include "cc/output/context_provider.h" |
(...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
502 UpdateBackgroundAnimateTicking(); | 502 UpdateBackgroundAnimateTicking(); |
503 return DRAW_ABORTED_CANT_DRAW; | 503 return DRAW_ABORTED_CANT_DRAW; |
504 } | 504 } |
505 | 505 |
506 timing_history_.DidStartDrawing(); | 506 timing_history_.DidStartDrawing(); |
507 | 507 |
508 layer_tree_host_impl_->Animate( | 508 layer_tree_host_impl_->Animate( |
509 layer_tree_host_impl_->CurrentBeginFrameArgs().frame_time); | 509 layer_tree_host_impl_->CurrentBeginFrameArgs().frame_time); |
510 UpdateBackgroundAnimateTicking(); | 510 UpdateBackgroundAnimateTicking(); |
511 | 511 |
512 if (!layer_tree_host_impl_->IsContextLost()) { | 512 layer_tree_host_impl_->PrepareToDraw(frame); |
513 layer_tree_host_impl_->PrepareToDraw(frame); | 513 layer_tree_host_impl_->DrawLayers(frame, frame_begin_time); |
514 layer_tree_host_impl_->DrawLayers(frame, frame_begin_time); | 514 layer_tree_host_impl_->DidDrawAllLayers(*frame); |
515 layer_tree_host_impl_->DidDrawAllLayers(*frame); | |
516 } | |
517 | 515 |
518 bool start_ready_animations = true; | 516 bool start_ready_animations = true; |
519 layer_tree_host_impl_->UpdateAnimationState(start_ready_animations); | 517 layer_tree_host_impl_->UpdateAnimationState(start_ready_animations); |
520 | 518 |
521 layer_tree_host_impl_->ResetCurrentBeginFrameArgsForNextFrame(); | 519 layer_tree_host_impl_->ResetCurrentBeginFrameArgsForNextFrame(); |
522 | 520 |
523 timing_history_.DidFinishDrawing(); | 521 timing_history_.DidFinishDrawing(); |
524 } | 522 } |
525 | 523 |
526 { | 524 { |
527 DebugScopedSetImplThread impl(this); | 525 DebugScopedSetImplThread impl(this); |
528 | 526 |
529 if (layer_tree_host_impl_->IsContextLost()) { | 527 // This CapturePostTasks should be destroyed before |
530 DidLoseOutputSurfaceOnImplThread(); | 528 // DidCommitAndDrawFrame() is called since that goes out to the |
531 } else { | 529 // embedder, |
532 // This CapturePostTasks should be destroyed before | 530 // and we want the embedder to receive its callbacks before that. |
533 // DidCommitAndDrawFrame() is called since that goes out to the | 531 // NOTE: This maintains consistent ordering with the ThreadProxy since |
534 // embedder, | 532 // the DidCommitAndDrawFrame() must be post-tasked from the impl thread |
535 // and we want the embedder to receive its callbacks before that. | 533 // there as the main thread is not blocked, so any posted tasks inside |
536 // NOTE: This maintains consistent ordering with the ThreadProxy since | 534 // the swap buffers will execute first. |
537 // the DidCommitAndDrawFrame() must be post-tasked from the impl thread | 535 DebugScopedSetMainThreadBlocked main_thread_blocked(this); |
538 // there as the main thread is not blocked, so any posted tasks inside | |
539 // the swap buffers will execute first. | |
540 DebugScopedSetMainThreadBlocked main_thread_blocked(this); | |
541 | 536 |
542 BlockingTaskRunner::CapturePostTasks blocked; | 537 BlockingTaskRunner::CapturePostTasks blocked; |
543 layer_tree_host_impl_->SwapBuffers(*frame); | 538 layer_tree_host_impl_->SwapBuffers(*frame); |
544 } | |
545 } | 539 } |
546 DidCommitAndDrawFrame(); | 540 DidCommitAndDrawFrame(); |
547 | 541 |
548 return DRAW_SUCCESS; | 542 return DRAW_SUCCESS; |
549 } | 543 } |
550 | 544 |
551 void SingleThreadProxy::DidCommitAndDrawFrame() { | 545 void SingleThreadProxy::DidCommitAndDrawFrame() { |
552 if (next_frame_is_newly_committed_frame_) { | 546 if (next_frame_is_newly_committed_frame_) { |
553 DebugScopedSetMainThread main(this); | 547 DebugScopedSetMainThread main(this); |
554 next_frame_is_newly_committed_frame_ = false; | 548 next_frame_is_newly_committed_frame_ = false; |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
621 | 615 |
622 // TODO(enne): SingleThreadProxy does not support cancelling commits yet so | 616 // TODO(enne): SingleThreadProxy does not support cancelling commits yet so |
623 // did_handle is always false. | 617 // did_handle is always false. |
624 bool did_handle = false; | 618 bool did_handle = false; |
625 layer_tree_host_impl_->BeginMainFrameAborted(did_handle); | 619 layer_tree_host_impl_->BeginMainFrameAborted(did_handle); |
626 scheduler_on_impl_thread_->BeginMainFrameAborted(did_handle); | 620 scheduler_on_impl_thread_->BeginMainFrameAborted(did_handle); |
627 } | 621 } |
628 | 622 |
629 DrawResult SingleThreadProxy::ScheduledActionDrawAndSwapIfPossible() { | 623 DrawResult SingleThreadProxy::ScheduledActionDrawAndSwapIfPossible() { |
630 DebugScopedSetImplThread impl(this); | 624 DebugScopedSetImplThread impl(this); |
631 if (layer_tree_host_impl_->IsContextLost()) { | |
632 DidCommitAndDrawFrame(); | |
633 return DRAW_SUCCESS; | |
634 } | |
635 | |
636 LayerTreeHostImpl::FrameData frame; | 625 LayerTreeHostImpl::FrameData frame; |
637 return DoComposite(layer_tree_host_impl_->CurrentBeginFrameArgs().frame_time, | 626 return DoComposite(layer_tree_host_impl_->CurrentBeginFrameArgs().frame_time, |
638 &frame); | 627 &frame); |
639 } | 628 } |
640 | 629 |
641 DrawResult SingleThreadProxy::ScheduledActionDrawAndSwapForced() { | 630 DrawResult SingleThreadProxy::ScheduledActionDrawAndSwapForced() { |
642 NOTREACHED(); | 631 NOTREACHED(); |
643 return INVALID_RESULT; | 632 return INVALID_RESULT; |
644 } | 633 } |
645 | 634 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
697 | 686 |
698 base::TimeDelta SingleThreadProxy::CommitToActivateDurationEstimate() { | 687 base::TimeDelta SingleThreadProxy::CommitToActivateDurationEstimate() { |
699 return timing_history_.CommitToActivateDurationEstimate(); | 688 return timing_history_.CommitToActivateDurationEstimate(); |
700 } | 689 } |
701 | 690 |
702 void SingleThreadProxy::DidBeginImplFrameDeadline() { | 691 void SingleThreadProxy::DidBeginImplFrameDeadline() { |
703 layer_tree_host_impl_->ResetCurrentBeginFrameArgsForNextFrame(); | 692 layer_tree_host_impl_->ResetCurrentBeginFrameArgsForNextFrame(); |
704 } | 693 } |
705 | 694 |
706 } // namespace cc | 695 } // namespace cc |
OLD | NEW |