| 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_state_machine.h" | 5 #include "cc/scheduler/scheduler_state_machine.h" |
| 6 | 6 |
| 7 #include "base/format_macros.h" | 7 #include "base/format_macros.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
| 10 #include "base/trace_event/trace_event.h" | 10 #include "base/trace_event/trace_event.h" |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 BeginFrameArgs::kInvalidFrameNumber), | 35 BeginFrameArgs::kInvalidFrameNumber), |
| 36 last_begin_frame_sequence_number_compositor_frame_was_fresh_( | 36 last_begin_frame_sequence_number_compositor_frame_was_fresh_( |
| 37 BeginFrameArgs::kInvalidFrameNumber), | 37 BeginFrameArgs::kInvalidFrameNumber), |
| 38 commit_count_(0), | 38 commit_count_(0), |
| 39 current_frame_number_(0), | 39 current_frame_number_(0), |
| 40 last_frame_number_submit_performed_(-1), | 40 last_frame_number_submit_performed_(-1), |
| 41 last_frame_number_draw_performed_(-1), | 41 last_frame_number_draw_performed_(-1), |
| 42 last_frame_number_begin_main_frame_sent_(-1), | 42 last_frame_number_begin_main_frame_sent_(-1), |
| 43 last_frame_number_invalidate_compositor_frame_sink_performed_(-1), | 43 last_frame_number_invalidate_compositor_frame_sink_performed_(-1), |
| 44 draw_funnel_(false), | 44 draw_funnel_(false), |
| 45 send_begin_main_frame_funnel_(true), | 45 did_send_begin_main_frame_for_current_frame_(true), |
| 46 invalidate_compositor_frame_sink_funnel_(false), | 46 invalidate_compositor_frame_sink_funnel_(false), |
| 47 impl_side_invalidation_funnel_(false), | 47 impl_side_invalidation_funnel_(false), |
| 48 did_notify_begin_main_frame_not_sent_(true), |
| 49 did_commit_during_frame_(false), |
| 48 prepare_tiles_funnel_(0), | 50 prepare_tiles_funnel_(0), |
| 49 consecutive_checkerboard_animations_(0), | 51 consecutive_checkerboard_animations_(0), |
| 50 pending_submit_frames_(0), | 52 pending_submit_frames_(0), |
| 51 submit_frames_with_current_compositor_frame_sink_(0), | 53 submit_frames_with_current_compositor_frame_sink_(0), |
| 52 needs_redraw_(false), | 54 needs_redraw_(false), |
| 53 needs_prepare_tiles_(false), | 55 needs_prepare_tiles_(false), |
| 54 needs_begin_main_frame_(false), | 56 needs_begin_main_frame_(false), |
| 55 needs_one_begin_impl_frame_(false), | 57 needs_one_begin_impl_frame_(false), |
| 56 visible_(false), | 58 visible_(false), |
| 57 begin_frame_source_paused_(false), | 59 begin_frame_source_paused_(false), |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 187 case ACTION_DRAW_ABORT: | 189 case ACTION_DRAW_ABORT: |
| 188 return "ACTION_DRAW_ABORT"; | 190 return "ACTION_DRAW_ABORT"; |
| 189 case ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION: | 191 case ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION: |
| 190 return "ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION"; | 192 return "ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION"; |
| 191 case ACTION_PREPARE_TILES: | 193 case ACTION_PREPARE_TILES: |
| 192 return "ACTION_PREPARE_TILES"; | 194 return "ACTION_PREPARE_TILES"; |
| 193 case ACTION_INVALIDATE_COMPOSITOR_FRAME_SINK: | 195 case ACTION_INVALIDATE_COMPOSITOR_FRAME_SINK: |
| 194 return "ACTION_INVALIDATE_COMPOSITOR_FRAME_SINK"; | 196 return "ACTION_INVALIDATE_COMPOSITOR_FRAME_SINK"; |
| 195 case ACTION_PERFORM_IMPL_SIDE_INVALIDATION: | 197 case ACTION_PERFORM_IMPL_SIDE_INVALIDATION: |
| 196 return "ACTION_PERFORM_IMPL_SIDE_INVALIDATION"; | 198 return "ACTION_PERFORM_IMPL_SIDE_INVALIDATION"; |
| 199 case ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT: |
| 200 return "ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT"; |
| 197 } | 201 } |
| 198 NOTREACHED(); | 202 NOTREACHED(); |
| 199 return "???"; | 203 return "???"; |
| 200 } | 204 } |
| 201 | 205 |
| 202 std::unique_ptr<base::trace_event::ConvertableToTraceFormat> | 206 std::unique_ptr<base::trace_event::ConvertableToTraceFormat> |
| 203 SchedulerStateMachine::AsValue() const { | 207 SchedulerStateMachine::AsValue() const { |
| 204 std::unique_ptr<base::trace_event::TracedValue> state( | 208 std::unique_ptr<base::trace_event::TracedValue> state( |
| 205 new base::trace_event::TracedValue()); | 209 new base::trace_event::TracedValue()); |
| 206 AsValueInto(state.get()); | 210 AsValueInto(state.get()); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 237 state->SetInteger("last_begin_frame_sequence_number_begin_main_frame_sent", | 241 state->SetInteger("last_begin_frame_sequence_number_begin_main_frame_sent", |
| 238 last_begin_frame_sequence_number_begin_main_frame_sent_); | 242 last_begin_frame_sequence_number_begin_main_frame_sent_); |
| 239 state->SetInteger("last_begin_frame_sequence_number_pending_tree_was_fresh", | 243 state->SetInteger("last_begin_frame_sequence_number_pending_tree_was_fresh", |
| 240 last_begin_frame_sequence_number_pending_tree_was_fresh_); | 244 last_begin_frame_sequence_number_pending_tree_was_fresh_); |
| 241 state->SetInteger("last_begin_frame_sequence_number_active_tree_was_fresh", | 245 state->SetInteger("last_begin_frame_sequence_number_active_tree_was_fresh", |
| 242 last_begin_frame_sequence_number_active_tree_was_fresh_); | 246 last_begin_frame_sequence_number_active_tree_was_fresh_); |
| 243 state->SetInteger( | 247 state->SetInteger( |
| 244 "last_begin_frame_sequence_number_compositor_frame_was_fresh", | 248 "last_begin_frame_sequence_number_compositor_frame_was_fresh", |
| 245 last_begin_frame_sequence_number_compositor_frame_was_fresh_); | 249 last_begin_frame_sequence_number_compositor_frame_was_fresh_); |
| 246 state->SetBoolean("funnel: draw_funnel", draw_funnel_); | 250 state->SetBoolean("funnel: draw_funnel", draw_funnel_); |
| 247 state->SetBoolean("funnel: send_begin_main_frame_funnel", | 251 state->SetBoolean("funnel: did_send_begin_main_frame", |
| 248 send_begin_main_frame_funnel_); | 252 did_send_begin_main_frame_for_current_frame_); |
| 253 state->SetBoolean("funnel: did_notify_begin_main_frame_not_sent", |
| 254 did_notify_begin_main_frame_not_sent_); |
| 255 state->SetBoolean("funnel: did_commit_during_frame", |
| 256 did_commit_during_frame_); |
| 249 state->SetInteger("funnel: prepare_tiles_funnel", prepare_tiles_funnel_); | 257 state->SetInteger("funnel: prepare_tiles_funnel", prepare_tiles_funnel_); |
| 250 state->SetBoolean("funnel: invalidate_compositor_frame_sink_funnel", | 258 state->SetBoolean("funnel: invalidate_compositor_frame_sink_funnel", |
| 251 invalidate_compositor_frame_sink_funnel_); | 259 invalidate_compositor_frame_sink_funnel_); |
| 252 state->SetBoolean("funnel: impl_side_invalidation_funnel", | 260 state->SetBoolean("funnel: impl_side_invalidation_funnel", |
| 253 impl_side_invalidation_funnel_); | 261 impl_side_invalidation_funnel_); |
| 254 state->SetInteger("consecutive_checkerboard_animations", | 262 state->SetInteger("consecutive_checkerboard_animations", |
| 255 consecutive_checkerboard_animations_); | 263 consecutive_checkerboard_animations_); |
| 256 state->SetInteger("pending_submit_frames_", pending_submit_frames_); | 264 state->SetInteger("pending_submit_frames_", pending_submit_frames_); |
| 257 state->SetInteger("submit_frames_with_current_compositor_frame_sink", | 265 state->SetInteger("submit_frames_with_current_compositor_frame_sink", |
| 258 submit_frames_with_current_compositor_frame_sink_); | 266 submit_frames_with_current_compositor_frame_sink_); |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 421 return false; | 429 return false; |
| 422 | 430 |
| 423 // If we want to force activation, do so ASAP. | 431 // If we want to force activation, do so ASAP. |
| 424 if (PendingActivationsShouldBeForced()) | 432 if (PendingActivationsShouldBeForced()) |
| 425 return true; | 433 return true; |
| 426 | 434 |
| 427 // At this point, only activate if we are ready to activate. | 435 // At this point, only activate if we are ready to activate. |
| 428 return pending_tree_is_ready_for_activation_; | 436 return pending_tree_is_ready_for_activation_; |
| 429 } | 437 } |
| 430 | 438 |
| 439 bool SchedulerStateMachine::ShouldNotifyBeginMainFrameNotSent() const { |
| 440 // This method returns true if most of the conditions for sending a |
| 441 // BeginMainFrame are met, but one is not actually requested. This gives the |
| 442 // main thread the chance to do something else. |
| 443 |
| 444 // Don't notify if a BeginMainFrame has already been requested or is in |
| 445 // progress. |
| 446 if (needs_begin_main_frame_ || |
| 447 begin_main_frame_state_ != BEGIN_MAIN_FRAME_STATE_IDLE) |
| 448 return false; |
| 449 |
| 450 // Only notify when we're visible. |
| 451 if (!visible_) |
| 452 return false; |
| 453 |
| 454 // There are no BeginImplFrames while BeginFrameSource is paused, meaning |
| 455 // the scheduler should send SendBeginMainFrameNotExpectedSoon instead, |
| 456 // indicating a longer period of inactivity. |
| 457 if (begin_frame_source_paused_) |
| 458 return false; |
| 459 |
| 460 // Do not notify that no BeginMainFrame was sent too many times in a single |
| 461 // frame. |
| 462 if (did_notify_begin_main_frame_not_sent_) |
| 463 return false; |
| 464 |
| 465 // Do not notify if a commit happened during this frame as the main thread |
| 466 // will already be active and does not need to be woken up to make further |
| 467 // actions. (This occurs if the main frame was scheduled but didn't complete |
| 468 // before the vsync deadline). |
| 469 if (did_commit_during_frame_) |
| 470 return false; |
| 471 |
| 472 return true; |
| 473 } |
| 474 |
| 431 bool SchedulerStateMachine::CouldSendBeginMainFrame() const { | 475 bool SchedulerStateMachine::CouldSendBeginMainFrame() const { |
| 432 if (!needs_begin_main_frame_) | 476 if (!needs_begin_main_frame_) |
| 433 return false; | 477 return false; |
| 434 | 478 |
| 435 // We can not perform commits if we are not visible. | 479 // We can not perform commits if we are not visible. |
| 436 if (!visible_) | 480 if (!visible_) |
| 437 return false; | 481 return false; |
| 438 | 482 |
| 439 // There are no BeginImplFrames while BeginFrameSource is paused, | 483 // There are no BeginImplFrames while BeginFrameSource is paused, |
| 440 // so should also stop BeginMainFrames. | 484 // so should also stop BeginMainFrames. |
| 441 if (begin_frame_source_paused_) | 485 if (begin_frame_source_paused_) |
| 442 return false; | 486 return false; |
| 443 | 487 |
| 444 // Do not make a new commits when it is deferred. | 488 // Do not make a new commits when it is deferred. |
| 445 if (defer_commits_) | 489 if (defer_commits_) |
| 446 return false; | 490 return false; |
| 447 | 491 |
| 448 return true; | 492 return true; |
| 449 } | 493 } |
| 450 | 494 |
| 451 bool SchedulerStateMachine::ShouldSendBeginMainFrame() const { | 495 bool SchedulerStateMachine::ShouldSendBeginMainFrame() const { |
| 452 if (!CouldSendBeginMainFrame()) | 496 if (!CouldSendBeginMainFrame()) |
| 453 return false; | 497 return false; |
| 454 | 498 |
| 455 // Do not send begin main frame too many times in a single frame or before | 499 // Do not send begin main frame too many times in a single frame or before |
| 456 // the first BeginFrame. | 500 // the first BeginFrame. |
| 457 if (send_begin_main_frame_funnel_) | 501 if (did_send_begin_main_frame_for_current_frame_) |
| 458 return false; | 502 return false; |
| 459 | 503 |
| 460 // Only send BeginMainFrame when there isn't another commit pending already. | 504 // Only send BeginMainFrame when there isn't another commit pending already. |
| 461 // Other parts of the state machine indirectly defer the BeginMainFrame | 505 // Other parts of the state machine indirectly defer the BeginMainFrame |
| 462 // by transitioning to WAITING commit states rather than going | 506 // by transitioning to WAITING commit states rather than going |
| 463 // immediately to IDLE. | 507 // immediately to IDLE. |
| 464 if (begin_main_frame_state_ != BEGIN_MAIN_FRAME_STATE_IDLE) | 508 if (begin_main_frame_state_ != BEGIN_MAIN_FRAME_STATE_IDLE) |
| 465 return false; | 509 return false; |
| 466 | 510 |
| 467 // MFBA is disabled and we are waiting for previous activation. | 511 // MFBA is disabled and we are waiting for previous activation. |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 591 if (ShouldPerformImplSideInvalidation()) | 635 if (ShouldPerformImplSideInvalidation()) |
| 592 return ACTION_PERFORM_IMPL_SIDE_INVALIDATION; | 636 return ACTION_PERFORM_IMPL_SIDE_INVALIDATION; |
| 593 if (ShouldPrepareTiles()) | 637 if (ShouldPrepareTiles()) |
| 594 return ACTION_PREPARE_TILES; | 638 return ACTION_PREPARE_TILES; |
| 595 if (ShouldSendBeginMainFrame()) | 639 if (ShouldSendBeginMainFrame()) |
| 596 return ACTION_SEND_BEGIN_MAIN_FRAME; | 640 return ACTION_SEND_BEGIN_MAIN_FRAME; |
| 597 if (ShouldInvalidateCompositorFrameSink()) | 641 if (ShouldInvalidateCompositorFrameSink()) |
| 598 return ACTION_INVALIDATE_COMPOSITOR_FRAME_SINK; | 642 return ACTION_INVALIDATE_COMPOSITOR_FRAME_SINK; |
| 599 if (ShouldBeginCompositorFrameSinkCreation()) | 643 if (ShouldBeginCompositorFrameSinkCreation()) |
| 600 return ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION; | 644 return ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION; |
| 645 if (ShouldNotifyBeginMainFrameNotSent()) |
| 646 return ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT; |
| 601 return ACTION_NONE; | 647 return ACTION_NONE; |
| 602 } | 648 } |
| 603 | 649 |
| 604 bool SchedulerStateMachine::ShouldPerformImplSideInvalidation() const { | 650 bool SchedulerStateMachine::ShouldPerformImplSideInvalidation() const { |
| 605 if (!needs_impl_side_invalidation_) | 651 if (!needs_impl_side_invalidation_) |
| 606 return false; | 652 return false; |
| 607 | 653 |
| 608 if (!CouldCreatePendingTree()) | 654 if (!CouldCreatePendingTree()) |
| 609 return false; | 655 return false; |
| 610 | 656 |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 676 if (!HasInitializedCompositorFrameSink()) | 722 if (!HasInitializedCompositorFrameSink()) |
| 677 return false; | 723 return false; |
| 678 | 724 |
| 679 return true; | 725 return true; |
| 680 } | 726 } |
| 681 | 727 |
| 682 void SchedulerStateMachine::WillSendBeginMainFrame() { | 728 void SchedulerStateMachine::WillSendBeginMainFrame() { |
| 683 DCHECK(!has_pending_tree_ || settings_.main_frame_before_activation_enabled); | 729 DCHECK(!has_pending_tree_ || settings_.main_frame_before_activation_enabled); |
| 684 DCHECK(visible_); | 730 DCHECK(visible_); |
| 685 DCHECK(!begin_frame_source_paused_); | 731 DCHECK(!begin_frame_source_paused_); |
| 686 DCHECK(!send_begin_main_frame_funnel_); | 732 DCHECK(!did_send_begin_main_frame_for_current_frame_); |
| 687 begin_main_frame_state_ = BEGIN_MAIN_FRAME_STATE_SENT; | 733 begin_main_frame_state_ = BEGIN_MAIN_FRAME_STATE_SENT; |
| 688 needs_begin_main_frame_ = false; | 734 needs_begin_main_frame_ = false; |
| 689 send_begin_main_frame_funnel_ = true; | 735 did_send_begin_main_frame_for_current_frame_ = true; |
| 690 last_frame_number_begin_main_frame_sent_ = current_frame_number_; | 736 last_frame_number_begin_main_frame_sent_ = current_frame_number_; |
| 691 last_begin_frame_sequence_number_begin_main_frame_sent_ = | 737 last_begin_frame_sequence_number_begin_main_frame_sent_ = |
| 692 begin_frame_sequence_number_; | 738 begin_frame_sequence_number_; |
| 693 } | 739 } |
| 694 | 740 |
| 741 void SchedulerStateMachine::WillNotifyBeginMainFrameNotSent() { |
| 742 DCHECK(visible_); |
| 743 DCHECK(!begin_frame_source_paused_); |
| 744 DCHECK(!did_notify_begin_main_frame_not_sent_); |
| 745 did_notify_begin_main_frame_not_sent_ = true; |
| 746 } |
| 747 |
| 695 void SchedulerStateMachine::WillCommit(bool commit_has_no_updates) { | 748 void SchedulerStateMachine::WillCommit(bool commit_has_no_updates) { |
| 696 bool can_have_pending_tree = | 749 bool can_have_pending_tree = |
| 697 commit_has_no_updates && | 750 commit_has_no_updates && |
| 698 (settings_.main_frame_before_activation_enabled || | 751 (settings_.main_frame_before_activation_enabled || |
| 699 current_pending_tree_is_impl_side_); | 752 current_pending_tree_is_impl_side_); |
| 700 DCHECK(!has_pending_tree_ || can_have_pending_tree); | 753 DCHECK(!has_pending_tree_ || can_have_pending_tree); |
| 701 commit_count_++; | 754 commit_count_++; |
| 702 last_commit_had_no_updates_ = commit_has_no_updates; | 755 last_commit_had_no_updates_ = commit_has_no_updates; |
| 703 begin_main_frame_state_ = BEGIN_MAIN_FRAME_STATE_IDLE; | 756 begin_main_frame_state_ = BEGIN_MAIN_FRAME_STATE_IDLE; |
| 757 did_commit_during_frame_ = true; |
| 704 | 758 |
| 705 if (commit_has_no_updates) { | 759 if (commit_has_no_updates) { |
| 706 // Pending tree might still exist from prior commit. | 760 // Pending tree might still exist from prior commit. |
| 707 if (has_pending_tree_) { | 761 if (has_pending_tree_) { |
| 708 DCHECK(can_have_pending_tree); | 762 DCHECK(can_have_pending_tree); |
| 709 last_begin_frame_sequence_number_pending_tree_was_fresh_ = | 763 last_begin_frame_sequence_number_pending_tree_was_fresh_ = |
| 710 last_begin_frame_sequence_number_begin_main_frame_sent_; | 764 last_begin_frame_sequence_number_begin_main_frame_sent_; |
| 711 } else { | 765 } else { |
| 712 if (last_begin_frame_sequence_number_compositor_frame_was_fresh_ == | 766 if (last_begin_frame_sequence_number_compositor_frame_was_fresh_ == |
| 713 last_begin_frame_sequence_number_active_tree_was_fresh_) { | 767 last_begin_frame_sequence_number_active_tree_was_fresh_) { |
| (...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1040 | 1094 |
| 1041 begin_impl_frame_state_ = BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME; | 1095 begin_impl_frame_state_ = BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME; |
| 1042 current_frame_number_++; | 1096 current_frame_number_++; |
| 1043 | 1097 |
| 1044 last_commit_had_no_updates_ = false; | 1098 last_commit_had_no_updates_ = false; |
| 1045 did_draw_in_last_frame_ = false; | 1099 did_draw_in_last_frame_ = false; |
| 1046 did_submit_in_last_frame_ = false; | 1100 did_submit_in_last_frame_ = false; |
| 1047 needs_one_begin_impl_frame_ = false; | 1101 needs_one_begin_impl_frame_ = false; |
| 1048 | 1102 |
| 1049 // Clear funnels for any actions we perform during the frame. | 1103 // Clear funnels for any actions we perform during the frame. |
| 1050 send_begin_main_frame_funnel_ = false; | 1104 did_notify_begin_main_frame_not_sent_ = false; |
| 1105 did_send_begin_main_frame_for_current_frame_ = false; |
| 1106 did_commit_during_frame_ = false; |
| 1051 invalidate_compositor_frame_sink_funnel_ = false; | 1107 invalidate_compositor_frame_sink_funnel_ = false; |
| 1052 impl_side_invalidation_funnel_ = false; | 1108 impl_side_invalidation_funnel_ = false; |
| 1053 | 1109 |
| 1054 // "Drain" the PrepareTiles funnel. | 1110 // "Drain" the PrepareTiles funnel. |
| 1055 if (prepare_tiles_funnel_ > 0) | 1111 if (prepare_tiles_funnel_ > 0) |
| 1056 prepare_tiles_funnel_--; | 1112 prepare_tiles_funnel_--; |
| 1057 } | 1113 } |
| 1058 | 1114 |
| 1059 void SchedulerStateMachine::OnBeginImplFrameDeadline() { | 1115 void SchedulerStateMachine::OnBeginImplFrameDeadline() { |
| 1060 begin_impl_frame_state_ = BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE; | 1116 begin_impl_frame_state_ = BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1078 skip_next_begin_main_frame_to_reduce_latency_ = false; | 1134 skip_next_begin_main_frame_to_reduce_latency_ = false; |
| 1079 | 1135 |
| 1080 // If a new or undrawn active tree is pending after the deadline, | 1136 // If a new or undrawn active tree is pending after the deadline, |
| 1081 // then the main thread is in a high latency mode. | 1137 // then the main thread is in a high latency mode. |
| 1082 main_thread_missed_last_deadline_ = | 1138 main_thread_missed_last_deadline_ = |
| 1083 CommitPending() || has_pending_tree_ || active_tree_needs_first_draw_; | 1139 CommitPending() || has_pending_tree_ || active_tree_needs_first_draw_; |
| 1084 | 1140 |
| 1085 // If we're entering a state where we won't get BeginFrames set all the | 1141 // If we're entering a state where we won't get BeginFrames set all the |
| 1086 // funnels so that we don't perform any actions that we shouldn't. | 1142 // funnels so that we don't perform any actions that we shouldn't. |
| 1087 if (!BeginFrameNeeded()) | 1143 if (!BeginFrameNeeded()) |
| 1088 send_begin_main_frame_funnel_ = true; | 1144 did_send_begin_main_frame_for_current_frame_ = true; |
| 1089 | 1145 |
| 1090 // Synchronous compositor finishes BeginFrames before triggering their | 1146 // Synchronous compositor finishes BeginFrames before triggering their |
| 1091 // deadline. Therefore, we update sequence numbers when becoming idle, before | 1147 // deadline. Therefore, we update sequence numbers when becoming idle, before |
| 1092 // the Scheduler sends its BeginFrameAck. | 1148 // the Scheduler sends its BeginFrameAck. |
| 1093 if (settings_.using_synchronous_renderer_compositor) | 1149 if (settings_.using_synchronous_renderer_compositor) |
| 1094 UpdateBeginFrameSequenceNumbersForBeginFrameDeadline(); | 1150 UpdateBeginFrameSequenceNumbersForBeginFrameDeadline(); |
| 1095 } | 1151 } |
| 1096 | 1152 |
| 1097 SchedulerStateMachine::BeginImplFrameDeadlineMode | 1153 SchedulerStateMachine::BeginImplFrameDeadlineMode |
| 1098 SchedulerStateMachine::CurrentBeginImplFrameDeadlineMode() const { | 1154 SchedulerStateMachine::CurrentBeginImplFrameDeadlineMode() const { |
| (...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1335 case COMPOSITOR_FRAME_SINK_ACTIVE: | 1391 case COMPOSITOR_FRAME_SINK_ACTIVE: |
| 1336 case COMPOSITOR_FRAME_SINK_WAITING_FOR_FIRST_COMMIT: | 1392 case COMPOSITOR_FRAME_SINK_WAITING_FOR_FIRST_COMMIT: |
| 1337 case COMPOSITOR_FRAME_SINK_WAITING_FOR_FIRST_ACTIVATION: | 1393 case COMPOSITOR_FRAME_SINK_WAITING_FOR_FIRST_ACTIVATION: |
| 1338 return true; | 1394 return true; |
| 1339 } | 1395 } |
| 1340 NOTREACHED(); | 1396 NOTREACHED(); |
| 1341 return false; | 1397 return false; |
| 1342 } | 1398 } |
| 1343 | 1399 |
| 1344 } // namespace cc | 1400 } // namespace cc |
| OLD | NEW |