Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(498)

Side by Side Diff: cc/scheduler/scheduler.cc

Issue 246753008: cc: Unify use of DidSwapBuffers() and did_request_swap (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix comment Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 #include "base/auto_reset.h" 8 #include "base/auto_reset.h"
9 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 state_machine_.SetNeedsManageTiles(); 184 state_machine_.SetNeedsManageTiles();
185 ProcessScheduledActions(); 185 ProcessScheduledActions();
186 } 186 }
187 187
188 void Scheduler::SetMaxSwapsPending(int max) { 188 void Scheduler::SetMaxSwapsPending(int max) {
189 state_machine_.SetMaxSwapsPending(max); 189 state_machine_.SetMaxSwapsPending(max);
190 } 190 }
191 191
192 void Scheduler::DidSwapBuffers() { 192 void Scheduler::DidSwapBuffers() {
193 state_machine_.DidSwapBuffers(); 193 state_machine_.DidSwapBuffers();
194
195 // Swap should not occur inside readback operation.
196 DCHECK(!IsInsideAction(SchedulerStateMachine::ACTION_DRAW_AND_READBACK));
197
194 // There is no need to call ProcessScheduledActions here because 198 // There is no need to call ProcessScheduledActions here because
195 // swapping should not trigger any new actions. 199 // swapping should not trigger any new actions.
196 if (!inside_process_scheduled_actions_) { 200 if (!inside_process_scheduled_actions_) {
197 DCHECK_EQ(state_machine_.NextAction(), SchedulerStateMachine::ACTION_NONE); 201 DCHECK_EQ(state_machine_.NextAction(), SchedulerStateMachine::ACTION_NONE);
198 } 202 }
199 } 203 }
200 204
201 void Scheduler::SetSwapUsedIncompleteTile(bool used_incomplete_tile) { 205 void Scheduler::SetSwapUsedIncompleteTile(bool used_incomplete_tile) {
202 state_machine_.SetSwapUsedIncompleteTile(used_incomplete_tile); 206 state_machine_.SetSwapUsedIncompleteTile(used_incomplete_tile);
203 ProcessScheduledActions(); 207 ProcessScheduledActions();
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after
594 advance_commit_state_task_.Cancel(); 598 advance_commit_state_task_.Cancel();
595 ProcessScheduledActions(); 599 ProcessScheduledActions();
596 } 600 }
597 601
598 bool Scheduler::IsBeginMainFrameSent() const { 602 bool Scheduler::IsBeginMainFrameSent() const {
599 return state_machine_.commit_state() == 603 return state_machine_.commit_state() ==
600 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT; 604 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT;
601 } 605 }
602 606
603 void Scheduler::DrawAndSwapIfPossible() { 607 void Scheduler::DrawAndSwapIfPossible() {
604 DrawSwapReadbackResult result = 608 DrawResult result = client_->ScheduledActionDrawAndSwapIfPossible();
605 client_->ScheduledActionDrawAndSwapIfPossible(); 609 state_machine_.DidDrawIfPossibleCompleted(result);
606 state_machine_.DidDrawIfPossibleCompleted(result.draw_result);
607 }
608
609 void Scheduler::DrawAndSwapForced() {
610 client_->ScheduledActionDrawAndSwapForced();
611 }
612
613 void Scheduler::DrawAndReadback() {
614 DrawSwapReadbackResult result = client_->ScheduledActionDrawAndReadback();
615 DCHECK(!result.did_request_swap);
616 } 610 }
617 611
618 void Scheduler::ProcessScheduledActions() { 612 void Scheduler::ProcessScheduledActions() {
619 // We do not allow ProcessScheduledActions to be recursive. 613 // We do not allow ProcessScheduledActions to be recursive.
620 // The top-level call will iteratively execute the next action for us anyway. 614 // The top-level call will iteratively execute the next action for us anyway.
621 if (inside_process_scheduled_actions_) 615 if (inside_process_scheduled_actions_)
622 return; 616 return;
623 617
624 base::AutoReset<bool> mark_inside(&inside_process_scheduled_actions_, true); 618 base::AutoReset<bool> mark_inside(&inside_process_scheduled_actions_, true);
625 619
(...skipping 23 matching lines...) Expand all
649 case SchedulerStateMachine::ACTION_UPDATE_VISIBLE_TILES: 643 case SchedulerStateMachine::ACTION_UPDATE_VISIBLE_TILES:
650 client_->ScheduledActionUpdateVisibleTiles(); 644 client_->ScheduledActionUpdateVisibleTiles();
651 break; 645 break;
652 case SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE: 646 case SchedulerStateMachine::ACTION_ACTIVATE_PENDING_TREE:
653 ActivatePendingTree(); 647 ActivatePendingTree();
654 break; 648 break;
655 case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE: 649 case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE:
656 DrawAndSwapIfPossible(); 650 DrawAndSwapIfPossible();
657 break; 651 break;
658 case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED: 652 case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED:
659 DrawAndSwapForced(); 653 client_->ScheduledActionDrawAndSwapForced();
660 break; 654 break;
661 case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT: 655 case SchedulerStateMachine::ACTION_DRAW_AND_SWAP_ABORT:
662 // No action is actually performed, but this allows the state machine to 656 // No action is actually performed, but this allows the state machine to
663 // advance out of its waiting to draw state without actually drawing. 657 // advance out of its waiting to draw state without actually drawing.
664 break; 658 break;
665 case SchedulerStateMachine::ACTION_DRAW_AND_READBACK: 659 case SchedulerStateMachine::ACTION_DRAW_AND_READBACK:
666 DrawAndReadback(); 660 client_->ScheduledActionDrawAndReadback();
667 break; 661 break;
668 case SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION: 662 case SchedulerStateMachine::ACTION_BEGIN_OUTPUT_SURFACE_CREATION:
669 client_->ScheduledActionBeginOutputSurfaceCreation(); 663 client_->ScheduledActionBeginOutputSurfaceCreation();
670 break; 664 break;
671 case SchedulerStateMachine::ACTION_MANAGE_TILES: 665 case SchedulerStateMachine::ACTION_MANAGE_TILES:
672 client_->ScheduledActionManageTiles(); 666 client_->ScheduledActionManageTiles();
673 break; 667 break;
674 } 668 }
675 } while (action != SchedulerStateMachine::ACTION_NONE); 669 } while (action != SchedulerStateMachine::ACTION_NONE);
676 670
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
748 } 742 }
749 743
750 bool Scheduler::IsBeginMainFrameSentOrStarted() const { 744 bool Scheduler::IsBeginMainFrameSentOrStarted() const {
751 return (state_machine_.commit_state() == 745 return (state_machine_.commit_state() ==
752 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT || 746 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT ||
753 state_machine_.commit_state() == 747 state_machine_.commit_state() ==
754 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED); 748 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED);
755 } 749 }
756 750
757 } // namespace cc 751 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698