Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(503)

Side by Side Diff: cc/scheduler/scheduler.cc

Issue 1192663005: cc: Measure compositor timing with finer granularity (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@modeTimingHistory3
Patch Set: fixes Created 5 years, 6 months 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 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
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698