| 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 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 state_machine_.SetVisible(visible); | 75 state_machine_.SetVisible(visible); |
| 76 UpdateCompositorTimingHistoryRecordingEnabled(); | 76 UpdateCompositorTimingHistoryRecordingEnabled(); |
| 77 ProcessScheduledActions(); | 77 ProcessScheduledActions(); |
| 78 } | 78 } |
| 79 | 79 |
| 80 void Scheduler::SetCanDraw(bool can_draw) { | 80 void Scheduler::SetCanDraw(bool can_draw) { |
| 81 state_machine_.SetCanDraw(can_draw); | 81 state_machine_.SetCanDraw(can_draw); |
| 82 ProcessScheduledActions(); | 82 ProcessScheduledActions(); |
| 83 } | 83 } |
| 84 | 84 |
| 85 void Scheduler::NotifyReadyToActivate(int source_frame_number) { | 85 void Scheduler::NotifyReadyToActivate() { |
| 86 compositor_timing_history_->ReadyToActivate(); | 86 compositor_timing_history_->ReadyToActivate(); |
| 87 state_machine_.NotifyReadyToActivate(); | 87 state_machine_.NotifyReadyToActivate(); |
| 88 if (source_frame_number != -1) { | |
| 89 if (ready_to_activate_time_.empty() || | |
| 90 ready_to_activate_time_.back().first != | |
| 91 static_cast<unsigned>(source_frame_number)) { | |
| 92 // Note the activate source-frame and timestamp | |
| 93 ready_to_activate_time_.emplace_back(source_frame_number, | |
| 94 base::TimeTicks::Now()); | |
| 95 } | |
| 96 } | |
| 97 ProcessScheduledActions(); | 88 ProcessScheduledActions(); |
| 98 } | 89 } |
| 99 | 90 |
| 100 void Scheduler::NotifyReadyToDraw() { | 91 void Scheduler::NotifyReadyToDraw() { |
| 101 // Future work might still needed for crbug.com/352894. | 92 // Future work might still needed for crbug.com/352894. |
| 102 state_machine_.NotifyReadyToDraw(); | 93 state_machine_.NotifyReadyToDraw(); |
| 103 ProcessScheduledActions(); | 94 ProcessScheduledActions(); |
| 104 } | 95 } |
| 105 | 96 |
| 106 void Scheduler::SetBeginFrameSource(BeginFrameSource* source) { | 97 void Scheduler::SetBeginFrameSource(BeginFrameSource* source) { |
| (...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 609 | 600 |
| 610 void Scheduler::ProcessScheduledActions() { | 601 void Scheduler::ProcessScheduledActions() { |
| 611 // Do not perform actions during compositor shutdown. | 602 // Do not perform actions during compositor shutdown. |
| 612 if (stopped_) | 603 if (stopped_) |
| 613 return; | 604 return; |
| 614 | 605 |
| 615 // We do not allow ProcessScheduledActions to be recursive. | 606 // We do not allow ProcessScheduledActions to be recursive. |
| 616 // The top-level call will iteratively execute the next action for us anyway. | 607 // The top-level call will iteratively execute the next action for us anyway. |
| 617 if (inside_process_scheduled_actions_) | 608 if (inside_process_scheduled_actions_) |
| 618 return; | 609 return; |
| 610 |
| 619 base::AutoReset<bool> mark_inside(&inside_process_scheduled_actions_, true); | 611 base::AutoReset<bool> mark_inside(&inside_process_scheduled_actions_, true); |
| 620 | 612 |
| 621 SchedulerStateMachine::Action action; | 613 SchedulerStateMachine::Action action; |
| 622 do { | 614 do { |
| 623 action = state_machine_.NextAction(); | 615 action = state_machine_.NextAction(); |
| 624 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler"), | 616 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler"), |
| 625 "SchedulerStateMachine", "state", AsValue()); | 617 "SchedulerStateMachine", "state", AsValue()); |
| 626 base::AutoReset<SchedulerStateMachine::Action> mark_inside_action( | 618 base::AutoReset<SchedulerStateMachine::Action> mark_inside_action( |
| 627 &inside_action_, action); | 619 &inside_action_, action); |
| 628 switch (action) { | 620 switch (action) { |
| 629 case SchedulerStateMachine::ACTION_NONE: | 621 case SchedulerStateMachine::ACTION_NONE: |
| 630 break; | 622 break; |
| 631 case SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME: | 623 case SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME: |
| 632 compositor_timing_history_->WillBeginMainFrame( | 624 compositor_timing_history_->WillBeginMainFrame( |
| 633 begin_main_frame_args_.on_critical_path, | 625 begin_main_frame_args_.on_critical_path, |
| 634 begin_main_frame_args_.frame_time); | 626 begin_main_frame_args_.frame_time); |
| 635 state_machine_.WillSendBeginMainFrame(); | 627 state_machine_.WillSendBeginMainFrame(); |
| 636 // TODO(brianderson): Pass begin_main_frame_args_ directly to client. | 628 // TODO(brianderson): Pass begin_main_frame_args_ directly to client. |
| 637 begin_main_frame_args_.ready_to_activate_time = | |
| 638 std::move(ready_to_activate_time_); | |
| 639 ready_to_activate_time_.clear(); | |
| 640 client_->ScheduledActionSendBeginMainFrame(begin_main_frame_args_); | 629 client_->ScheduledActionSendBeginMainFrame(begin_main_frame_args_); |
| 641 break; | 630 break; |
| 642 case SchedulerStateMachine::ACTION_COMMIT: { | 631 case SchedulerStateMachine::ACTION_COMMIT: { |
| 643 bool commit_has_no_updates = false; | 632 bool commit_has_no_updates = false; |
| 644 state_machine_.WillCommit(commit_has_no_updates); | 633 state_machine_.WillCommit(commit_has_no_updates); |
| 645 client_->ScheduledActionCommit(); | 634 client_->ScheduledActionCommit(); |
| 646 break; | 635 break; |
| 647 } | 636 } |
| 648 case SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE: | 637 case SchedulerStateMachine::ACTION_ACTIVATE_SYNC_TREE: |
| 649 compositor_timing_history_->WillActivate(); | 638 compositor_timing_history_->WillActivate(); |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 822 } | 811 } |
| 823 | 812 |
| 824 BeginFrameAck Scheduler::CurrentBeginFrameAckForActiveTree() const { | 813 BeginFrameAck Scheduler::CurrentBeginFrameAckForActiveTree() const { |
| 825 return BeginFrameAck( | 814 return BeginFrameAck( |
| 826 begin_main_frame_args_.source_id, begin_main_frame_args_.sequence_number, | 815 begin_main_frame_args_.source_id, begin_main_frame_args_.sequence_number, |
| 827 state_machine_.last_begin_frame_sequence_number_active_tree_was_fresh(), | 816 state_machine_.last_begin_frame_sequence_number_active_tree_was_fresh(), |
| 828 true); | 817 true); |
| 829 } | 818 } |
| 830 | 819 |
| 831 } // namespace cc | 820 } // namespace cc |
| OLD | NEW |