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

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

Issue 798323003: cc: Only send a BeginMainFrame inside an BeginImplFrame. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixing for rename. Created 6 years 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
« no previous file with comments | « no previous file | cc/scheduler/scheduler_state_machine_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_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"
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 335
336 bool SchedulerStateMachine::ShouldDraw() const { 336 bool SchedulerStateMachine::ShouldDraw() const {
337 // If we need to abort draws, we should do so ASAP since the draw could 337 // If we need to abort draws, we should do so ASAP since the draw could
338 // be blocking other important actions (like output surface initialization), 338 // be blocking other important actions (like output surface initialization),
339 // from occuring. If we are waiting for the first draw, then perfom the 339 // from occuring. If we are waiting for the first draw, then perfom the
340 // aborted draw to keep things moving. If we are not waiting for the first 340 // aborted draw to keep things moving. If we are not waiting for the first
341 // draw however, we don't want to abort for no reason. 341 // draw however, we don't want to abort for no reason.
342 if (PendingDrawsShouldBeAborted()) 342 if (PendingDrawsShouldBeAborted())
343 return active_tree_needs_first_draw_; 343 return active_tree_needs_first_draw_;
344 344
345 // Don't draw if we are waiting on the first commit after a surface.
346 if (output_surface_state_ != OUTPUT_SURFACE_ACTIVE)
347 return false;
348
345 // If a commit has occurred after the animate call, we need to call animate 349 // If a commit has occurred after the animate call, we need to call animate
346 // again before we should draw. 350 // again before we should draw.
347 if (did_commit_after_animating_) 351 if (did_commit_after_animating_)
348 return false; 352 return false;
349 353
350 // After this line, we only want to send a swap request once per frame. 354 // After this line, we only want to send a swap request once per frame.
351 if (HasRequestedSwapThisFrame()) 355 if (HasRequestedSwapThisFrame())
352 return false; 356 return false;
353 357
354 // Do not queue too many swaps. 358 // Do not queue too many swaps.
(...skipping 25 matching lines...) Expand all
380 384
381 // If we want to force activation, do so ASAP. 385 // If we want to force activation, do so ASAP.
382 if (PendingActivationsShouldBeForced()) 386 if (PendingActivationsShouldBeForced())
383 return true; 387 return true;
384 388
385 // At this point, only activate if we are ready to activate. 389 // At this point, only activate if we are ready to activate.
386 return pending_tree_is_ready_for_activation_; 390 return pending_tree_is_ready_for_activation_;
387 } 391 }
388 392
389 bool SchedulerStateMachine::ShouldAnimate() const { 393 bool SchedulerStateMachine::ShouldAnimate() const {
394 // Don't animate if we are waiting on the first commit after a surface.
395 if (output_surface_state_ != OUTPUT_SURFACE_ACTIVE)
396 return false;
397
390 // If a commit occurred after our last call, we need to do animation again. 398 // If a commit occurred after our last call, we need to do animation again.
391 if (HasAnimatedThisFrame() && !did_commit_after_animating_) 399 if (HasAnimatedThisFrame() && !did_commit_after_animating_)
392 return false; 400 return false;
393 401
394 if (begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING && 402 if (begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING &&
395 begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE) 403 begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE)
396 return false; 404 return false;
397 405
398 return needs_redraw_ || needs_animate_; 406 return needs_redraw_ || needs_animate_;
399 } 407 }
(...skipping 17 matching lines...) Expand all
417 if (commit_state_ != COMMIT_STATE_IDLE) 425 if (commit_state_ != COMMIT_STATE_IDLE)
418 return false; 426 return false;
419 427
420 // Don't send BeginMainFrame early if we are prioritizing the active tree 428 // Don't send BeginMainFrame early if we are prioritizing the active tree
421 // because of impl_latency_takes_priority_. 429 // because of impl_latency_takes_priority_.
422 if (impl_latency_takes_priority_ && 430 if (impl_latency_takes_priority_ &&
423 (has_pending_tree_ || active_tree_needs_first_draw_)) { 431 (has_pending_tree_ || active_tree_needs_first_draw_)) {
424 return false; 432 return false;
425 } 433 }
426 434
427 // We want to start the first commit after we get a new output surface ASAP.
428 if (output_surface_state_ == OUTPUT_SURFACE_WAITING_FOR_FIRST_COMMIT)
429 return true;
430
431 // We should not send BeginMainFrame while we are in 435 // We should not send BeginMainFrame while we are in
432 // BEGIN_IMPL_FRAME_STATE_IDLE since we might have new 436 // BEGIN_IMPL_FRAME_STATE_IDLE since we might have new
433 // user input arriving soon. 437 // user input arriving soon.
434 // TODO(brianderson): Allow sending BeginMainFrame while idle when the main 438 // TODO(brianderson): Allow sending BeginMainFrame while idle when the main
435 // thread isn't consuming user input. 439 // thread isn't consuming user input.
436 if (begin_impl_frame_state_ == BEGIN_IMPL_FRAME_STATE_IDLE && 440 if (begin_impl_frame_state_ == BEGIN_IMPL_FRAME_STATE_IDLE &&
437 BeginFrameNeeded()) 441 BeginFrameNeeded())
438 return false; 442 return false;
439 443
440 // We need a new commit for the forced redraw. This honors the 444 // We need a new commit for the forced redraw. This honors the
(...skipping 658 matching lines...) Expand 10 before | Expand all | Expand 10 after
1099 static_cast<int>(begin_impl_frame_state_), 1103 static_cast<int>(begin_impl_frame_state_),
1100 static_cast<int>(commit_state_), 1104 static_cast<int>(commit_state_),
1101 has_pending_tree_ ? 'T' : 'F', 1105 has_pending_tree_ ? 'T' : 'F',
1102 pending_tree_is_ready_for_activation_ ? 'T' : 'F', 1106 pending_tree_is_ready_for_activation_ ? 'T' : 'F',
1103 active_tree_needs_first_draw_ ? 'T' : 'F', 1107 active_tree_needs_first_draw_ ? 'T' : 'F',
1104 max_pending_swaps_, 1108 max_pending_swaps_,
1105 pending_swaps_); 1109 pending_swaps_);
1106 } 1110 }
1107 1111
1108 } // namespace cc 1112 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | cc/scheduler/scheduler_state_machine_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698