| 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 (!can_draw_) | 386 if (!can_draw_) |
| 427 return false; | 387 return false; |
| 428 | 388 |
| 429 // If a commit occurred after our last call, we need to do animation again. | 389 // If a commit occurred after our last call, we need to do animation again. |
| 430 if (HasAnimatedThisFrame() && !did_commit_after_animating_) | 390 if (HasAnimatedThisFrame() && !did_commit_after_animating_) |
| 431 return false; | 391 return false; |
| 432 | 392 |
| 433 if (begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING && | 393 if (begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING && |
| 434 begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE) | 394 begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE) |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 530 // Limiting to once per-frame is not enough, since we only want to | 490 // Limiting to once per-frame is not enough, since we only want to |
| 531 // manage tiles _after_ draws. Polling for draw triggers and | 491 // manage tiles _after_ draws. Polling for draw triggers and |
| 532 // begin-frame are mutually exclusive, so we limit to these two cases. | 492 // begin-frame are mutually exclusive, so we limit to these two cases. |
| 533 if (begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE && | 493 if (begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE && |
| 534 !inside_poll_for_anticipated_draw_triggers_) | 494 !inside_poll_for_anticipated_draw_triggers_) |
| 535 return false; | 495 return false; |
| 536 return needs_manage_tiles_; | 496 return needs_manage_tiles_; |
| 537 } | 497 } |
| 538 | 498 |
| 539 SchedulerStateMachine::Action SchedulerStateMachine::NextAction() const { | 499 SchedulerStateMachine::Action SchedulerStateMachine::NextAction() const { |
| 540 if (ShouldUpdateVisibleTiles()) | |
| 541 return ACTION_UPDATE_VISIBLE_TILES; | |
| 542 if (ShouldActivatePendingTree()) | 500 if (ShouldActivatePendingTree()) |
| 543 return ACTION_ACTIVATE_SYNC_TREE; | 501 return ACTION_ACTIVATE_SYNC_TREE; |
| 544 if (ShouldCommit()) | 502 if (ShouldCommit()) |
| 545 return ACTION_COMMIT; | 503 return ACTION_COMMIT; |
| 546 if (ShouldAnimate()) | 504 if (ShouldAnimate()) |
| 547 return ACTION_ANIMATE; | 505 return ACTION_ANIMATE; |
| 548 if (ShouldDraw()) { | 506 if (ShouldDraw()) { |
| 549 if (PendingDrawsShouldBeAborted()) | 507 if (PendingDrawsShouldBeAborted()) |
| 550 return ACTION_DRAW_AND_SWAP_ABORT; | 508 return ACTION_DRAW_AND_SWAP_ABORT; |
| 551 else if (forced_redraw_state_ == FORCED_REDRAW_STATE_WAITING_FOR_DRAW) | 509 else if (forced_redraw_state_ == FORCED_REDRAW_STATE_WAITING_FOR_DRAW) |
| 552 return ACTION_DRAW_AND_SWAP_FORCED; | 510 return ACTION_DRAW_AND_SWAP_FORCED; |
| 553 else | 511 else |
| 554 return ACTION_DRAW_AND_SWAP_IF_POSSIBLE; | 512 return ACTION_DRAW_AND_SWAP_IF_POSSIBLE; |
| 555 } | 513 } |
| 556 if (ShouldManageTiles()) | 514 if (ShouldManageTiles()) |
| 557 return ACTION_MANAGE_TILES; | 515 return ACTION_MANAGE_TILES; |
| 558 if (ShouldSendBeginMainFrame()) | 516 if (ShouldSendBeginMainFrame()) |
| 559 return ACTION_SEND_BEGIN_MAIN_FRAME; | 517 return ACTION_SEND_BEGIN_MAIN_FRAME; |
| 560 if (ShouldBeginOutputSurfaceCreation()) | 518 if (ShouldBeginOutputSurfaceCreation()) |
| 561 return ACTION_BEGIN_OUTPUT_SURFACE_CREATION; | 519 return ACTION_BEGIN_OUTPUT_SURFACE_CREATION; |
| 562 return ACTION_NONE; | 520 return ACTION_NONE; |
| 563 } | 521 } |
| 564 | 522 |
| 565 void SchedulerStateMachine::UpdateState(Action action) { | 523 void SchedulerStateMachine::UpdateState(Action action) { |
| 566 switch (action) { | 524 switch (action) { |
| 567 case ACTION_NONE: | 525 case ACTION_NONE: |
| 568 return; | 526 return; |
| 569 | 527 |
| 570 case ACTION_UPDATE_VISIBLE_TILES: | |
| 571 last_frame_number_update_visible_tiles_was_called_ = | |
| 572 current_frame_number_; | |
| 573 return; | |
| 574 | |
| 575 case ACTION_ACTIVATE_SYNC_TREE: | 528 case ACTION_ACTIVATE_SYNC_TREE: |
| 576 UpdateStateOnActivation(); | 529 UpdateStateOnActivation(); |
| 577 return; | 530 return; |
| 578 | 531 |
| 579 case ACTION_ANIMATE: | 532 case ACTION_ANIMATE: |
| 580 last_frame_number_animate_performed_ = current_frame_number_; | 533 last_frame_number_animate_performed_ = current_frame_number_; |
| 581 needs_animate_ = false; | 534 needs_animate_ = false; |
| 582 did_commit_after_animating_ = false; | 535 did_commit_after_animating_ = false; |
| 583 // TODO(skyostil): Instead of assuming this, require the client to tell | 536 // TODO(skyostil): Instead of assuming this, require the client to tell |
| 584 // us. | 537 // us. |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 771 | 724 |
| 772 // The forced draw respects our normal draw scheduling, so we need to | 725 // The forced draw respects our normal draw scheduling, so we need to |
| 773 // request a BeginImplFrame for it. | 726 // request a BeginImplFrame for it. |
| 774 if (forced_redraw_state_ == FORCED_REDRAW_STATE_WAITING_FOR_DRAW) | 727 if (forced_redraw_state_ == FORCED_REDRAW_STATE_WAITING_FOR_DRAW) |
| 775 return true; | 728 return true; |
| 776 | 729 |
| 777 // There's no need to produce frames if we are not visible. | 730 // There's no need to produce frames if we are not visible. |
| 778 if (!visible_) | 731 if (!visible_) |
| 779 return false; | 732 return false; |
| 780 | 733 |
| 781 // We need to draw a more complete frame than we did the last BeginImplFrame, | |
| 782 // so request another BeginImplFrame in anticipation that we will have | |
| 783 // additional visible tiles. | |
| 784 if (swap_used_incomplete_tile_) | |
| 785 return true; | |
| 786 | |
| 787 if (needs_animate_) | 734 if (needs_animate_) |
| 788 return true; | 735 return true; |
| 789 | 736 |
| 790 return needs_redraw_; | 737 return needs_redraw_; |
| 791 } | 738 } |
| 792 | 739 |
| 793 // These are cases where we are very likely to draw soon, but might not | 740 // These are cases where we are very likely to draw soon, but might not |
| 794 // actually have a new frame to draw when we receive the next BeginImplFrame. | 741 // actually have a new frame to draw when we receive the next BeginImplFrame. |
| 795 // Proactively requesting the BeginImplFrame helps hide the round trip latency | 742 // Proactively requesting the BeginImplFrame helps hide the round trip latency |
| 796 // of the SetNeedsBeginFrame request that has to go to the Browser. | 743 // of the SetNeedsBeginFrame request that has to go to the Browser. |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 970 max_pending_swaps_ = max; | 917 max_pending_swaps_ = max; |
| 971 } | 918 } |
| 972 | 919 |
| 973 void SchedulerStateMachine::DidSwapBuffers() { | 920 void SchedulerStateMachine::DidSwapBuffers() { |
| 974 pending_swaps_++; | 921 pending_swaps_++; |
| 975 DCHECK_LE(pending_swaps_, max_pending_swaps_); | 922 DCHECK_LE(pending_swaps_, max_pending_swaps_); |
| 976 | 923 |
| 977 last_frame_number_swap_performed_ = current_frame_number_; | 924 last_frame_number_swap_performed_ = current_frame_number_; |
| 978 } | 925 } |
| 979 | 926 |
| 980 void SchedulerStateMachine::SetSwapUsedIncompleteTile( | |
| 981 bool used_incomplete_tile) { | |
| 982 swap_used_incomplete_tile_ = used_incomplete_tile; | |
| 983 } | |
| 984 | |
| 985 void SchedulerStateMachine::DidSwapBuffersComplete() { | 927 void SchedulerStateMachine::DidSwapBuffersComplete() { |
| 986 DCHECK_GT(pending_swaps_, 0); | 928 DCHECK_GT(pending_swaps_, 0); |
| 987 pending_swaps_--; | 929 pending_swaps_--; |
| 988 } | 930 } |
| 989 | 931 |
| 990 void SchedulerStateMachine::SetImplLatencyTakesPriority( | 932 void SchedulerStateMachine::SetImplLatencyTakesPriority( |
| 991 bool impl_latency_takes_priority) { | 933 bool impl_latency_takes_priority) { |
| 992 impl_latency_takes_priority_ = impl_latency_takes_priority; | 934 impl_latency_takes_priority_ = impl_latency_takes_priority; |
| 993 } | 935 } |
| 994 | 936 |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1115 static_cast<int>(begin_impl_frame_state_), | 1057 static_cast<int>(begin_impl_frame_state_), |
| 1116 static_cast<int>(commit_state_), | 1058 static_cast<int>(commit_state_), |
| 1117 has_pending_tree_ ? 'T' : 'F', | 1059 has_pending_tree_ ? 'T' : 'F', |
| 1118 pending_tree_is_ready_for_activation_ ? 'T' : 'F', | 1060 pending_tree_is_ready_for_activation_ ? 'T' : 'F', |
| 1119 active_tree_needs_first_draw_ ? 'T' : 'F', | 1061 active_tree_needs_first_draw_ ? 'T' : 'F', |
| 1120 max_pending_swaps_, | 1062 max_pending_swaps_, |
| 1121 pending_swaps_); | 1063 pending_swaps_); |
| 1122 } | 1064 } |
| 1123 | 1065 |
| 1124 } // namespace cc | 1066 } // namespace cc |
| OLD | NEW |