| 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/scheduler/scheduler.h" | 5 #include "cc/scheduler/scheduler.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/auto_reset.h" | 9 #include "base/auto_reset.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 242 begin_retro_frame_task_.Cancel(); | 242 begin_retro_frame_task_.Cancel(); |
| 243 state_machine_.DidLoseOutputSurface(); | 243 state_machine_.DidLoseOutputSurface(); |
| 244 UpdateCompositorTimingHistoryRecordingEnabled(); | 244 UpdateCompositorTimingHistoryRecordingEnabled(); |
| 245 ProcessScheduledActions(); | 245 ProcessScheduledActions(); |
| 246 } | 246 } |
| 247 | 247 |
| 248 void Scheduler::DidCreateAndInitializeOutputSurface() { | 248 void Scheduler::DidCreateAndInitializeOutputSurface() { |
| 249 TRACE_EVENT0("cc", "Scheduler::DidCreateAndInitializeOutputSurface"); | 249 TRACE_EVENT0("cc", "Scheduler::DidCreateAndInitializeOutputSurface"); |
| 250 DCHECK(!observing_frame_source_); | 250 DCHECK(!observing_frame_source_); |
| 251 DCHECK(begin_impl_frame_deadline_task_.IsCancelled()); | 251 DCHECK(begin_impl_frame_deadline_task_.IsCancelled()); |
| 252 compositor_timing_history_->DidSwapBuffersReset(); | |
| 253 state_machine_.DidCreateAndInitializeOutputSurface(); | 252 state_machine_.DidCreateAndInitializeOutputSurface(); |
| 253 compositor_timing_history_->DidCreateAndInitializeOutputSurface(); |
| 254 UpdateCompositorTimingHistoryRecordingEnabled(); | 254 UpdateCompositorTimingHistoryRecordingEnabled(); |
| 255 ProcessScheduledActions(); | 255 ProcessScheduledActions(); |
| 256 } | 256 } |
| 257 | 257 |
| 258 void Scheduler::NotifyBeginMainFrameStarted( | 258 void Scheduler::NotifyBeginMainFrameStarted( |
| 259 base::TimeTicks main_thread_start_time) { | 259 base::TimeTicks main_thread_start_time) { |
| 260 TRACE_EVENT0("cc", "Scheduler::NotifyBeginMainFrameStarted"); | 260 TRACE_EVENT0("cc", "Scheduler::NotifyBeginMainFrameStarted"); |
| 261 state_machine_.NotifyBeginMainFrameStarted(); | 261 state_machine_.NotifyBeginMainFrameStarted(); |
| 262 compositor_timing_history_->BeginMainFrameStarted(main_thread_start_time); | 262 compositor_timing_history_->BeginMainFrameStarted(main_thread_start_time); |
| 263 } | 263 } |
| (...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 656 compositor_timing_history_->WillFinishImplFrame( | 656 compositor_timing_history_->WillFinishImplFrame( |
| 657 state_machine_.needs_redraw()); | 657 state_machine_.needs_redraw()); |
| 658 state_machine_.OnBeginImplFrameDeadline(); | 658 state_machine_.OnBeginImplFrameDeadline(); |
| 659 ProcessScheduledActions(); | 659 ProcessScheduledActions(); |
| 660 FinishImplFrame(); | 660 FinishImplFrame(); |
| 661 } | 661 } |
| 662 | 662 |
| 663 void Scheduler::DrawAndSwapIfPossible() { | 663 void Scheduler::DrawAndSwapIfPossible() { |
| 664 bool drawing_with_new_active_tree = | 664 bool drawing_with_new_active_tree = |
| 665 state_machine_.active_tree_needs_first_draw(); | 665 state_machine_.active_tree_needs_first_draw(); |
| 666 bool main_thread_missed_last_deadline = |
| 667 state_machine_.main_thread_missed_last_deadline(); |
| 666 compositor_timing_history_->WillDraw(); | 668 compositor_timing_history_->WillDraw(); |
| 667 state_machine_.WillDraw(); | 669 state_machine_.WillDraw(); |
| 668 DrawResult result = client_->ScheduledActionDrawAndSwapIfPossible(); | 670 DrawResult result = client_->ScheduledActionDrawAndSwapIfPossible(); |
| 669 state_machine_.DidDraw(result); | 671 state_machine_.DidDraw(result); |
| 670 compositor_timing_history_->DidDraw(drawing_with_new_active_tree); | 672 compositor_timing_history_->DidDraw( |
| 673 drawing_with_new_active_tree, main_thread_missed_last_deadline, |
| 674 begin_impl_frame_tracker_.DangerousMethodCurrentOrLast().frame_time); |
| 671 } | 675 } |
| 672 | 676 |
| 673 void Scheduler::DrawAndSwapForced() { | 677 void Scheduler::DrawAndSwapForced() { |
| 674 bool drawing_with_new_active_tree = | 678 bool drawing_with_new_active_tree = |
| 675 state_machine_.active_tree_needs_first_draw(); | 679 state_machine_.active_tree_needs_first_draw(); |
| 680 bool main_thread_missed_last_deadline = |
| 681 state_machine_.main_thread_missed_last_deadline(); |
| 676 compositor_timing_history_->WillDraw(); | 682 compositor_timing_history_->WillDraw(); |
| 677 state_machine_.WillDraw(); | 683 state_machine_.WillDraw(); |
| 678 DrawResult result = client_->ScheduledActionDrawAndSwapForced(); | 684 DrawResult result = client_->ScheduledActionDrawAndSwapForced(); |
| 679 state_machine_.DidDraw(result); | 685 state_machine_.DidDraw(result); |
| 680 compositor_timing_history_->DidDraw(drawing_with_new_active_tree); | 686 compositor_timing_history_->DidDraw( |
| 687 drawing_with_new_active_tree, main_thread_missed_last_deadline, |
| 688 begin_impl_frame_tracker_.DangerousMethodCurrentOrLast().frame_time); |
| 681 } | 689 } |
| 682 | 690 |
| 683 void Scheduler::SetDeferCommits(bool defer_commits) { | 691 void Scheduler::SetDeferCommits(bool defer_commits) { |
| 684 TRACE_EVENT1("cc", "Scheduler::SetDeferCommits", | 692 TRACE_EVENT1("cc", "Scheduler::SetDeferCommits", |
| 685 "defer_commits", | 693 "defer_commits", |
| 686 defer_commits); | 694 defer_commits); |
| 687 state_machine_.SetDeferCommits(defer_commits); | 695 state_machine_.SetDeferCommits(defer_commits); |
| 688 ProcessScheduledActions(); | 696 ProcessScheduledActions(); |
| 689 } | 697 } |
| 690 | 698 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 703 "SchedulerStateMachine", | 711 "SchedulerStateMachine", |
| 704 "state", | 712 "state", |
| 705 AsValue()); | 713 AsValue()); |
| 706 base::AutoReset<SchedulerStateMachine::Action> | 714 base::AutoReset<SchedulerStateMachine::Action> |
| 707 mark_inside_action(&inside_action_, action); | 715 mark_inside_action(&inside_action_, action); |
| 708 switch (action) { | 716 switch (action) { |
| 709 case SchedulerStateMachine::ACTION_NONE: | 717 case SchedulerStateMachine::ACTION_NONE: |
| 710 break; | 718 break; |
| 711 case SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME: | 719 case SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME: |
| 712 compositor_timing_history_->WillBeginMainFrame( | 720 compositor_timing_history_->WillBeginMainFrame( |
| 713 begin_main_frame_args_.on_critical_path); | 721 begin_main_frame_args_.on_critical_path, |
| 722 begin_main_frame_args_.frame_time); |
| 714 state_machine_.WillSendBeginMainFrame(); | 723 state_machine_.WillSendBeginMainFrame(); |
| 715 // TODO(brianderson): Pass begin_main_frame_args_ directly to client. | 724 // TODO(brianderson): Pass begin_main_frame_args_ directly to client. |
| 716 client_->ScheduledActionSendBeginMainFrame(begin_main_frame_args_); | 725 client_->ScheduledActionSendBeginMainFrame(begin_main_frame_args_); |
| 717 break; | 726 break; |
| 718 case SchedulerStateMachine::ACTION_COMMIT: { | 727 case SchedulerStateMachine::ACTION_COMMIT: { |
| 719 // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is | 728 // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is |
| 720 // fixed. | 729 // fixed. |
| 721 tracked_objects::ScopedTracker tracking_profile4( | 730 tracked_objects::ScopedTracker tracking_profile4( |
| 722 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 731 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 723 "461509 Scheduler::ProcessScheduledActions4")); | 732 "461509 Scheduler::ProcessScheduledActions4")); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 741 DrawAndSwapIfPossible(); | 750 DrawAndSwapIfPossible(); |
| 742 break; | 751 break; |
| 743 } | 752 } |
| 744 case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED: | 753 case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED: |
| 745 DrawAndSwapForced(); | 754 DrawAndSwapForced(); |
| 746 break; | 755 break; |
| 747 case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT: { | 756 case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT: { |
| 748 // No action is actually performed, but this allows the state machine to | 757 // No action is actually performed, but this allows the state machine to |
| 749 // drain the pipeline without actually drawing. | 758 // drain the pipeline without actually drawing. |
| 750 state_machine_.AbortDrawAndSwap(); | 759 state_machine_.AbortDrawAndSwap(); |
| 760 compositor_timing_history_->DrawAborted(); |
| 751 break; | 761 break; |
| 752 } | 762 } |
| 753 case SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION: | 763 case SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION: |
| 754 state_machine_.WillBeginOutputSurfaceCreation(); | 764 state_machine_.WillBeginOutputSurfaceCreation(); |
| 755 client_->ScheduledActionBeginOutputSurfaceCreation(); | 765 client_->ScheduledActionBeginOutputSurfaceCreation(); |
| 756 break; | 766 break; |
| 757 case SchedulerStateMachine::ACTION_PREPARE_TILES: | 767 case SchedulerStateMachine::ACTION_PREPARE_TILES: |
| 758 state_machine_.WillPrepareTiles(); | 768 state_machine_.WillPrepareTiles(); |
| 759 client_->ScheduledActionPrepareTiles(); | 769 client_->ScheduledActionPrepareTiles(); |
| 760 break; | 770 break; |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 901 } | 911 } |
| 902 | 912 |
| 903 bool Scheduler::IsBeginMainFrameSentOrStarted() const { | 913 bool Scheduler::IsBeginMainFrameSentOrStarted() const { |
| 904 return (state_machine_.begin_main_frame_state() == | 914 return (state_machine_.begin_main_frame_state() == |
| 905 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT || | 915 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_SENT || |
| 906 state_machine_.begin_main_frame_state() == | 916 state_machine_.begin_main_frame_state() == |
| 907 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_STARTED); | 917 SchedulerStateMachine::BEGIN_MAIN_FRAME_STATE_STARTED); |
| 908 } | 918 } |
| 909 | 919 |
| 910 } // namespace cc | 920 } // namespace cc |
| OLD | NEW |