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 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
297 begin_impl_frame_args_.deadline); | 297 begin_impl_frame_args_.deadline); |
298 int64 intervals = 1 + ((now - timebase) / begin_impl_frame_args_.interval); | 298 int64 intervals = 1 + ((now - timebase) / begin_impl_frame_args_.interval); |
299 return timebase + (begin_impl_frame_args_.interval * intervals); | 299 return timebase + (begin_impl_frame_args_.interval * intervals); |
300 } | 300 } |
301 | 301 |
302 base::TimeTicks Scheduler::LastBeginImplFrameTime() { | 302 base::TimeTicks Scheduler::LastBeginImplFrameTime() { |
303 return begin_impl_frame_args_.frame_time; | 303 return begin_impl_frame_args_.frame_time; |
304 } | 304 } |
305 | 305 |
306 void Scheduler::SetupNextBeginFrameIfNeeded() { | 306 void Scheduler::SetupNextBeginFrameIfNeeded() { |
307 if (!task_runner_.get()) | 307 // Never call SetNeedsBeginFrames if the frame source already has the right |
308 return; | 308 // value. |
309 | 309 if (frame_source_->NeedsBeginFrames() != state_machine_.BeginFrameNeeded()) { |
310 if (state_machine_.ShouldSetNeedsBeginFrames( | 310 if (state_machine_.BeginFrameNeeded()) { |
311 frame_source_->NeedsBeginFrames())) { | 311 // Call SetNeedsBeginFrames(true) as soon as possible. |
312 frame_source_->SetNeedsBeginFrames(state_machine_.BeginFrameNeeded()); | 312 frame_source_->SetNeedsBeginFrames(true); |
313 if (!frame_source_->NeedsBeginFrames()) { | 313 } else if (state_machine_.begin_impl_frame_state() == |
| 314 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE) { |
| 315 // Call SetNeedsBeginFrames(false) in between frames only. |
| 316 frame_source_->SetNeedsBeginFrames(false); |
314 client_->SendBeginMainFrameNotExpectedSoon(); | 317 client_->SendBeginMainFrameNotExpectedSoon(); |
315 } | 318 } |
316 } | 319 } |
317 | 320 |
318 if (state_machine_.begin_impl_frame_state() == | |
319 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE) { | |
320 frame_source_->DidFinishFrame(begin_retro_frame_args_.size()); | |
321 } | |
322 | |
323 PostBeginRetroFrameIfNeeded(); | 321 PostBeginRetroFrameIfNeeded(); |
324 SetupPollingMechanisms(); | |
325 } | 322 } |
326 | 323 |
327 // We may need to poll when we can't rely on BeginFrame to advance certain | 324 // We may need to poll when we can't rely on BeginFrame to advance certain |
328 // state or to avoid deadlock. | 325 // state or to avoid deadlock. |
329 void Scheduler::SetupPollingMechanisms() { | 326 void Scheduler::SetupPollingMechanisms() { |
330 bool needs_advance_commit_state_timer = false; | 327 bool needs_advance_commit_state_timer = false; |
331 // Setup PollForAnticipatedDrawTriggers if we need to monitor state but | 328 // Setup PollForAnticipatedDrawTriggers if we need to monitor state but |
332 // aren't expecting any more BeginFrames. This should only be needed by | 329 // aren't expecting any more BeginFrames. This should only be needed by |
333 // the synchronous compositor when BeginFrameNeeded is false. | 330 // the synchronous compositor when BeginFrameNeeded is false. |
334 if (state_machine_.ShouldPollForAnticipatedDrawTriggers()) { | 331 if (state_machine_.ShouldPollForAnticipatedDrawTriggers()) { |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
530 | 527 |
531 begin_impl_frame_args_ = args; | 528 begin_impl_frame_args_ = args; |
532 begin_impl_frame_args_.deadline -= client_->DrawDurationEstimate(); | 529 begin_impl_frame_args_.deadline -= client_->DrawDurationEstimate(); |
533 | 530 |
534 if (!state_machine_.impl_latency_takes_priority() && | 531 if (!state_machine_.impl_latency_takes_priority() && |
535 main_thread_is_in_high_latency_mode && | 532 main_thread_is_in_high_latency_mode && |
536 CanCommitAndActivateBeforeDeadline()) { | 533 CanCommitAndActivateBeforeDeadline()) { |
537 state_machine_.SetSkipNextBeginMainFrameToReduceLatency(); | 534 state_machine_.SetSkipNextBeginMainFrameToReduceLatency(); |
538 } | 535 } |
539 | 536 |
540 state_machine_.OnBeginImplFrame(begin_impl_frame_args_); | 537 state_machine_.OnBeginImplFrame(); |
541 devtools_instrumentation::DidBeginFrame(layer_tree_host_id_); | 538 devtools_instrumentation::DidBeginFrame(layer_tree_host_id_); |
542 client_->WillBeginImplFrame(begin_impl_frame_args_); | 539 client_->WillBeginImplFrame(begin_impl_frame_args_); |
543 | 540 |
544 ProcessScheduledActions(); | 541 ProcessScheduledActions(); |
545 | 542 |
546 state_machine_.OnBeginImplFrameDeadlinePending(); | 543 state_machine_.OnBeginImplFrameDeadlinePending(); |
547 | 544 |
548 if (settings_.using_synchronous_renderer_compositor) { | 545 if (settings_.using_synchronous_renderer_compositor) { |
549 // The synchronous renderer compositor has to make its GL calls | 546 // The synchronous renderer compositor has to make its GL calls |
550 // within this call. | 547 // within this call. |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
620 // order to wait for more user-input before starting the next commit. | 617 // order to wait for more user-input before starting the next commit. |
621 // * Creating a new OuputSurface will not occur during the deadline in | 618 // * Creating a new OuputSurface will not occur during the deadline in |
622 // order to allow the state machine to "settle" first. | 619 // order to allow the state machine to "settle" first. |
623 | 620 |
624 // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is fixed. | 621 // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is fixed. |
625 tracked_objects::ScopedTracker tracking_profile1( | 622 tracked_objects::ScopedTracker tracking_profile1( |
626 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 623 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
627 "461509 Scheduler::OnBeginImplFrameDeadline1")); | 624 "461509 Scheduler::OnBeginImplFrameDeadline1")); |
628 state_machine_.OnBeginImplFrameDeadline(); | 625 state_machine_.OnBeginImplFrameDeadline(); |
629 ProcessScheduledActions(); | 626 ProcessScheduledActions(); |
630 | |
631 // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is fixed. | |
632 tracked_objects::ScopedTracker tracking_profile2( | |
633 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
634 "461509 Scheduler::OnBeginImplFrameDeadline2")); | |
635 state_machine_.OnBeginImplFrameIdle(); | 627 state_machine_.OnBeginImplFrameIdle(); |
636 ProcessScheduledActions(); | 628 ProcessScheduledActions(); |
637 | 629 |
638 // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is fixed. | |
639 tracked_objects::ScopedTracker tracking_profile3( | |
640 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
641 "461509 Scheduler::OnBeginImplFrameDeadline3")); | |
642 client_->DidBeginImplFrameDeadline(); | 630 client_->DidBeginImplFrameDeadline(); |
| 631 frame_source_->DidFinishFrame(begin_retro_frame_args_.size()); |
643 } | 632 } |
644 | 633 |
645 void Scheduler::PollForAnticipatedDrawTriggers() { | 634 void Scheduler::PollForAnticipatedDrawTriggers() { |
646 TRACE_EVENT0("cc", "Scheduler::PollForAnticipatedDrawTriggers"); | 635 TRACE_EVENT0("cc", "Scheduler::PollForAnticipatedDrawTriggers"); |
647 poll_for_draw_triggers_task_.Cancel(); | 636 poll_for_draw_triggers_task_.Cancel(); |
648 state_machine_.DidEnterPollForAnticipatedDrawTriggers(); | 637 state_machine_.DidEnterPollForAnticipatedDrawTriggers(); |
649 ProcessScheduledActions(); | 638 ProcessScheduledActions(); |
650 state_machine_.DidLeavePollForAnticipatedDrawTriggers(); | 639 state_machine_.DidLeavePollForAnticipatedDrawTriggers(); |
651 } | 640 } |
652 | 641 |
(...skipping 19 matching lines...) Expand all Loading... |
672 void Scheduler::ProcessScheduledActions() { | 661 void Scheduler::ProcessScheduledActions() { |
673 // We do not allow ProcessScheduledActions to be recursive. | 662 // We do not allow ProcessScheduledActions to be recursive. |
674 // The top-level call will iteratively execute the next action for us anyway. | 663 // The top-level call will iteratively execute the next action for us anyway. |
675 if (inside_process_scheduled_actions_) | 664 if (inside_process_scheduled_actions_) |
676 return; | 665 return; |
677 | 666 |
678 base::AutoReset<bool> mark_inside(&inside_process_scheduled_actions_, true); | 667 base::AutoReset<bool> mark_inside(&inside_process_scheduled_actions_, true); |
679 | 668 |
680 SchedulerStateMachine::Action action; | 669 SchedulerStateMachine::Action action; |
681 do { | 670 do { |
682 // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is fixed. | |
683 tracked_objects::ScopedTracker tracking_profile1( | |
684 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
685 "461509 Scheduler::ProcessScheduledActions1")); | |
686 action = state_machine_.NextAction(); | 671 action = state_machine_.NextAction(); |
687 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler"), | 672 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler"), |
688 "SchedulerStateMachine", | 673 "SchedulerStateMachine", |
689 "state", | 674 "state", |
690 AsValue()); | 675 AsValue()); |
691 VLOG(2) << "Scheduler::ProcessScheduledActions: " | 676 VLOG(2) << "Scheduler::ProcessScheduledActions: " |
692 << SchedulerStateMachine::ActionToString(action) << " " | 677 << SchedulerStateMachine::ActionToString(action) << " " |
693 << state_machine_.GetStatesForDebugging(); | 678 << state_machine_.GetStatesForDebugging(); |
694 state_machine_.UpdateState(action); | 679 state_machine_.UpdateState(action); |
695 base::AutoReset<SchedulerStateMachine::Action> | 680 base::AutoReset<SchedulerStateMachine::Action> |
696 mark_inside_action(&inside_action_, action); | 681 mark_inside_action(&inside_action_, action); |
697 switch (action) { | 682 switch (action) { |
698 case SchedulerStateMachine::ACTION_NONE: | 683 case SchedulerStateMachine::ACTION_NONE: |
699 break; | 684 break; |
700 case SchedulerStateMachine::ACTION_ANIMATE: { | 685 case SchedulerStateMachine::ACTION_ANIMATE: |
701 // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is | |
702 // fixed. | |
703 tracked_objects::ScopedTracker tracking_profile2( | |
704 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
705 "461509 Scheduler::ProcessScheduledActions2")); | |
706 client_->ScheduledActionAnimate(); | 686 client_->ScheduledActionAnimate(); |
707 break; | 687 break; |
708 } | 688 case SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME: |
709 case SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME: { | |
710 // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is | |
711 // fixed. | |
712 tracked_objects::ScopedTracker tracking_profile3( | |
713 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
714 "461509 Scheduler::ProcessScheduledActions3")); | |
715 client_->ScheduledActionSendBeginMainFrame(); | 689 client_->ScheduledActionSendBeginMainFrame(); |
716 break; | 690 break; |
717 } | |
718 case SchedulerStateMachine::ACTION_COMMIT: { | 691 case SchedulerStateMachine::ACTION_COMMIT: { |
719 // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is | 692 // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is |
720 // fixed. | 693 // fixed. |
721 tracked_objects::ScopedTracker tracking_profile4( | 694 tracked_objects::ScopedTracker tracking_profile4( |
722 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 695 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
723 "461509 Scheduler::ProcessScheduledActions4")); | 696 "461509 Scheduler::ProcessScheduledActions4")); |
724 client_->ScheduledActionCommit(); | 697 client_->ScheduledActionCommit(); |
725 break; | 698 break; |
726 } | 699 } |
727 case SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE: { | 700 case SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE: |
728 // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is | |
729 // fixed. | |
730 tracked_objects::ScopedTracker tracking_profile5( | |
731 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
732 "461509 Scheduler::ProcessScheduledActions5")); | |
733 client_->ScheduledActionActivateSyncTree(); | 701 client_->ScheduledActionActivateSyncTree(); |
734 break; | 702 break; |
735 } | |
736 case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE: { | 703 case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE: { |
737 // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is | 704 // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is |
738 // fixed. | 705 // fixed. |
739 tracked_objects::ScopedTracker tracking_profile6( | 706 tracked_objects::ScopedTracker tracking_profile6( |
740 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 707 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
741 "461509 Scheduler::ProcessScheduledActions6")); | 708 "461509 Scheduler::ProcessScheduledActions6")); |
742 DrawAndSwapIfPossible(); | 709 DrawAndSwapIfPossible(); |
743 break; | 710 break; |
744 } | 711 } |
745 case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED: { | 712 case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED: |
746 // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is | |
747 // fixed. | |
748 tracked_objects::ScopedTracker tracking_profile7( | |
749 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
750 "461509 Scheduler::ProcessScheduledActions7")); | |
751 client_->ScheduledActionDrawAndSwapForced(); | 713 client_->ScheduledActionDrawAndSwapForced(); |
752 break; | 714 break; |
753 } | |
754 case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT: | 715 case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT: |
755 // No action is actually performed, but this allows the state machine to | 716 // No action is actually performed, but this allows the state machine to |
756 // advance out of its waiting to draw state without actually drawing. | 717 // advance out of its waiting to draw state without actually drawing. |
757 break; | 718 break; |
758 case SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION: { | 719 case SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION: |
759 // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is | |
760 // fixed. | |
761 tracked_objects::ScopedTracker tracking_profile8( | |
762 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
763 "461509 Scheduler::ProcessScheduledActions8")); | |
764 client_->ScheduledActionBeginOutputSurfaceCreation(); | 720 client_->ScheduledActionBeginOutputSurfaceCreation(); |
765 break; | 721 break; |
766 } | 722 case SchedulerStateMachine::ACTION_PREPARE_TILES: |
767 case SchedulerStateMachine::ACTION_PREPARE_TILES: { | |
768 // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is | |
769 // fixed. | |
770 tracked_objects::ScopedTracker tracking_profile9( | |
771 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
772 "461509 Scheduler::ProcessScheduledActions9")); | |
773 client_->ScheduledActionPrepareTiles(); | 723 client_->ScheduledActionPrepareTiles(); |
774 break; | 724 break; |
775 } | |
776 } | 725 } |
777 } while (action != SchedulerStateMachine::ACTION_NONE); | 726 } while (action != SchedulerStateMachine::ACTION_NONE); |
778 | 727 |
779 // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is fixed. | 728 SetupPollingMechanisms(); |
780 tracked_objects::ScopedTracker tracking_profile10( | 729 |
781 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
782 "461509 Scheduler::ProcessScheduledActions10")); | |
783 SetupNextBeginFrameIfNeeded(); | |
784 client_->DidAnticipatedDrawTimeChange(AnticipatedDrawTime()); | 730 client_->DidAnticipatedDrawTimeChange(AnticipatedDrawTime()); |
785 | 731 |
786 // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is fixed. | |
787 tracked_objects::ScopedTracker tracking_profile11( | |
788 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
789 "461509 Scheduler::ProcessScheduledActions11")); | |
790 RescheduleBeginImplFrameDeadlineIfNeeded(); | 732 RescheduleBeginImplFrameDeadlineIfNeeded(); |
| 733 |
| 734 SetupNextBeginFrameIfNeeded(); |
791 } | 735 } |
792 | 736 |
793 scoped_refptr<base::trace_event::ConvertableToTraceFormat> Scheduler::AsValue() | 737 scoped_refptr<base::trace_event::ConvertableToTraceFormat> Scheduler::AsValue() |
794 const { | 738 const { |
795 scoped_refptr<base::trace_event::TracedValue> state = | 739 scoped_refptr<base::trace_event::TracedValue> state = |
796 new base::trace_event::TracedValue(); | 740 new base::trace_event::TracedValue(); |
797 AsValueInto(state.get()); | 741 AsValueInto(state.get()); |
798 return state; | 742 return state; |
799 } | 743 } |
800 | 744 |
801 void Scheduler::AsValueInto(base::trace_event::TracedValue* state) const { | 745 void Scheduler::AsValueInto(base::trace_event::TracedValue* state) const { |
802 state->BeginDictionary("state_machine"); | 746 state->BeginDictionary("state_machine"); |
803 state_machine_.AsValueInto(state, Now()); | 747 state_machine_.AsValueInto(state); |
804 state->EndDictionary(); | 748 state->EndDictionary(); |
805 | 749 |
806 // Only trace frame sources when explicitly enabled - http://crbug.com/420607 | 750 // Only trace frame sources when explicitly enabled - http://crbug.com/420607 |
807 bool frame_tracing_enabled = false; | 751 bool frame_tracing_enabled = false; |
808 TRACE_EVENT_CATEGORY_GROUP_ENABLED( | 752 TRACE_EVENT_CATEGORY_GROUP_ENABLED( |
809 TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler.frames"), | 753 TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler.frames"), |
810 &frame_tracing_enabled); | 754 &frame_tracing_enabled); |
811 if (frame_tracing_enabled) { | 755 if (frame_tracing_enabled) { |
812 state->BeginDictionary("frame_source_"); | 756 state->BeginDictionary("frame_source_"); |
813 frame_source_->AsValueInto(state); | 757 frame_source_->AsValueInto(state); |
(...skipping 13 matching lines...) Expand all Loading... |
827 state->SetBoolean("begin_impl_frame_deadline_task_", | 771 state->SetBoolean("begin_impl_frame_deadline_task_", |
828 !begin_impl_frame_deadline_task_.IsCancelled()); | 772 !begin_impl_frame_deadline_task_.IsCancelled()); |
829 state->SetBoolean("poll_for_draw_triggers_task_", | 773 state->SetBoolean("poll_for_draw_triggers_task_", |
830 !poll_for_draw_triggers_task_.IsCancelled()); | 774 !poll_for_draw_triggers_task_.IsCancelled()); |
831 state->SetBoolean("advance_commit_state_task_", | 775 state->SetBoolean("advance_commit_state_task_", |
832 !advance_commit_state_task_.IsCancelled()); | 776 !advance_commit_state_task_.IsCancelled()); |
833 state->BeginDictionary("begin_impl_frame_args"); | 777 state->BeginDictionary("begin_impl_frame_args"); |
834 begin_impl_frame_args_.AsValueInto(state); | 778 begin_impl_frame_args_.AsValueInto(state); |
835 state->EndDictionary(); | 779 state->EndDictionary(); |
836 | 780 |
| 781 base::TimeTicks now = Now(); |
| 782 base::TimeTicks frame_time = begin_impl_frame_args_.frame_time; |
| 783 base::TimeTicks deadline = begin_impl_frame_args_.deadline; |
| 784 base::TimeDelta interval = begin_impl_frame_args_.interval; |
| 785 state->BeginDictionary("major_timestamps_in_ms"); |
| 786 state->SetDouble("0_interval", interval.InMillisecondsF()); |
| 787 state->SetDouble("1_now_to_deadline", (deadline - now).InMillisecondsF()); |
| 788 state->SetDouble("2_frame_time_to_now", (now - frame_time).InMillisecondsF()); |
| 789 state->SetDouble("3_frame_time_to_deadline", |
| 790 (deadline - frame_time).InMillisecondsF()); |
| 791 state->SetDouble("4_now", (now - base::TimeTicks()).InMillisecondsF()); |
| 792 state->SetDouble("5_frame_time", |
| 793 (frame_time - base::TimeTicks()).InMillisecondsF()); |
| 794 state->SetDouble("6_deadline", |
| 795 (deadline - base::TimeTicks()).InMillisecondsF()); |
| 796 state->EndDictionary(); |
| 797 |
837 state->EndDictionary(); | 798 state->EndDictionary(); |
838 | 799 |
839 state->BeginDictionary("client_state"); | 800 state->BeginDictionary("client_state"); |
840 state->SetDouble("draw_duration_estimate_ms", | 801 state->SetDouble("draw_duration_estimate_ms", |
841 client_->DrawDurationEstimate().InMillisecondsF()); | 802 client_->DrawDurationEstimate().InMillisecondsF()); |
842 state->SetDouble( | 803 state->SetDouble( |
843 "begin_main_frame_to_commit_duration_estimate_ms", | 804 "begin_main_frame_to_commit_duration_estimate_ms", |
844 client_->BeginMainFrameToCommitDurationEstimate().InMillisecondsF()); | 805 client_->BeginMainFrameToCommitDurationEstimate().InMillisecondsF()); |
845 state->SetDouble( | 806 state->SetDouble( |
846 "commit_to_activate_duration_estimate_ms", | 807 "commit_to_activate_duration_estimate_ms", |
(...skipping 21 matching lines...) Expand all Loading... |
868 } | 829 } |
869 | 830 |
870 bool Scheduler::IsBeginMainFrameSentOrStarted() const { | 831 bool Scheduler::IsBeginMainFrameSentOrStarted() const { |
871 return (state_machine_.commit_state() == | 832 return (state_machine_.commit_state() == |
872 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT || | 833 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT || |
873 state_machine_.commit_state() == | 834 state_machine_.commit_state() == |
874 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED); | 835 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED); |
875 } | 836 } |
876 | 837 |
877 } // namespace cc | 838 } // namespace cc |
OLD | NEW |