| 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/debug/trace_event.h" | 7 #include "base/debug/trace_event.h" |
| 8 #include "base/debug/trace_event_argument.h" | 8 #include "base/debug/trace_event_argument.h" |
| 9 #include "base/format_macros.h" | 9 #include "base/format_macros.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| 11 #include "base/strings/stringprintf.h" | 11 #include "base/strings/stringprintf.h" |
| 12 #include "base/values.h" | 12 #include "base/values.h" |
| 13 #include "ui/gfx/frame_time.h" | 13 #include "ui/gfx/frame_time.h" |
| 14 | 14 |
| 15 namespace cc { | 15 namespace cc { |
| 16 | 16 |
| 17 SchedulerStateMachine::SchedulerStateMachine(const SchedulerSettings& settings) | 17 SchedulerStateMachine::SchedulerStateMachine(const SchedulerSettings& settings) |
| 18 : settings_(settings), | 18 : settings_(settings), |
| 19 output_surface_state_(OUTPUT_SURFACE_LOST), | 19 output_surface_state_(OUTPUT_SURFACE_LOST), |
| 20 begin_impl_frame_state_(BEGIN_IMPL_FRAME_STATE_IDLE), | 20 begin_impl_frame_state_(BEGIN_IMPL_FRAME_STATE_IDLE), |
| 21 commit_state_(COMMIT_STATE_IDLE), | 21 commit_state_(COMMIT_STATE_IDLE), |
| 22 forced_redraw_state_(FORCED_REDRAW_STATE_IDLE), | 22 forced_redraw_state_(FORCED_REDRAW_STATE_IDLE), |
| 23 commit_count_(0), | 23 commit_count_(0), |
| 24 current_frame_number_(0), | 24 current_frame_number_(0), |
| 25 last_frame_number_animate_performed_(-1), | 25 last_frame_number_animate_performed_(-1), |
| 26 last_frame_number_swap_performed_(-1), | 26 last_frame_number_swap_performed_(-1), |
| 27 last_frame_number_swap_requested_(-1), | 27 last_frame_number_swap_requested_(-1), |
| 28 last_frame_number_begin_main_frame_sent_(-1), | 28 last_frame_number_begin_main_frame_sent_(-1), |
| 29 last_frame_number_update_visible_tiles_was_called_(-1), | |
| 30 manage_tiles_funnel_(0), | 29 manage_tiles_funnel_(0), |
| 31 consecutive_checkerboard_animations_(0), | 30 consecutive_checkerboard_animations_(0), |
| 32 max_pending_swaps_(1), | 31 max_pending_swaps_(1), |
| 33 pending_swaps_(0), | 32 pending_swaps_(0), |
| 34 needs_redraw_(false), | 33 needs_redraw_(false), |
| 35 needs_animate_(false), | 34 needs_animate_(false), |
| 36 needs_manage_tiles_(false), | 35 needs_manage_tiles_(false), |
| 37 swap_used_incomplete_tile_(false), | |
| 38 needs_commit_(false), | 36 needs_commit_(false), |
| 39 inside_poll_for_anticipated_draw_triggers_(false), | 37 inside_poll_for_anticipated_draw_triggers_(false), |
| 40 visible_(false), | 38 visible_(false), |
| 41 can_start_(false), | 39 can_start_(false), |
| 42 can_draw_(false), | 40 can_draw_(false), |
| 43 has_pending_tree_(false), | 41 has_pending_tree_(false), |
| 44 pending_tree_is_ready_for_activation_(false), | 42 pending_tree_is_ready_for_activation_(false), |
| 45 active_tree_needs_first_draw_(false), | 43 active_tree_needs_first_draw_(false), |
| 46 did_commit_after_animating_(false), | 44 did_commit_after_animating_(false), |
| 47 did_create_and_initialize_first_output_surface_(false), | 45 did_create_and_initialize_first_output_surface_(false), |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 122 const char* SchedulerStateMachine::ActionToString(Action action) { | 120 const char* SchedulerStateMachine::ActionToString(Action action) { |
| 123 switch (action) { | 121 switch (action) { |
| 124 case ACTION_NONE: | 122 case ACTION_NONE: |
| 125 return "ACTION_NONE"; | 123 return "ACTION_NONE"; |
| 126 case ACTION_ANIMATE: | 124 case ACTION_ANIMATE: |
| 127 return "ACTION_ANIMATE"; | 125 return "ACTION_ANIMATE"; |
| 128 case ACTION_SEND_BEGIN_MAIN_FRAME: | 126 case ACTION_SEND_BEGIN_MAIN_FRAME: |
| 129 return "ACTION_SEND_BEGIN_MAIN_FRAME"; | 127 return "ACTION_SEND_BEGIN_MAIN_FRAME"; |
| 130 case ACTION_COMMIT: | 128 case ACTION_COMMIT: |
| 131 return "ACTION_COMMIT"; | 129 return "ACTION_COMMIT"; |
| 132 case ACTION_UPDATE_VISIBLE_TILES: | |
| 133 return "ACTION_UPDATE_VISIBLE_TILES"; | |
| 134 case ACTION_ACTIVATE_SYNC_TREE: | 130 case ACTION_ACTIVATE_SYNC_TREE: |
| 135 return "ACTION_ACTIVATE_SYNC_TREE"; | 131 return "ACTION_ACTIVATE_SYNC_TREE"; |
| 136 case ACTION_DRAW_AND_SWAP_IF_POSSIBLE: | 132 case ACTION_DRAW_AND_SWAP_IF_POSSIBLE: |
| 137 return "ACTION_DRAW_AND_SWAP_IF_POSSIBLE"; | 133 return "ACTION_DRAW_AND_SWAP_IF_POSSIBLE"; |
| 138 case ACTION_DRAW_AND_SWAP_FORCED: | 134 case ACTION_DRAW_AND_SWAP_FORCED: |
| 139 return "ACTION_DRAW_AND_SWAP_FORCED"; | 135 return "ACTION_DRAW_AND_SWAP_FORCED"; |
| 140 case ACTION_DRAW_AND_SWAP_ABORT: | 136 case ACTION_DRAW_AND_SWAP_ABORT: |
| 141 return "ACTION_DRAW_AND_SWAP_ABORT"; | 137 return "ACTION_DRAW_AND_SWAP_ABORT"; |
| 142 case ACTION_BEGIN_OUTPUT_SURFACE_CREATION: | 138 case ACTION_BEGIN_OUTPUT_SURFACE_CREATION: |
| 143 return "ACTION_BEGIN_OUTPUT_SURFACE_CREATION"; | 139 return "ACTION_BEGIN_OUTPUT_SURFACE_CREATION"; |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 199 state->SetInteger("current_frame_number", current_frame_number_); | 195 state->SetInteger("current_frame_number", current_frame_number_); |
| 200 | 196 |
| 201 state->SetInteger("last_frame_number_animate_performed", | 197 state->SetInteger("last_frame_number_animate_performed", |
| 202 last_frame_number_animate_performed_); | 198 last_frame_number_animate_performed_); |
| 203 state->SetInteger("last_frame_number_swap_performed", | 199 state->SetInteger("last_frame_number_swap_performed", |
| 204 last_frame_number_swap_performed_); | 200 last_frame_number_swap_performed_); |
| 205 state->SetInteger("last_frame_number_swap_requested", | 201 state->SetInteger("last_frame_number_swap_requested", |
| 206 last_frame_number_swap_requested_); | 202 last_frame_number_swap_requested_); |
| 207 state->SetInteger("last_frame_number_begin_main_frame_sent", | 203 state->SetInteger("last_frame_number_begin_main_frame_sent", |
| 208 last_frame_number_begin_main_frame_sent_); | 204 last_frame_number_begin_main_frame_sent_); |
| 209 state->SetInteger("last_frame_number_update_visible_tiles_was_called", | |
| 210 last_frame_number_update_visible_tiles_was_called_); | |
| 211 | 205 |
| 212 state->SetInteger("manage_tiles_funnel", manage_tiles_funnel_); | 206 state->SetInteger("manage_tiles_funnel", manage_tiles_funnel_); |
| 213 state->SetInteger("consecutive_checkerboard_animations", | 207 state->SetInteger("consecutive_checkerboard_animations", |
| 214 consecutive_checkerboard_animations_); | 208 consecutive_checkerboard_animations_); |
| 215 state->SetInteger("max_pending_swaps_", max_pending_swaps_); | 209 state->SetInteger("max_pending_swaps_", max_pending_swaps_); |
| 216 state->SetInteger("pending_swaps_", pending_swaps_); | 210 state->SetInteger("pending_swaps_", pending_swaps_); |
| 217 state->SetBoolean("needs_redraw", needs_redraw_); | 211 state->SetBoolean("needs_redraw", needs_redraw_); |
| 218 state->SetBoolean("needs_animate_", needs_animate_); | 212 state->SetBoolean("needs_animate_", needs_animate_); |
| 219 state->SetBoolean("needs_manage_tiles", needs_manage_tiles_); | 213 state->SetBoolean("needs_manage_tiles", needs_manage_tiles_); |
| 220 state->SetBoolean("swap_used_incomplete_tile", swap_used_incomplete_tile_); | |
| 221 state->SetBoolean("needs_commit", needs_commit_); | 214 state->SetBoolean("needs_commit", needs_commit_); |
| 222 state->SetBoolean("visible", visible_); | 215 state->SetBoolean("visible", visible_); |
| 223 state->SetBoolean("can_start", can_start_); | 216 state->SetBoolean("can_start", can_start_); |
| 224 state->SetBoolean("can_draw", can_draw_); | 217 state->SetBoolean("can_draw", can_draw_); |
| 225 state->SetBoolean("has_pending_tree", has_pending_tree_); | 218 state->SetBoolean("has_pending_tree", has_pending_tree_); |
| 226 state->SetBoolean("pending_tree_is_ready_for_activation", | 219 state->SetBoolean("pending_tree_is_ready_for_activation", |
| 227 pending_tree_is_ready_for_activation_); | 220 pending_tree_is_ready_for_activation_); |
| 228 state->SetBoolean("active_tree_needs_first_draw", | 221 state->SetBoolean("active_tree_needs_first_draw", |
| 229 active_tree_needs_first_draw_); | 222 active_tree_needs_first_draw_); |
| 230 state->SetBoolean("did_commit_after_animating", did_commit_after_animating_); | 223 state->SetBoolean("did_commit_after_animating", did_commit_after_animating_); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 258 | 251 |
| 259 bool SchedulerStateMachine::HasAnimatedThisFrame() const { | 252 bool SchedulerStateMachine::HasAnimatedThisFrame() const { |
| 260 return last_frame_number_animate_performed_ == current_frame_number_; | 253 return last_frame_number_animate_performed_ == current_frame_number_; |
| 261 } | 254 } |
| 262 | 255 |
| 263 bool SchedulerStateMachine::HasSentBeginMainFrameThisFrame() const { | 256 bool SchedulerStateMachine::HasSentBeginMainFrameThisFrame() const { |
| 264 return current_frame_number_ == | 257 return current_frame_number_ == |
| 265 last_frame_number_begin_main_frame_sent_; | 258 last_frame_number_begin_main_frame_sent_; |
| 266 } | 259 } |
| 267 | 260 |
| 268 bool SchedulerStateMachine::HasUpdatedVisibleTilesThisFrame() const { | |
| 269 return current_frame_number_ == | |
| 270 last_frame_number_update_visible_tiles_was_called_; | |
| 271 } | |
| 272 | |
| 273 bool SchedulerStateMachine::HasSwappedThisFrame() const { | 261 bool SchedulerStateMachine::HasSwappedThisFrame() const { |
| 274 return current_frame_number_ == last_frame_number_swap_performed_; | 262 return current_frame_number_ == last_frame_number_swap_performed_; |
| 275 } | 263 } |
| 276 | 264 |
| 277 bool SchedulerStateMachine::HasRequestedSwapThisFrame() const { | 265 bool SchedulerStateMachine::HasRequestedSwapThisFrame() const { |
| 278 return current_frame_number_ == last_frame_number_swap_requested_; | 266 return current_frame_number_ == last_frame_number_swap_requested_; |
| 279 } | 267 } |
| 280 | 268 |
| 281 bool SchedulerStateMachine::PendingDrawsShouldBeAborted() const { | 269 bool SchedulerStateMachine::PendingDrawsShouldBeAborted() const { |
| 282 // These are all the cases where we normally cannot or do not want to draw | 270 // These are all the cases where we normally cannot or do not want to draw |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 387 return false; | 375 return false; |
| 388 | 376 |
| 389 // If we want to force activation, do so ASAP. | 377 // If we want to force activation, do so ASAP. |
| 390 if (PendingActivationsShouldBeForced()) | 378 if (PendingActivationsShouldBeForced()) |
| 391 return true; | 379 return true; |
| 392 | 380 |
| 393 // At this point, only activate if we are ready to activate. | 381 // At this point, only activate if we are ready to activate. |
| 394 return pending_tree_is_ready_for_activation_; | 382 return pending_tree_is_ready_for_activation_; |
| 395 } | 383 } |
| 396 | 384 |
| 397 bool SchedulerStateMachine::ShouldUpdateVisibleTiles() const { | |
| 398 if (!settings_.impl_side_painting) | |
| 399 return false; | |
| 400 if (HasUpdatedVisibleTilesThisFrame()) | |
| 401 return false; | |
| 402 | |
| 403 // We don't want to update visible tiles right after drawing. | |
| 404 if (HasRequestedSwapThisFrame()) | |
| 405 return false; | |
| 406 | |
| 407 // There's no reason to check for tiles if we don't have an output surface. | |
| 408 if (!HasInitializedOutputSurface()) | |
| 409 return false; | |
| 410 | |
| 411 // We should not check for visible tiles until we've entered the deadline so | |
| 412 // we check as late as possible and give the tiles more time to initialize. | |
| 413 if (begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE) | |
| 414 return false; | |
| 415 | |
| 416 // If the last swap drew with checkerboard or missing tiles, we should | |
| 417 // poll for any new visible tiles so we can be notified to draw again | |
| 418 // when there are. | |
| 419 if (swap_used_incomplete_tile_) | |
| 420 return true; | |
| 421 | |
| 422 return false; | |
| 423 } | |
| 424 | |
| 425 bool SchedulerStateMachine::ShouldAnimate() const { | 385 bool SchedulerStateMachine::ShouldAnimate() const { |
| 426 // If a commit occurred after our last call, we need to do animation again. | 386 // If a commit occurred after our last call, we need to do animation again. |
| 427 if (HasAnimatedThisFrame() && !did_commit_after_animating_) | 387 if (HasAnimatedThisFrame() && !did_commit_after_animating_) |
| 428 return false; | 388 return false; |
| 429 | 389 |
| 430 if (begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING && | 390 if (begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING && |
| 431 begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE) | 391 begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE) |
| 432 return false; | 392 return false; |
| 433 | 393 |
| 434 return needs_redraw_ || needs_animate_; | 394 return needs_redraw_ || needs_animate_; |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 527 // Limiting to once per-frame is not enough, since we only want to | 487 // Limiting to once per-frame is not enough, since we only want to |
| 528 // manage tiles _after_ draws. Polling for draw triggers and | 488 // manage tiles _after_ draws. Polling for draw triggers and |
| 529 // begin-frame are mutually exclusive, so we limit to these two cases. | 489 // begin-frame are mutually exclusive, so we limit to these two cases. |
| 530 if (begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE && | 490 if (begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE && |
| 531 !inside_poll_for_anticipated_draw_triggers_) | 491 !inside_poll_for_anticipated_draw_triggers_) |
| 532 return false; | 492 return false; |
| 533 return needs_manage_tiles_; | 493 return needs_manage_tiles_; |
| 534 } | 494 } |
| 535 | 495 |
| 536 SchedulerStateMachine::Action SchedulerStateMachine::NextAction() const { | 496 SchedulerStateMachine::Action SchedulerStateMachine::NextAction() const { |
| 537 if (ShouldUpdateVisibleTiles()) | |
| 538 return ACTION_UPDATE_VISIBLE_TILES; | |
| 539 if (ShouldActivatePendingTree()) | 497 if (ShouldActivatePendingTree()) |
| 540 return ACTION_ACTIVATE_SYNC_TREE; | 498 return ACTION_ACTIVATE_SYNC_TREE; |
| 541 if (ShouldCommit()) | 499 if (ShouldCommit()) |
| 542 return ACTION_COMMIT; | 500 return ACTION_COMMIT; |
| 543 if (ShouldAnimate()) | 501 if (ShouldAnimate()) |
| 544 return ACTION_ANIMATE; | 502 return ACTION_ANIMATE; |
| 545 if (ShouldDraw()) { | 503 if (ShouldDraw()) { |
| 546 if (PendingDrawsShouldBeAborted()) | 504 if (PendingDrawsShouldBeAborted()) |
| 547 return ACTION_DRAW_AND_SWAP_ABORT; | 505 return ACTION_DRAW_AND_SWAP_ABORT; |
| 548 else if (forced_redraw_state_ == FORCED_REDRAW_STATE_WAITING_FOR_DRAW) | 506 else if (forced_redraw_state_ == FORCED_REDRAW_STATE_WAITING_FOR_DRAW) |
| 549 return ACTION_DRAW_AND_SWAP_FORCED; | 507 return ACTION_DRAW_AND_SWAP_FORCED; |
| 550 else | 508 else |
| 551 return ACTION_DRAW_AND_SWAP_IF_POSSIBLE; | 509 return ACTION_DRAW_AND_SWAP_IF_POSSIBLE; |
| 552 } | 510 } |
| 553 if (ShouldManageTiles()) | 511 if (ShouldManageTiles()) |
| 554 return ACTION_MANAGE_TILES; | 512 return ACTION_MANAGE_TILES; |
| 555 if (ShouldSendBeginMainFrame()) | 513 if (ShouldSendBeginMainFrame()) |
| 556 return ACTION_SEND_BEGIN_MAIN_FRAME; | 514 return ACTION_SEND_BEGIN_MAIN_FRAME; |
| 557 if (ShouldBeginOutputSurfaceCreation()) | 515 if (ShouldBeginOutputSurfaceCreation()) |
| 558 return ACTION_BEGIN_OUTPUT_SURFACE_CREATION; | 516 return ACTION_BEGIN_OUTPUT_SURFACE_CREATION; |
| 559 return ACTION_NONE; | 517 return ACTION_NONE; |
| 560 } | 518 } |
| 561 | 519 |
| 562 void SchedulerStateMachine::UpdateState(Action action) { | 520 void SchedulerStateMachine::UpdateState(Action action) { |
| 563 switch (action) { | 521 switch (action) { |
| 564 case ACTION_NONE: | 522 case ACTION_NONE: |
| 565 return; | 523 return; |
| 566 | 524 |
| 567 case ACTION_UPDATE_VISIBLE_TILES: | |
| 568 last_frame_number_update_visible_tiles_was_called_ = | |
| 569 current_frame_number_; | |
| 570 return; | |
| 571 | |
| 572 case ACTION_ACTIVATE_SYNC_TREE: | 525 case ACTION_ACTIVATE_SYNC_TREE: |
| 573 UpdateStateOnActivation(); | 526 UpdateStateOnActivation(); |
| 574 return; | 527 return; |
| 575 | 528 |
| 576 case ACTION_ANIMATE: | 529 case ACTION_ANIMATE: |
| 577 last_frame_number_animate_performed_ = current_frame_number_; | 530 last_frame_number_animate_performed_ = current_frame_number_; |
| 578 needs_animate_ = false; | 531 needs_animate_ = false; |
| 579 did_commit_after_animating_ = false; | 532 did_commit_after_animating_ = false; |
| 580 // TODO(skyostil): Instead of assuming this, require the client to tell | 533 // TODO(skyostil): Instead of assuming this, require the client to tell |
| 581 // us. | 534 // us. |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 760 // The output surface is the provider of BeginImplFrames, so we are not going | 713 // The output surface is the provider of BeginImplFrames, so we are not going |
| 761 // to get them even if we ask for them. | 714 // to get them even if we ask for them. |
| 762 if (!HasInitializedOutputSurface()) | 715 if (!HasInitializedOutputSurface()) |
| 763 return false; | 716 return false; |
| 764 | 717 |
| 765 // The forced draw respects our normal draw scheduling, so we need to | 718 // The forced draw respects our normal draw scheduling, so we need to |
| 766 // request a BeginImplFrame for it. | 719 // request a BeginImplFrame for it. |
| 767 if (forced_redraw_state_ == FORCED_REDRAW_STATE_WAITING_FOR_DRAW) | 720 if (forced_redraw_state_ == FORCED_REDRAW_STATE_WAITING_FOR_DRAW) |
| 768 return true; | 721 return true; |
| 769 | 722 |
| 770 // We need to draw a more complete frame than we did the last BeginImplFrame, | |
| 771 // so request another BeginImplFrame in anticipation that we will have | |
| 772 // additional visible tiles. | |
| 773 if (swap_used_incomplete_tile_) | |
| 774 return true; | |
| 775 | |
| 776 return needs_animate_ || needs_redraw_; | 723 return needs_animate_ || needs_redraw_; |
| 777 } | 724 } |
| 778 | 725 |
| 779 // These are cases where we are very likely to draw soon, but might not | 726 // These are cases where we are very likely to draw soon, but might not |
| 780 // actually have a new frame to draw when we receive the next BeginImplFrame. | 727 // actually have a new frame to draw when we receive the next BeginImplFrame. |
| 781 // Proactively requesting the BeginImplFrame helps hide the round trip latency | 728 // Proactively requesting the BeginImplFrame helps hide the round trip latency |
| 782 // of the SetNeedsBeginFrame request that has to go to the Browser. | 729 // of the SetNeedsBeginFrame request that has to go to the Browser. |
| 783 bool SchedulerStateMachine::ProactiveBeginFrameWanted() const { | 730 bool SchedulerStateMachine::ProactiveBeginFrameWanted() const { |
| 784 // The output surface is the provider of BeginImplFrames, | 731 // The output surface is the provider of BeginImplFrames, |
| 785 // so we are not going to get them even if we ask for them. | 732 // so we are not going to get them even if we ask for them. |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 956 max_pending_swaps_ = max; | 903 max_pending_swaps_ = max; |
| 957 } | 904 } |
| 958 | 905 |
| 959 void SchedulerStateMachine::DidSwapBuffers() { | 906 void SchedulerStateMachine::DidSwapBuffers() { |
| 960 pending_swaps_++; | 907 pending_swaps_++; |
| 961 DCHECK_LE(pending_swaps_, max_pending_swaps_); | 908 DCHECK_LE(pending_swaps_, max_pending_swaps_); |
| 962 | 909 |
| 963 last_frame_number_swap_performed_ = current_frame_number_; | 910 last_frame_number_swap_performed_ = current_frame_number_; |
| 964 } | 911 } |
| 965 | 912 |
| 966 void SchedulerStateMachine::SetSwapUsedIncompleteTile( | |
| 967 bool used_incomplete_tile) { | |
| 968 swap_used_incomplete_tile_ = used_incomplete_tile; | |
| 969 } | |
| 970 | |
| 971 void SchedulerStateMachine::DidSwapBuffersComplete() { | 913 void SchedulerStateMachine::DidSwapBuffersComplete() { |
| 972 DCHECK_GT(pending_swaps_, 0); | 914 DCHECK_GT(pending_swaps_, 0); |
| 973 pending_swaps_--; | 915 pending_swaps_--; |
| 974 } | 916 } |
| 975 | 917 |
| 976 void SchedulerStateMachine::SetImplLatencyTakesPriority( | 918 void SchedulerStateMachine::SetImplLatencyTakesPriority( |
| 977 bool impl_latency_takes_priority) { | 919 bool impl_latency_takes_priority) { |
| 978 impl_latency_takes_priority_ = impl_latency_takes_priority; | 920 impl_latency_takes_priority_ = impl_latency_takes_priority; |
| 979 } | 921 } |
| 980 | 922 |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1101 static_cast<int>(begin_impl_frame_state_), | 1043 static_cast<int>(begin_impl_frame_state_), |
| 1102 static_cast<int>(commit_state_), | 1044 static_cast<int>(commit_state_), |
| 1103 has_pending_tree_ ? 'T' : 'F', | 1045 has_pending_tree_ ? 'T' : 'F', |
| 1104 pending_tree_is_ready_for_activation_ ? 'T' : 'F', | 1046 pending_tree_is_ready_for_activation_ ? 'T' : 'F', |
| 1105 active_tree_needs_first_draw_ ? 'T' : 'F', | 1047 active_tree_needs_first_draw_ ? 'T' : 'F', |
| 1106 max_pending_swaps_, | 1048 max_pending_swaps_, |
| 1107 pending_swaps_); | 1049 pending_swaps_); |
| 1108 } | 1050 } |
| 1109 | 1051 |
| 1110 } // namespace cc | 1052 } // namespace cc |
| OLD | NEW |