| 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 |