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 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 BackToBackBeginFrameSource::Create(scheduler->task_runner_.get()); | 57 BackToBackBeginFrameSource::Create(scheduler->task_runner_.get()); |
58 return scheduler->unthrottled_frame_source_internal_.get(); | 58 return scheduler->unthrottled_frame_source_internal_.get(); |
59 } | 59 } |
60 | 60 |
61 Scheduler::Scheduler( | 61 Scheduler::Scheduler( |
62 SchedulerClient* client, | 62 SchedulerClient* client, |
63 const SchedulerSettings& scheduler_settings, | 63 const SchedulerSettings& scheduler_settings, |
64 int layer_tree_host_id, | 64 int layer_tree_host_id, |
65 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, | 65 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, |
66 scoped_ptr<BeginFrameSource> external_begin_frame_source, | 66 scoped_ptr<BeginFrameSource> external_begin_frame_source, |
| 67 RenderingStatsInstrumentation* rendering_stats_instrumentation, |
67 SchedulerFrameSourcesConstructor* frame_sources_constructor) | 68 SchedulerFrameSourcesConstructor* frame_sources_constructor) |
68 : frame_source_(), | 69 : frame_source_(), |
69 primary_frame_source_(NULL), | 70 primary_frame_source_(NULL), |
70 primary_frame_source_internal_(external_begin_frame_source.Pass()), | 71 primary_frame_source_internal_(external_begin_frame_source.Pass()), |
71 vsync_observer_(NULL), | 72 vsync_observer_(NULL), |
72 authoritative_vsync_interval_(base::TimeDelta()), | 73 authoritative_vsync_interval_(base::TimeDelta()), |
73 last_vsync_timebase_(base::TimeTicks()), | 74 last_vsync_timebase_(base::TimeTicks()), |
74 throttle_frame_production_(false), | 75 throttle_frame_production_(false), |
75 settings_(scheduler_settings), | 76 settings_(scheduler_settings), |
76 client_(client), | 77 client_(client), |
77 layer_tree_host_id_(layer_tree_host_id), | 78 layer_tree_host_id_(layer_tree_host_id), |
78 task_runner_(task_runner), | 79 task_runner_(task_runner), |
| 80 compositor_timing_history_(rendering_stats_instrumentation), |
79 begin_impl_frame_deadline_mode_( | 81 begin_impl_frame_deadline_mode_( |
80 SchedulerStateMachine::BEGIN_IMPL_FRAME_DEADLINE_MODE_NONE), | 82 SchedulerStateMachine::BEGIN_IMPL_FRAME_DEADLINE_MODE_NONE), |
81 begin_impl_frame_tracker_(BEGINFRAMETRACKER_FROM_HERE), | 83 begin_impl_frame_tracker_(BEGINFRAMETRACKER_FROM_HERE), |
82 state_machine_(scheduler_settings), | 84 state_machine_(scheduler_settings), |
83 inside_process_scheduled_actions_(false), | 85 inside_process_scheduled_actions_(false), |
84 inside_action_(SchedulerStateMachine::ACTION_NONE), | 86 inside_action_(SchedulerStateMachine::ACTION_NONE), |
85 weak_factory_(this) { | 87 weak_factory_(this) { |
86 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler"), | 88 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler"), |
87 "Scheduler::Scheduler", | 89 "Scheduler::Scheduler", |
88 "settings", | 90 "settings", |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 | 124 |
123 base::TimeTicks Scheduler::Now() const { | 125 base::TimeTicks Scheduler::Now() const { |
124 base::TimeTicks now = base::TimeTicks::Now(); | 126 base::TimeTicks now = base::TimeTicks::Now(); |
125 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler.now"), | 127 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler.now"), |
126 "Scheduler::Now", | 128 "Scheduler::Now", |
127 "now", | 129 "now", |
128 now); | 130 now); |
129 return now; | 131 return now; |
130 } | 132 } |
131 | 133 |
| 134 base::TimeDelta Scheduler::BeginMainFrameToCommitDurationEstimate() const { |
| 135 return compositor_timing_history_.BeginMainFrameToCommitDurationEstimate(); |
| 136 } |
| 137 |
| 138 base::TimeDelta Scheduler::PrepareTilesDurationEstimate() const { |
| 139 return compositor_timing_history_.PrepareTilesDurationEstimate(); |
| 140 } |
| 141 |
| 142 base::TimeDelta Scheduler::PrepareTilesToReadyToActivateDurationEstimate() |
| 143 const { |
| 144 return compositor_timing_history_ |
| 145 .PrepareTilesToReadyToActivateDurationEstimate(); |
| 146 } |
| 147 |
| 148 base::TimeDelta Scheduler::ActivateDurationEstimate() const { |
| 149 return compositor_timing_history_.ActivateDurationEstimate(); |
| 150 } |
| 151 |
| 152 base::TimeDelta Scheduler::DrawDurationEstimate() const { |
| 153 return compositor_timing_history_.DrawDurationEstimate(); |
| 154 } |
| 155 |
132 void Scheduler::CommitVSyncParameters(base::TimeTicks timebase, | 156 void Scheduler::CommitVSyncParameters(base::TimeTicks timebase, |
133 base::TimeDelta interval) { | 157 base::TimeDelta interval) { |
134 if (authoritative_vsync_interval_ != base::TimeDelta()) { | 158 if (authoritative_vsync_interval_ != base::TimeDelta()) { |
135 interval = authoritative_vsync_interval_; | 159 interval = authoritative_vsync_interval_; |
136 } else if (interval == base::TimeDelta()) { | 160 } else if (interval == base::TimeDelta()) { |
137 // TODO(brianderson): We should not be receiving 0 intervals. | 161 // TODO(brianderson): We should not be receiving 0 intervals. |
138 interval = BeginFrameArgs::DefaultInterval(); | 162 interval = BeginFrameArgs::DefaultInterval(); |
139 } | 163 } |
140 | 164 |
141 last_vsync_timebase_ = timebase; | 165 last_vsync_timebase_ = timebase; |
(...skipping 16 matching lines...) Expand all Loading... |
158 state_machine_.SetVisible(visible); | 182 state_machine_.SetVisible(visible); |
159 ProcessScheduledActions(); | 183 ProcessScheduledActions(); |
160 } | 184 } |
161 | 185 |
162 void Scheduler::SetCanDraw(bool can_draw) { | 186 void Scheduler::SetCanDraw(bool can_draw) { |
163 state_machine_.SetCanDraw(can_draw); | 187 state_machine_.SetCanDraw(can_draw); |
164 ProcessScheduledActions(); | 188 ProcessScheduledActions(); |
165 } | 189 } |
166 | 190 |
167 void Scheduler::NotifyReadyToActivate() { | 191 void Scheduler::NotifyReadyToActivate() { |
| 192 compositor_timing_history_.ReadyToActivate(); |
168 state_machine_.NotifyReadyToActivate(); | 193 state_machine_.NotifyReadyToActivate(); |
169 ProcessScheduledActions(); | 194 ProcessScheduledActions(); |
170 } | 195 } |
171 | 196 |
172 void Scheduler::NotifyReadyToDraw() { | 197 void Scheduler::NotifyReadyToDraw() { |
173 // Future work might still needed for crbug.com/352894. | 198 // Future work might still needed for crbug.com/352894. |
174 state_machine_.NotifyReadyToDraw(); | 199 state_machine_.NotifyReadyToDraw(); |
175 ProcessScheduledActions(); | 200 ProcessScheduledActions(); |
176 } | 201 } |
177 | 202 |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 state_machine_.SetImplLatencyTakesPriority(impl_latency_takes_priority); | 260 state_machine_.SetImplLatencyTakesPriority(impl_latency_takes_priority); |
236 ProcessScheduledActions(); | 261 ProcessScheduledActions(); |
237 } | 262 } |
238 | 263 |
239 void Scheduler::NotifyReadyToCommit() { | 264 void Scheduler::NotifyReadyToCommit() { |
240 TRACE_EVENT0("cc", "Scheduler::NotifyReadyToCommit"); | 265 TRACE_EVENT0("cc", "Scheduler::NotifyReadyToCommit"); |
241 state_machine_.NotifyReadyToCommit(); | 266 state_machine_.NotifyReadyToCommit(); |
242 ProcessScheduledActions(); | 267 ProcessScheduledActions(); |
243 } | 268 } |
244 | 269 |
| 270 void Scheduler::DidCommit() { |
| 271 compositor_timing_history_.DidCommit(); |
| 272 } |
| 273 |
245 void Scheduler::BeginMainFrameAborted(CommitEarlyOutReason reason) { | 274 void Scheduler::BeginMainFrameAborted(CommitEarlyOutReason reason) { |
246 TRACE_EVENT1("cc", "Scheduler::BeginMainFrameAborted", "reason", | 275 TRACE_EVENT1("cc", "Scheduler::BeginMainFrameAborted", "reason", |
247 CommitEarlyOutReasonToString(reason)); | 276 CommitEarlyOutReasonToString(reason)); |
| 277 compositor_timing_history_.BeginMainFrameAborted(); |
248 state_machine_.BeginMainFrameAborted(reason); | 278 state_machine_.BeginMainFrameAborted(reason); |
249 ProcessScheduledActions(); | 279 ProcessScheduledActions(); |
250 } | 280 } |
251 | 281 |
| 282 void Scheduler::WillPrepareTiles() { |
| 283 compositor_timing_history_.WillPrepareTiles(); |
| 284 } |
| 285 |
252 void Scheduler::DidPrepareTiles() { | 286 void Scheduler::DidPrepareTiles() { |
| 287 compositor_timing_history_.DidPrepareTiles(); |
253 state_machine_.DidPrepareTiles(); | 288 state_machine_.DidPrepareTiles(); |
254 } | 289 } |
255 | 290 |
256 void Scheduler::DidLoseOutputSurface() { | 291 void Scheduler::DidLoseOutputSurface() { |
257 TRACE_EVENT0("cc", "Scheduler::DidLoseOutputSurface"); | 292 TRACE_EVENT0("cc", "Scheduler::DidLoseOutputSurface"); |
258 begin_retro_frame_args_.clear(); | 293 begin_retro_frame_args_.clear(); |
259 begin_retro_frame_task_.Cancel(); | 294 begin_retro_frame_task_.Cancel(); |
260 state_machine_.DidLoseOutputSurface(); | 295 state_machine_.DidLoseOutputSurface(); |
261 ProcessScheduledActions(); | 296 ProcessScheduledActions(); |
262 } | 297 } |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
501 state_machine_.MainThreadIsInHighLatencyMode(); | 536 state_machine_.MainThreadIsInHighLatencyMode(); |
502 TRACE_EVENT2("cc,benchmark", "Scheduler::BeginImplFrame", "args", | 537 TRACE_EVENT2("cc,benchmark", "Scheduler::BeginImplFrame", "args", |
503 args.AsValue(), "main_thread_is_high_latency", | 538 args.AsValue(), "main_thread_is_high_latency", |
504 main_thread_is_in_high_latency_mode); | 539 main_thread_is_in_high_latency_mode); |
505 TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler"), | 540 TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler"), |
506 "MainThreadLatency", main_thread_is_in_high_latency_mode); | 541 "MainThreadLatency", main_thread_is_in_high_latency_mode); |
507 | 542 |
508 advance_commit_state_task_.Cancel(); | 543 advance_commit_state_task_.Cancel(); |
509 | 544 |
510 BeginFrameArgs adjusted_args = args; | 545 BeginFrameArgs adjusted_args = args; |
511 adjusted_args.deadline -= client_->DrawDurationEstimate(); | 546 adjusted_args.deadline -= DrawDurationEstimate(); |
512 | 547 |
513 if (!state_machine_.impl_latency_takes_priority() && | 548 if (!state_machine_.impl_latency_takes_priority() && |
514 main_thread_is_in_high_latency_mode && | 549 main_thread_is_in_high_latency_mode && |
515 CanCommitAndActivateBeforeDeadline()) { | 550 CanCommitAndActivateBeforeDeadline()) { |
516 state_machine_.SetSkipNextBeginMainFrameToReduceLatency(); | 551 state_machine_.SetSkipNextBeginMainFrameToReduceLatency(); |
517 } | 552 } |
518 | 553 |
519 BeginImplFrame(adjusted_args); | 554 BeginImplFrame(adjusted_args); |
520 | 555 |
521 // The deadline will be scheduled in ProcessScheduledActions. | 556 // The deadline will be scheduled in ProcessScheduledActions. |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
644 } | 679 } |
645 | 680 |
646 | 681 |
647 void Scheduler::PollToAdvanceCommitState() { | 682 void Scheduler::PollToAdvanceCommitState() { |
648 TRACE_EVENT0("cc", "Scheduler::PollToAdvanceCommitState"); | 683 TRACE_EVENT0("cc", "Scheduler::PollToAdvanceCommitState"); |
649 advance_commit_state_task_.Cancel(); | 684 advance_commit_state_task_.Cancel(); |
650 ProcessScheduledActions(); | 685 ProcessScheduledActions(); |
651 } | 686 } |
652 | 687 |
653 void Scheduler::DrawAndSwapIfPossible() { | 688 void Scheduler::DrawAndSwapIfPossible() { |
| 689 compositor_timing_history_.WillDraw(); |
654 DrawResult result = client_->ScheduledActionDrawAndSwapIfPossible(); | 690 DrawResult result = client_->ScheduledActionDrawAndSwapIfPossible(); |
655 state_machine_.DidDrawIfPossibleCompleted(result); | 691 state_machine_.DidDrawIfPossibleCompleted(result); |
| 692 compositor_timing_history_.DidDraw(); |
| 693 } |
| 694 |
| 695 void Scheduler::DrawAndSwapForced() { |
| 696 compositor_timing_history_.WillDraw(); |
| 697 client_->ScheduledActionDrawAndSwapForced(); |
| 698 compositor_timing_history_.DidDraw(); |
656 } | 699 } |
657 | 700 |
658 void Scheduler::SetDeferCommits(bool defer_commits) { | 701 void Scheduler::SetDeferCommits(bool defer_commits) { |
659 TRACE_EVENT1("cc", "Scheduler::SetDeferCommits", | 702 TRACE_EVENT1("cc", "Scheduler::SetDeferCommits", |
660 "defer_commits", | 703 "defer_commits", |
661 defer_commits); | 704 defer_commits); |
662 state_machine_.SetDeferCommits(defer_commits); | 705 state_machine_.SetDeferCommits(defer_commits); |
663 ProcessScheduledActions(); | 706 ProcessScheduledActions(); |
664 } | 707 } |
665 | 708 |
(...skipping 18 matching lines...) Expand all Loading... |
684 state_machine_.UpdateState(action); | 727 state_machine_.UpdateState(action); |
685 base::AutoReset<SchedulerStateMachine::Action> | 728 base::AutoReset<SchedulerStateMachine::Action> |
686 mark_inside_action(&inside_action_, action); | 729 mark_inside_action(&inside_action_, action); |
687 switch (action) { | 730 switch (action) { |
688 case SchedulerStateMachine::ACTION_NONE: | 731 case SchedulerStateMachine::ACTION_NONE: |
689 break; | 732 break; |
690 case SchedulerStateMachine::ACTION_ANIMATE: | 733 case SchedulerStateMachine::ACTION_ANIMATE: |
691 client_->ScheduledActionAnimate(); | 734 client_->ScheduledActionAnimate(); |
692 break; | 735 break; |
693 case SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME: | 736 case SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME: |
| 737 compositor_timing_history_.WillBeginMainFrame(); |
694 client_->ScheduledActionSendBeginMainFrame(); | 738 client_->ScheduledActionSendBeginMainFrame(); |
695 break; | 739 break; |
696 case SchedulerStateMachine::ACTION_COMMIT: { | 740 case SchedulerStateMachine::ACTION_COMMIT: { |
697 // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is | 741 // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is |
698 // fixed. | 742 // fixed. |
699 tracked_objects::ScopedTracker tracking_profile4( | 743 tracked_objects::ScopedTracker tracking_profile4( |
700 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 744 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
701 "461509 Scheduler::ProcessScheduledActions4")); | 745 "461509 Scheduler::ProcessScheduledActions4")); |
702 client_->ScheduledActionCommit(); | 746 client_->ScheduledActionCommit(); |
703 break; | 747 break; |
704 } | 748 } |
705 case SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE: | 749 case SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE: |
| 750 compositor_timing_history_.WillActivate(); |
706 client_->ScheduledActionActivateSyncTree(); | 751 client_->ScheduledActionActivateSyncTree(); |
| 752 compositor_timing_history_.DidActivate(); |
707 break; | 753 break; |
708 case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE: { | 754 case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE: { |
709 // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is | 755 // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is |
710 // fixed. | 756 // fixed. |
711 tracked_objects::ScopedTracker tracking_profile6( | 757 tracked_objects::ScopedTracker tracking_profile6( |
712 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 758 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
713 "461509 Scheduler::ProcessScheduledActions6")); | 759 "461509 Scheduler::ProcessScheduledActions6")); |
714 DrawAndSwapIfPossible(); | 760 DrawAndSwapIfPossible(); |
715 break; | 761 break; |
716 } | 762 } |
717 case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED: | 763 case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED: |
718 client_->ScheduledActionDrawAndSwapForced(); | 764 DrawAndSwapForced(); |
719 break; | 765 break; |
720 case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT: | 766 case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT: |
721 // No action is actually performed, but this allows the state machine to | 767 // No action is actually performed, but this allows the state machine to |
722 // advance out of its waiting to draw state without actually drawing. | 768 // advance out of its waiting to draw state without actually drawing. |
723 break; | 769 break; |
724 case SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION: | 770 case SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION: |
725 client_->ScheduledActionBeginOutputSurfaceCreation(); | 771 client_->ScheduledActionBeginOutputSurfaceCreation(); |
| 772 compositor_timing_history_.PipelineReset(); |
726 break; | 773 break; |
727 case SchedulerStateMachine::ACTION_PREPARE_TILES: | 774 case SchedulerStateMachine::ACTION_PREPARE_TILES: |
728 client_->ScheduledActionPrepareTiles(); | 775 client_->ScheduledActionPrepareTiles(); |
729 break; | 776 break; |
730 case SchedulerStateMachine::ACTION_INVALIDATE_OUTPUT_SURFACE: { | 777 case SchedulerStateMachine::ACTION_INVALIDATE_OUTPUT_SURFACE: { |
731 client_->ScheduledActionInvalidateOutputSurface(); | 778 client_->ScheduledActionInvalidateOutputSurface(); |
732 break; | 779 break; |
733 } | 780 } |
734 } | 781 } |
735 } while (action != SchedulerStateMachine::ACTION_NONE); | 782 } while (action != SchedulerStateMachine::ACTION_NONE); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
782 !begin_impl_frame_deadline_task_.IsCancelled()); | 829 !begin_impl_frame_deadline_task_.IsCancelled()); |
783 state->SetBoolean("advance_commit_state_task", | 830 state->SetBoolean("advance_commit_state_task", |
784 !advance_commit_state_task_.IsCancelled()); | 831 !advance_commit_state_task_.IsCancelled()); |
785 state->SetString("inside_action", | 832 state->SetString("inside_action", |
786 SchedulerStateMachine::ActionToString(inside_action_)); | 833 SchedulerStateMachine::ActionToString(inside_action_)); |
787 state->BeginDictionary("begin_impl_frame_args"); | 834 state->BeginDictionary("begin_impl_frame_args"); |
788 begin_impl_frame_tracker_.AsValueInto(Now(), state); | 835 begin_impl_frame_tracker_.AsValueInto(Now(), state); |
789 state->EndDictionary(); | 836 state->EndDictionary(); |
790 state->EndDictionary(); | 837 state->EndDictionary(); |
791 | 838 |
792 state->BeginDictionary("client_state"); | 839 state->BeginDictionary("compositor_timing_history"); |
| 840 state->SetDouble("begin_main_frame_to_commit_duration_estimate_ms", |
| 841 BeginMainFrameToCommitDurationEstimate().InMillisecondsF()); |
| 842 state->SetDouble("prepare_tiles_duration_estimate_ms", |
| 843 PrepareTilesDurationEstimate().InMillisecondsF()); |
| 844 state->SetDouble( |
| 845 "commit_to_ready_to_activate_duration_estimate_ms", |
| 846 PrepareTilesToReadyToActivateDurationEstimate().InMillisecondsF()); |
| 847 state->SetDouble("activate_duration_estimate_ms", |
| 848 ActivateDurationEstimate().InMillisecondsF()); |
793 state->SetDouble("draw_duration_estimate_ms", | 849 state->SetDouble("draw_duration_estimate_ms", |
794 client_->DrawDurationEstimate().InMillisecondsF()); | 850 DrawDurationEstimate().InMillisecondsF()); |
795 state->SetDouble( | |
796 "begin_main_frame_to_commit_duration_estimate_ms", | |
797 client_->BeginMainFrameToCommitDurationEstimate().InMillisecondsF()); | |
798 state->SetDouble( | |
799 "commit_to_activate_duration_estimate_ms", | |
800 client_->CommitToActivateDurationEstimate().InMillisecondsF()); | |
801 state->EndDictionary(); | 851 state->EndDictionary(); |
802 } | 852 } |
803 | 853 |
804 bool Scheduler::CanCommitAndActivateBeforeDeadline() const { | 854 bool Scheduler::CanCommitAndActivateBeforeDeadline() const { |
805 BeginFrameArgs args = | 855 BeginFrameArgs args = |
806 begin_impl_frame_tracker_.DangerousMethodCurrentOrLast(); | 856 begin_impl_frame_tracker_.DangerousMethodCurrentOrLast(); |
807 | 857 |
808 // Check if the main thread computation and commit can be finished before the | 858 // Check if the main thread computation and commit can be finished before the |
809 // impl thread's deadline. | 859 // impl thread's deadline. |
810 base::TimeTicks estimated_draw_time = | 860 base::TimeTicks estimated_draw_time = |
811 args.frame_time + client_->BeginMainFrameToCommitDurationEstimate() + | 861 args.frame_time + BeginMainFrameToCommitDurationEstimate() + |
812 client_->CommitToActivateDurationEstimate(); | 862 PrepareTilesToReadyToActivateDurationEstimate() + |
| 863 ActivateDurationEstimate(); |
813 | 864 |
814 TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler"), | 865 TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler"), |
815 "CanCommitAndActivateBeforeDeadline", | 866 "CanCommitAndActivateBeforeDeadline", |
816 "time_left_after_drawing_ms", | 867 "time_left_after_drawing_ms", |
817 (args.deadline - estimated_draw_time).InMillisecondsF(), "state", | 868 (args.deadline - estimated_draw_time).InMillisecondsF(), "state", |
818 AsValue()); | 869 AsValue()); |
819 | 870 |
820 return estimated_draw_time < args.deadline; | 871 return estimated_draw_time < args.deadline; |
821 } | 872 } |
822 | 873 |
823 bool Scheduler::IsBeginMainFrameSentOrStarted() const { | 874 bool Scheduler::IsBeginMainFrameSentOrStarted() const { |
824 return (state_machine_.commit_state() == | 875 return (state_machine_.commit_state() == |
825 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT || | 876 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT || |
826 state_machine_.commit_state() == | 877 state_machine_.commit_state() == |
827 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED); | 878 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED); |
828 } | 879 } |
829 | 880 |
830 } // namespace cc | 881 } // namespace cc |
OLD | NEW |