| 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 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 161 void Scheduler::SetCanDraw(bool can_draw) { | 161 void Scheduler::SetCanDraw(bool can_draw) { |
| 162 state_machine_.SetCanDraw(can_draw); | 162 state_machine_.SetCanDraw(can_draw); |
| 163 ProcessScheduledActions(); | 163 ProcessScheduledActions(); |
| 164 } | 164 } |
| 165 | 165 |
| 166 void Scheduler::NotifyReadyToActivate() { | 166 void Scheduler::NotifyReadyToActivate() { |
| 167 state_machine_.NotifyReadyToActivate(); | 167 state_machine_.NotifyReadyToActivate(); |
| 168 ProcessScheduledActions(); | 168 ProcessScheduledActions(); |
| 169 } | 169 } |
| 170 | 170 |
| 171 void Scheduler::SetRequiresHighResToDraw(bool required) { |
| 172 state_machine_.SetRequiresHighResToDraw(required); |
| 173 ProcessScheduledActions(); |
| 174 } |
| 175 |
| 171 void Scheduler::NotifyReadyToDraw() { | 176 void Scheduler::NotifyReadyToDraw() { |
| 172 // Future work might still needed for crbug.com/352894. | 177 // Future work might still needed for crbug.com/352894. |
| 173 state_machine_.NotifyReadyToDraw(); | 178 state_machine_.NotifyReadyToDraw(); |
| 174 ProcessScheduledActions(); | 179 ProcessScheduledActions(); |
| 175 } | 180 } |
| 176 | 181 |
| 177 void Scheduler::SetThrottleFrameProduction(bool throttle) { | 182 void Scheduler::SetThrottleFrameProduction(bool throttle) { |
| 178 throttle_frame_production_ = throttle; | 183 throttle_frame_production_ = throttle; |
| 179 if (throttle) { | 184 if (throttle) { |
| 180 frame_source_->SetActiveSource(primary_frame_source_); | 185 frame_source_->SetActiveSource(primary_frame_source_); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 192 void Scheduler::SetNeedsRedraw() { | 197 void Scheduler::SetNeedsRedraw() { |
| 193 state_machine_.SetNeedsRedraw(); | 198 state_machine_.SetNeedsRedraw(); |
| 194 ProcessScheduledActions(); | 199 ProcessScheduledActions(); |
| 195 } | 200 } |
| 196 | 201 |
| 197 void Scheduler::SetNeedsAnimate() { | 202 void Scheduler::SetNeedsAnimate() { |
| 198 state_machine_.SetNeedsAnimate(); | 203 state_machine_.SetNeedsAnimate(); |
| 199 ProcessScheduledActions(); | 204 ProcessScheduledActions(); |
| 200 } | 205 } |
| 201 | 206 |
| 202 void Scheduler::SetNeedsPrepareTiles() { | 207 void Scheduler::SetNeedsPrepareTiles(bool for_commit) { |
| 203 DCHECK(!IsInsideAction(SchedulerStateMachine::ACTION_PREPARE_TILES)); | 208 state_machine_.SetNeedsPrepareTiles(for_commit); |
| 204 state_machine_.SetNeedsPrepareTiles(); | |
| 205 ProcessScheduledActions(); | 209 ProcessScheduledActions(); |
| 206 } | 210 } |
| 207 | 211 |
| 208 void Scheduler::SetWaitForReadyToDraw() { | 212 void Scheduler::SetWaitForReadyToDraw() { |
| 209 state_machine_.SetWaitForReadyToDraw(); | 213 state_machine_.SetWaitForReadyToDraw(); |
| 210 ProcessScheduledActions(); | 214 ProcessScheduledActions(); |
| 211 } | 215 } |
| 212 | 216 |
| 213 void Scheduler::SetMaxSwapsPending(int max) { | 217 void Scheduler::SetMaxSwapsPending(int max) { |
| 214 state_machine_.SetMaxSwapsPending(max); | 218 state_machine_.SetMaxSwapsPending(max); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 240 ProcessScheduledActions(); | 244 ProcessScheduledActions(); |
| 241 } | 245 } |
| 242 | 246 |
| 243 void Scheduler::BeginMainFrameAborted(CommitEarlyOutReason reason) { | 247 void Scheduler::BeginMainFrameAborted(CommitEarlyOutReason reason) { |
| 244 TRACE_EVENT1("cc", "Scheduler::BeginMainFrameAborted", "reason", | 248 TRACE_EVENT1("cc", "Scheduler::BeginMainFrameAborted", "reason", |
| 245 CommitEarlyOutReasonToString(reason)); | 249 CommitEarlyOutReasonToString(reason)); |
| 246 state_machine_.BeginMainFrameAborted(reason); | 250 state_machine_.BeginMainFrameAborted(reason); |
| 247 ProcessScheduledActions(); | 251 ProcessScheduledActions(); |
| 248 } | 252 } |
| 249 | 253 |
| 250 void Scheduler::DidPrepareTiles() { | |
| 251 state_machine_.DidPrepareTiles(); | |
| 252 } | |
| 253 | |
| 254 void Scheduler::DidLoseOutputSurface() { | 254 void Scheduler::DidLoseOutputSurface() { |
| 255 TRACE_EVENT0("cc", "Scheduler::DidLoseOutputSurface"); | 255 TRACE_EVENT0("cc", "Scheduler::DidLoseOutputSurface"); |
| 256 begin_retro_frame_args_.clear(); | 256 begin_retro_frame_args_.clear(); |
| 257 begin_retro_frame_task_.Cancel(); | 257 begin_retro_frame_task_.Cancel(); |
| 258 state_machine_.DidLoseOutputSurface(); | 258 state_machine_.DidLoseOutputSurface(); |
| 259 ProcessScheduledActions(); | 259 ProcessScheduledActions(); |
| 260 } | 260 } |
| 261 | 261 |
| 262 void Scheduler::DidCreateAndInitializeOutputSurface() { | 262 void Scheduler::DidCreateAndInitializeOutputSurface() { |
| 263 TRACE_EVENT0("cc", "Scheduler::DidCreateAndInitializeOutputSurface"); | 263 TRACE_EVENT0("cc", "Scheduler::DidCreateAndInitializeOutputSurface"); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 284 return timebase + (begin_impl_frame_args_.interval * intervals); | 284 return timebase + (begin_impl_frame_args_.interval * intervals); |
| 285 } | 285 } |
| 286 | 286 |
| 287 base::TimeTicks Scheduler::LastBeginImplFrameTime() { | 287 base::TimeTicks Scheduler::LastBeginImplFrameTime() { |
| 288 return begin_impl_frame_args_.frame_time; | 288 return begin_impl_frame_args_.frame_time; |
| 289 } | 289 } |
| 290 | 290 |
| 291 void Scheduler::SetupNextBeginFrameIfNeeded() { | 291 void Scheduler::SetupNextBeginFrameIfNeeded() { |
| 292 // Never call SetNeedsBeginFrames if the frame source already has the right | 292 // Never call SetNeedsBeginFrames if the frame source already has the right |
| 293 // value. | 293 // value. |
| 294 if (frame_source_->NeedsBeginFrames() != state_machine_.BeginFrameNeeded()) { | 294 bool begin_frames_needed = state_machine_.BeginFrameNeeded(); |
| 295 if (state_machine_.BeginFrameNeeded()) { | 295 if (frame_source_->NeedsBeginFrames() != begin_frames_needed) { |
| 296 if (begin_frames_needed) { |
| 296 // Call SetNeedsBeginFrames(true) as soon as possible. | 297 // Call SetNeedsBeginFrames(true) as soon as possible. |
| 297 frame_source_->SetNeedsBeginFrames(true); | 298 frame_source_->SetNeedsBeginFrames(true); |
| 298 } else if (state_machine_.begin_impl_frame_state() == | 299 } else if (state_machine_.begin_impl_frame_state() == |
| 299 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE) { | 300 SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE) { |
| 300 // Call SetNeedsBeginFrames(false) in between frames only. | 301 // Call SetNeedsBeginFrames(false) in between frames only. |
| 301 frame_source_->SetNeedsBeginFrames(false); | 302 frame_source_->SetNeedsBeginFrames(false); |
| 302 client_->SendBeginMainFrameNotExpectedSoon(); | 303 client_->SendBeginMainFrameNotExpectedSoon(); |
| 303 } | 304 } |
| 305 state_machine_.NotifyBeginFrameSourceActive(begin_frames_needed); |
| 304 } | 306 } |
| 305 | 307 |
| 306 PostBeginRetroFrameIfNeeded(); | 308 PostBeginRetroFrameIfNeeded(); |
| 307 } | 309 } |
| 308 | 310 |
| 309 // We may need to poll when we can't rely on BeginFrame to advance certain | 311 // We may need to poll when we can't rely on BeginFrame to advance certain |
| 310 // state or to avoid deadlock. | 312 // state or to avoid deadlock. |
| 311 void Scheduler::SetupPollingMechanisms() { | 313 void Scheduler::SetupPollingMechanisms() { |
| 312 // At this point we'd prefer to advance through the commit flow by | 314 // At this point we'd prefer to advance through the commit flow by |
| 313 // drawing a frame, however it's possible that the frame rate controller | 315 // drawing a frame, however it's possible that the frame rate controller |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 511 } | 513 } |
| 512 | 514 |
| 513 void Scheduler::BeginImplFrameSynchronous(const BeginFrameArgs& args) { | 515 void Scheduler::BeginImplFrameSynchronous(const BeginFrameArgs& args) { |
| 514 TRACE_EVENT1("cc,benchmark", "Scheduler::BeginImplFrame", "args", | 516 TRACE_EVENT1("cc,benchmark", "Scheduler::BeginImplFrame", "args", |
| 515 args.AsValue()); | 517 args.AsValue()); |
| 516 begin_impl_frame_args_ = args; | 518 begin_impl_frame_args_ = args; |
| 517 BeginImplFrame(); | 519 BeginImplFrame(); |
| 518 FinishImplFrame(); | 520 FinishImplFrame(); |
| 519 } | 521 } |
| 520 | 522 |
| 523 // Retry the BeginImplFrame if the draw aborted due to checkerboards and |
| 524 // we need a new commit to get a new RasterSource. |
| 525 void Scheduler::RetryBeginImplFrameWithDeadline() { |
| 526 TRACE_EVENT0("cc", "Scheduler::RetryBeginImplFrameWithDeadline"); |
| 527 state_machine_.ResetRetryBeginImplFrame(); |
| 528 |
| 529 BeginImplFrame(); |
| 530 |
| 531 // The deadline will be scheduled in ProcessScheduledActions. |
| 532 state_machine_.OnBeginImplFrameDeadlinePending(); |
| 533 ProcessScheduledActions(); |
| 534 } |
| 535 |
| 536 // Retry the deadline if the draw aborted due to checkerboards, but we |
| 537 // do not need a new commit to get a new RasterSource. |
| 538 void Scheduler::RetryBeginImplFrameDeadline() { |
| 539 TRACE_EVENT0("cc", "Scheduler::RetryImplFrameDeadline"); |
| 540 state_machine_.ResetRetryBeginImplFrame(); |
| 541 |
| 542 // The deadline will be scheduled in ProcessScheduledActions. |
| 543 state_machine_.OnBeginImplFrameDeadlinePending(); |
| 544 ProcessScheduledActions(); |
| 545 } |
| 546 |
| 521 void Scheduler::FinishImplFrame() { | 547 void Scheduler::FinishImplFrame() { |
| 522 state_machine_.OnBeginImplFrameIdle(); | 548 state_machine_.OnBeginImplFrameIdle(); |
| 523 ProcessScheduledActions(); | 549 ProcessScheduledActions(); |
| 524 | 550 |
| 525 client_->DidFinishImplFrame(); | 551 client_->DidFinishImplFrame(); |
| 526 frame_source_->DidFinishFrame(begin_retro_frame_args_.size()); | 552 frame_source_->DidFinishFrame(begin_retro_frame_args_.size()); |
| 527 } | 553 } |
| 528 | 554 |
| 529 // BeginImplFrame starts a compositor frame that will wait up until a deadline | 555 // BeginImplFrame starts a compositor frame that will wait up until a deadline |
| 530 // for a BeginMainFrame+activation to complete before it times out and draws | 556 // for a BeginMainFrame+activation to complete before it times out and draws |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 568 deadline = begin_impl_frame_args_.deadline; | 594 deadline = begin_impl_frame_args_.deadline; |
| 569 break; | 595 break; |
| 570 case SchedulerStateMachine::BEGIN_IMPL_FRAME_DEADLINE_MODE_LATE: | 596 case SchedulerStateMachine::BEGIN_IMPL_FRAME_DEADLINE_MODE_LATE: |
| 571 // We are blocked for one reason or another and we should wait. | 597 // We are blocked for one reason or another and we should wait. |
| 572 // TODO(brianderson): Handle long deadlines (that are past the next | 598 // TODO(brianderson): Handle long deadlines (that are past the next |
| 573 // frame's frame time) properly instead of using this hack. | 599 // frame's frame time) properly instead of using this hack. |
| 574 deadline = | 600 deadline = |
| 575 begin_impl_frame_args_.frame_time + begin_impl_frame_args_.interval; | 601 begin_impl_frame_args_.frame_time + begin_impl_frame_args_.interval; |
| 576 break; | 602 break; |
| 577 case SchedulerStateMachine:: | 603 case SchedulerStateMachine:: |
| 604 BEGIN_IMPL_FRAME_DEADLINE_MODE_TRY_TO_AVOID_CHECKERBOARD: |
| 605 // We will wait up until this deadline for the ReadyToDraw signal. |
| 606 // TODO(brianderson): Use a different timeout for touch vs. mouse wheel. |
| 607 deadline = begin_impl_frame_args_.frame_time + |
| 608 (5 * begin_impl_frame_args_.interval); |
| 609 break; |
| 610 case SchedulerStateMachine:: |
| 578 BEGIN_IMPL_FRAME_DEADLINE_MODE_BLOCKED_ON_READY_TO_DRAW: | 611 BEGIN_IMPL_FRAME_DEADLINE_MODE_BLOCKED_ON_READY_TO_DRAW: |
| 579 // We are blocked because we are waiting for ReadyToDraw signal. We would | 612 // We are blocked because we are waiting for ReadyToDraw signal. We would |
| 580 // post deadline after we received ReadyToDraw singal. | 613 // post deadline after we received ReadyToDraw singal. |
| 581 TRACE_EVENT1("cc", "Scheduler::ScheduleBeginImplFrameDeadline", | 614 TRACE_EVENT1("cc", "Scheduler::ScheduleBeginImplFrameDeadline", |
| 582 "deadline_mode", "blocked_on_ready_to_draw"); | 615 "deadline_mode", "blocked_on_ready_to_draw"); |
| 583 return; | 616 return; |
| 584 } | 617 } |
| 585 | 618 |
| 586 TRACE_EVENT2("cc", "Scheduler::ScheduleBeginImplFrameDeadline", "mode", | 619 TRACE_EVENT2("cc", "Scheduler::ScheduleBeginImplFrameDeadline", "mode", |
| 587 SchedulerStateMachine::BeginImplFrameDeadlineModeToString( | 620 SchedulerStateMachine::BeginImplFrameDeadlineModeToString( |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 619 // order to wait for more user-input before starting the next commit. | 652 // order to wait for more user-input before starting the next commit. |
| 620 // * Creating a new OuputSurface will not occur during the deadline in | 653 // * Creating a new OuputSurface will not occur during the deadline in |
| 621 // order to allow the state machine to "settle" first. | 654 // order to allow the state machine to "settle" first. |
| 622 | 655 |
| 623 // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is fixed. | 656 // TODO(robliao): Remove ScopedTracker below once crbug.com/461509 is fixed. |
| 624 tracked_objects::ScopedTracker tracking_profile1( | 657 tracked_objects::ScopedTracker tracking_profile1( |
| 625 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 658 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 626 "461509 Scheduler::OnBeginImplFrameDeadline1")); | 659 "461509 Scheduler::OnBeginImplFrameDeadline1")); |
| 627 state_machine_.OnBeginImplFrameDeadline(); | 660 state_machine_.OnBeginImplFrameDeadline(); |
| 628 ProcessScheduledActions(); | 661 ProcessScheduledActions(); |
| 629 FinishImplFrame(); | 662 |
| 663 if (state_machine_.retry_begin_impl_frame()) { |
| 664 RetryBeginImplFrameWithDeadline(); |
| 665 } else if (state_machine_.retry_begin_impl_frame_deadline()) { |
| 666 RetryBeginImplFrameDeadline(); |
| 667 } else { |
| 668 FinishImplFrame(); |
| 669 } |
| 630 } | 670 } |
| 631 | 671 |
| 632 | 672 |
| 633 void Scheduler::PollToAdvanceCommitState() { | 673 void Scheduler::PollToAdvanceCommitState() { |
| 634 TRACE_EVENT0("cc", "Scheduler::PollToAdvanceCommitState"); | 674 TRACE_EVENT0("cc", "Scheduler::PollToAdvanceCommitState"); |
| 635 advance_commit_state_task_.Cancel(); | 675 advance_commit_state_task_.Cancel(); |
| 636 ProcessScheduledActions(); | 676 ProcessScheduledActions(); |
| 637 } | 677 } |
| 638 | 678 |
| 639 void Scheduler::DrawAndSwapIfPossible() { | 679 void Scheduler::DrawAndSwapIfPossible() { |
| 640 DrawResult result = client_->ScheduledActionDrawAndSwapIfPossible(); | 680 DrawResult result = client_->ScheduledActionDrawAndSwapIfPossible(); |
| 641 state_machine_.DidDrawIfPossibleCompleted(result); | 681 state_machine_.SetDrawResult(result); |
| 682 } |
| 683 |
| 684 void Scheduler::DrawAndSwapForced() { |
| 685 DrawResult result = client_->ScheduledActionDrawAndSwapForced(); |
| 686 state_machine_.SetDrawResult(result); |
| 642 } | 687 } |
| 643 | 688 |
| 644 void Scheduler::SetDeferCommits(bool defer_commits) { | 689 void Scheduler::SetDeferCommits(bool defer_commits) { |
| 645 TRACE_EVENT1("cc", "Scheduler::SetDeferCommits", | 690 TRACE_EVENT1("cc", "Scheduler::SetDeferCommits", |
| 646 "defer_commits", | 691 "defer_commits", |
| 647 defer_commits); | 692 defer_commits); |
| 648 state_machine_.SetDeferCommits(defer_commits); | 693 state_machine_.SetDeferCommits(defer_commits); |
| 649 ProcessScheduledActions(); | 694 ProcessScheduledActions(); |
| 650 } | 695 } |
| 651 | 696 |
| 652 void Scheduler::ProcessScheduledActions() { | 697 void Scheduler::ProcessScheduledActions() { |
| 653 // We do not allow ProcessScheduledActions to be recursive. | 698 // We do not allow ProcessScheduledActions to be recursive. |
| 654 // The top-level call will iteratively execute the next action for us anyway. | 699 // The top-level call will iteratively execute the next action for us anyway. |
| 655 if (inside_process_scheduled_actions_) | 700 if (inside_process_scheduled_actions_) |
| 656 return; | 701 return; |
| 657 | 702 |
| 658 base::AutoReset<bool> mark_inside(&inside_process_scheduled_actions_, true); | 703 base::AutoReset<bool> mark_inside(&inside_process_scheduled_actions_, true); |
| 659 | 704 |
| 660 SchedulerStateMachine::Action action; | 705 SchedulerStateMachine::Action action; |
| 661 do { | 706 do { |
| 662 action = state_machine_.NextAction(); | 707 action = state_machine_.NextAction(); |
| 663 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler"), | 708 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler"), |
| 664 "SchedulerStateMachine", | 709 "SchedulerStateMachine", |
| 665 "state", | 710 "state", |
| 666 AsValue()); | 711 AsValue()); |
| 667 DVLOG(2) << "Scheduler::ProcessScheduledActions: " | 712 DVLOG(2) << "Scheduler::ProcessScheduledActions: " |
| 668 << SchedulerStateMachine::ActionToString(action) << " " | 713 << SchedulerStateMachine::ActionToString(action) << " " |
| 669 << state_machine_.GetStatesForDebugging(); | 714 << state_machine_.GetStatesForDebugging(); |
| 670 state_machine_.UpdateState(action); | |
| 671 base::AutoReset<SchedulerStateMachine::Action> | 715 base::AutoReset<SchedulerStateMachine::Action> |
| 672 mark_inside_action(&inside_action_, action); | 716 mark_inside_action(&inside_action_, action); |
| 717 state_machine_.WillAction(action); |
| 673 switch (action) { | 718 switch (action) { |
| 674 case SchedulerStateMachine::ACTION_NONE: | 719 case SchedulerStateMachine::ACTION_NONE: |
| 675 break; | 720 break; |
| 676 case SchedulerStateMachine::ACTION_ANIMATE: | 721 case SchedulerStateMachine::ACTION_ANIMATE: |
| 677 client_->ScheduledActionAnimate(); | 722 client_->ScheduledActionAnimate(); |
| 678 break; | 723 break; |
| 679 case SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME: | 724 case SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME: |
| 680 client_->ScheduledActionSendBeginMainFrame(); | 725 client_->ScheduledActionSendBeginMainFrame(); |
| 681 break; | 726 break; |
| 682 case SchedulerStateMachine::ACTION_COMMIT: { | 727 case SchedulerStateMachine::ACTION_COMMIT: { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 711 client_->ScheduledActionBeginOutputSurfaceCreation(); | 756 client_->ScheduledActionBeginOutputSurfaceCreation(); |
| 712 break; | 757 break; |
| 713 case SchedulerStateMachine::ACTION_PREPARE_TILES: | 758 case SchedulerStateMachine::ACTION_PREPARE_TILES: |
| 714 client_->ScheduledActionPrepareTiles(); | 759 client_->ScheduledActionPrepareTiles(); |
| 715 break; | 760 break; |
| 716 case SchedulerStateMachine::ACTION_INVALIDATE_OUTPUT_SURFACE: { | 761 case SchedulerStateMachine::ACTION_INVALIDATE_OUTPUT_SURFACE: { |
| 717 client_->ScheduledActionInvalidateOutputSurface(); | 762 client_->ScheduledActionInvalidateOutputSurface(); |
| 718 break; | 763 break; |
| 719 } | 764 } |
| 720 } | 765 } |
| 766 state_machine_.DidAction(action); |
| 721 } while (action != SchedulerStateMachine::ACTION_NONE); | 767 } while (action != SchedulerStateMachine::ACTION_NONE); |
| 722 | 768 |
| 723 SetupPollingMechanisms(); | 769 SetupPollingMechanisms(); |
| 724 | 770 |
| 725 client_->DidAnticipatedDrawTimeChange(AnticipatedDrawTime()); | 771 client_->DidAnticipatedDrawTimeChange(AnticipatedDrawTime()); |
| 726 | 772 |
| 727 ScheduleBeginImplFrameDeadlineIfNeeded(); | 773 ScheduleBeginImplFrameDeadlineIfNeeded(); |
| 728 | 774 |
| 729 SetupNextBeginFrameIfNeeded(); | 775 SetupNextBeginFrameIfNeeded(); |
| 730 } | 776 } |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 822 } | 868 } |
| 823 | 869 |
| 824 bool Scheduler::IsBeginMainFrameSentOrStarted() const { | 870 bool Scheduler::IsBeginMainFrameSentOrStarted() const { |
| 825 return (state_machine_.commit_state() == | 871 return (state_machine_.commit_state() == |
| 826 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT || | 872 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT || |
| 827 state_machine_.commit_state() == | 873 state_machine_.commit_state() == |
| 828 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED); | 874 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED); |
| 829 } | 875 } |
| 830 | 876 |
| 831 } // namespace cc | 877 } // namespace cc |
| OLD | NEW |