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

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

Issue 2753843003: Create a new action triggered when a BeginMainFrame is not expected before vsync (Closed)
Patch Set: respond to Brian's comments Created 3 years, 8 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
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/format_macros.h" 7 #include "base/format_macros.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "base/trace_event/trace_event.h" 10 #include "base/trace_event/trace_event.h"
(...skipping 24 matching lines...) Expand all
35 BeginFrameArgs::kInvalidFrameNumber), 35 BeginFrameArgs::kInvalidFrameNumber),
36 last_begin_frame_sequence_number_compositor_frame_was_fresh_( 36 last_begin_frame_sequence_number_compositor_frame_was_fresh_(
37 BeginFrameArgs::kInvalidFrameNumber), 37 BeginFrameArgs::kInvalidFrameNumber),
38 commit_count_(0), 38 commit_count_(0),
39 current_frame_number_(0), 39 current_frame_number_(0),
40 last_frame_number_submit_performed_(-1), 40 last_frame_number_submit_performed_(-1),
41 last_frame_number_draw_performed_(-1), 41 last_frame_number_draw_performed_(-1),
42 last_frame_number_begin_main_frame_sent_(-1), 42 last_frame_number_begin_main_frame_sent_(-1),
43 last_frame_number_invalidate_compositor_frame_sink_performed_(-1), 43 last_frame_number_invalidate_compositor_frame_sink_performed_(-1),
44 draw_funnel_(false), 44 draw_funnel_(false),
45 send_begin_main_frame_funnel_(true), 45 did_send_begin_main_frame_for_current_frame_(true),
46 invalidate_compositor_frame_sink_funnel_(false), 46 invalidate_compositor_frame_sink_funnel_(false),
47 impl_side_invalidation_funnel_(false), 47 impl_side_invalidation_funnel_(false),
48 did_notify_begin_main_frame_not_sent_(true),
49 did_commit_during_frame_(false),
48 prepare_tiles_funnel_(0), 50 prepare_tiles_funnel_(0),
49 consecutive_checkerboard_animations_(0), 51 consecutive_checkerboard_animations_(0),
50 pending_submit_frames_(0), 52 pending_submit_frames_(0),
51 submit_frames_with_current_compositor_frame_sink_(0), 53 submit_frames_with_current_compositor_frame_sink_(0),
52 needs_redraw_(false), 54 needs_redraw_(false),
53 needs_prepare_tiles_(false), 55 needs_prepare_tiles_(false),
54 needs_begin_main_frame_(false), 56 needs_begin_main_frame_(false),
55 needs_one_begin_impl_frame_(false), 57 needs_one_begin_impl_frame_(false),
56 visible_(false), 58 visible_(false),
57 begin_frame_source_paused_(false), 59 begin_frame_source_paused_(false),
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 case ACTION_DRAW_ABORT: 189 case ACTION_DRAW_ABORT:
188 return "ACTION_DRAW_ABORT"; 190 return "ACTION_DRAW_ABORT";
189 case ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION: 191 case ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION:
190 return "ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION"; 192 return "ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION";
191 case ACTION_PREPARE_TILES: 193 case ACTION_PREPARE_TILES:
192 return "ACTION_PREPARE_TILES"; 194 return "ACTION_PREPARE_TILES";
193 case ACTION_INVALIDATE_COMPOSITOR_FRAME_SINK: 195 case ACTION_INVALIDATE_COMPOSITOR_FRAME_SINK:
194 return "ACTION_INVALIDATE_COMPOSITOR_FRAME_SINK"; 196 return "ACTION_INVALIDATE_COMPOSITOR_FRAME_SINK";
195 case ACTION_PERFORM_IMPL_SIDE_INVALIDATION: 197 case ACTION_PERFORM_IMPL_SIDE_INVALIDATION:
196 return "ACTION_PERFORM_IMPL_SIDE_INVALIDATION"; 198 return "ACTION_PERFORM_IMPL_SIDE_INVALIDATION";
199 case ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT:
200 return "ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT";
197 } 201 }
198 NOTREACHED(); 202 NOTREACHED();
199 return "???"; 203 return "???";
200 } 204 }
201 205
202 std::unique_ptr<base::trace_event::ConvertableToTraceFormat> 206 std::unique_ptr<base::trace_event::ConvertableToTraceFormat>
203 SchedulerStateMachine::AsValue() const { 207 SchedulerStateMachine::AsValue() const {
204 std::unique_ptr<base::trace_event::TracedValue> state( 208 std::unique_ptr<base::trace_event::TracedValue> state(
205 new base::trace_event::TracedValue()); 209 new base::trace_event::TracedValue());
206 AsValueInto(state.get()); 210 AsValueInto(state.get());
(...skipping 30 matching lines...) Expand all
237 state->SetInteger("last_begin_frame_sequence_number_begin_main_frame_sent", 241 state->SetInteger("last_begin_frame_sequence_number_begin_main_frame_sent",
238 last_begin_frame_sequence_number_begin_main_frame_sent_); 242 last_begin_frame_sequence_number_begin_main_frame_sent_);
239 state->SetInteger("last_begin_frame_sequence_number_pending_tree_was_fresh", 243 state->SetInteger("last_begin_frame_sequence_number_pending_tree_was_fresh",
240 last_begin_frame_sequence_number_pending_tree_was_fresh_); 244 last_begin_frame_sequence_number_pending_tree_was_fresh_);
241 state->SetInteger("last_begin_frame_sequence_number_active_tree_was_fresh", 245 state->SetInteger("last_begin_frame_sequence_number_active_tree_was_fresh",
242 last_begin_frame_sequence_number_active_tree_was_fresh_); 246 last_begin_frame_sequence_number_active_tree_was_fresh_);
243 state->SetInteger( 247 state->SetInteger(
244 "last_begin_frame_sequence_number_compositor_frame_was_fresh", 248 "last_begin_frame_sequence_number_compositor_frame_was_fresh",
245 last_begin_frame_sequence_number_compositor_frame_was_fresh_); 249 last_begin_frame_sequence_number_compositor_frame_was_fresh_);
246 state->SetBoolean("funnel: draw_funnel", draw_funnel_); 250 state->SetBoolean("funnel: draw_funnel", draw_funnel_);
247 state->SetBoolean("funnel: send_begin_main_frame_funnel", 251 state->SetBoolean("funnel: did_send_begin_main_frame",
248 send_begin_main_frame_funnel_); 252 did_send_begin_main_frame_for_current_frame_);
253 state->SetBoolean("funnel: did_notify_begin_main_frame_not_sent",
254 did_notify_begin_main_frame_not_sent_);
255 state->SetBoolean("funnel: did_commit_during_frame",
256 did_commit_during_frame_);
249 state->SetInteger("funnel: prepare_tiles_funnel", prepare_tiles_funnel_); 257 state->SetInteger("funnel: prepare_tiles_funnel", prepare_tiles_funnel_);
250 state->SetBoolean("funnel: invalidate_compositor_frame_sink_funnel", 258 state->SetBoolean("funnel: invalidate_compositor_frame_sink_funnel",
251 invalidate_compositor_frame_sink_funnel_); 259 invalidate_compositor_frame_sink_funnel_);
252 state->SetBoolean("funnel: impl_side_invalidation_funnel", 260 state->SetBoolean("funnel: impl_side_invalidation_funnel",
253 impl_side_invalidation_funnel_); 261 impl_side_invalidation_funnel_);
254 state->SetInteger("consecutive_checkerboard_animations", 262 state->SetInteger("consecutive_checkerboard_animations",
255 consecutive_checkerboard_animations_); 263 consecutive_checkerboard_animations_);
256 state->SetInteger("pending_submit_frames_", pending_submit_frames_); 264 state->SetInteger("pending_submit_frames_", pending_submit_frames_);
257 state->SetInteger("submit_frames_with_current_compositor_frame_sink", 265 state->SetInteger("submit_frames_with_current_compositor_frame_sink",
258 submit_frames_with_current_compositor_frame_sink_); 266 submit_frames_with_current_compositor_frame_sink_);
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
421 return false; 429 return false;
422 430
423 // If we want to force activation, do so ASAP. 431 // If we want to force activation, do so ASAP.
424 if (PendingActivationsShouldBeForced()) 432 if (PendingActivationsShouldBeForced())
425 return true; 433 return true;
426 434
427 // At this point, only activate if we are ready to activate. 435 // At this point, only activate if we are ready to activate.
428 return pending_tree_is_ready_for_activation_; 436 return pending_tree_is_ready_for_activation_;
429 } 437 }
430 438
439 bool SchedulerStateMachine::ShouldNotifyBeginMainFrameNotSent() const {
440 // This method returns true if most of the conditions for sending a
441 // BeginMainFrame are met, but one is not actually requested. This gives the
442 // main thread the chance to do something else.
443
444 // Don't notify if a BeginMainFrame has already been requested or is in
445 // progress.
446 if (needs_begin_main_frame_ ||
447 begin_main_frame_state_ != BEGIN_MAIN_FRAME_STATE_IDLE)
448 return false;
449
450 // Only notify when we're visible.
451 if (!visible_)
452 return false;
453
454 // There are no BeginImplFrames while BeginFrameSource is paused, meaning
455 // the scheduler should send SendBeginMainFrameNotExpectedSoon instead,
456 // indicating a longer period of inactivity.
457 if (begin_frame_source_paused_)
458 return false;
459
460 // Do not notify that no BeginMainFrame was sent too many times in a single
461 // frame.
462 if (did_notify_begin_main_frame_not_sent_)
463 return false;
464
465 // Do not notify if a commit happened during this frame as the main thread
466 // will already be active and does not need to be woken up to make further
467 // actions. (This occurs if the main frame was scheduled but didn't complete
468 // before the vsync deadline).
469 if (did_commit_during_frame_)
470 return false;
471
472 return true;
473 }
474
431 bool SchedulerStateMachine::CouldSendBeginMainFrame() const { 475 bool SchedulerStateMachine::CouldSendBeginMainFrame() const {
432 if (!needs_begin_main_frame_) 476 if (!needs_begin_main_frame_)
433 return false; 477 return false;
434 478
435 // We can not perform commits if we are not visible. 479 // We can not perform commits if we are not visible.
436 if (!visible_) 480 if (!visible_)
437 return false; 481 return false;
438 482
439 // There are no BeginImplFrames while BeginFrameSource is paused, 483 // There are no BeginImplFrames while BeginFrameSource is paused,
440 // so should also stop BeginMainFrames. 484 // so should also stop BeginMainFrames.
441 if (begin_frame_source_paused_) 485 if (begin_frame_source_paused_)
442 return false; 486 return false;
443 487
444 // Do not make a new commits when it is deferred. 488 // Do not make a new commits when it is deferred.
445 if (defer_commits_) 489 if (defer_commits_)
446 return false; 490 return false;
447 491
448 return true; 492 return true;
449 } 493 }
450 494
451 bool SchedulerStateMachine::ShouldSendBeginMainFrame() const { 495 bool SchedulerStateMachine::ShouldSendBeginMainFrame() const {
452 if (!CouldSendBeginMainFrame()) 496 if (!CouldSendBeginMainFrame())
453 return false; 497 return false;
454 498
455 // Do not send begin main frame too many times in a single frame or before 499 // Do not send begin main frame too many times in a single frame or before
456 // the first BeginFrame. 500 // the first BeginFrame.
457 if (send_begin_main_frame_funnel_) 501 if (did_send_begin_main_frame_for_current_frame_)
458 return false; 502 return false;
459 503
460 // Only send BeginMainFrame when there isn't another commit pending already. 504 // Only send BeginMainFrame when there isn't another commit pending already.
461 // Other parts of the state machine indirectly defer the BeginMainFrame 505 // Other parts of the state machine indirectly defer the BeginMainFrame
462 // by transitioning to WAITING commit states rather than going 506 // by transitioning to WAITING commit states rather than going
463 // immediately to IDLE. 507 // immediately to IDLE.
464 if (begin_main_frame_state_ != BEGIN_MAIN_FRAME_STATE_IDLE) 508 if (begin_main_frame_state_ != BEGIN_MAIN_FRAME_STATE_IDLE)
465 return false; 509 return false;
466 510
467 // MFBA is disabled and we are waiting for previous activation. 511 // MFBA is disabled and we are waiting for previous activation.
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
591 if (ShouldPerformImplSideInvalidation()) 635 if (ShouldPerformImplSideInvalidation())
592 return ACTION_PERFORM_IMPL_SIDE_INVALIDATION; 636 return ACTION_PERFORM_IMPL_SIDE_INVALIDATION;
593 if (ShouldPrepareTiles()) 637 if (ShouldPrepareTiles())
594 return ACTION_PREPARE_TILES; 638 return ACTION_PREPARE_TILES;
595 if (ShouldSendBeginMainFrame()) 639 if (ShouldSendBeginMainFrame())
596 return ACTION_SEND_BEGIN_MAIN_FRAME; 640 return ACTION_SEND_BEGIN_MAIN_FRAME;
597 if (ShouldInvalidateCompositorFrameSink()) 641 if (ShouldInvalidateCompositorFrameSink())
598 return ACTION_INVALIDATE_COMPOSITOR_FRAME_SINK; 642 return ACTION_INVALIDATE_COMPOSITOR_FRAME_SINK;
599 if (ShouldBeginCompositorFrameSinkCreation()) 643 if (ShouldBeginCompositorFrameSinkCreation())
600 return ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION; 644 return ACTION_BEGIN_COMPOSITOR_FRAME_SINK_CREATION;
645 if (ShouldNotifyBeginMainFrameNotSent())
646 return ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_SENT;
601 return ACTION_NONE; 647 return ACTION_NONE;
602 } 648 }
603 649
604 bool SchedulerStateMachine::ShouldPerformImplSideInvalidation() const { 650 bool SchedulerStateMachine::ShouldPerformImplSideInvalidation() const {
605 if (!needs_impl_side_invalidation_) 651 if (!needs_impl_side_invalidation_)
606 return false; 652 return false;
607 653
608 if (!CouldCreatePendingTree()) 654 if (!CouldCreatePendingTree())
609 return false; 655 return false;
610 656
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
676 if (!HasInitializedCompositorFrameSink()) 722 if (!HasInitializedCompositorFrameSink())
677 return false; 723 return false;
678 724
679 return true; 725 return true;
680 } 726 }
681 727
682 void SchedulerStateMachine::WillSendBeginMainFrame() { 728 void SchedulerStateMachine::WillSendBeginMainFrame() {
683 DCHECK(!has_pending_tree_ || settings_.main_frame_before_activation_enabled); 729 DCHECK(!has_pending_tree_ || settings_.main_frame_before_activation_enabled);
684 DCHECK(visible_); 730 DCHECK(visible_);
685 DCHECK(!begin_frame_source_paused_); 731 DCHECK(!begin_frame_source_paused_);
686 DCHECK(!send_begin_main_frame_funnel_); 732 DCHECK(!did_send_begin_main_frame_for_current_frame_);
687 begin_main_frame_state_ = BEGIN_MAIN_FRAME_STATE_SENT; 733 begin_main_frame_state_ = BEGIN_MAIN_FRAME_STATE_SENT;
688 needs_begin_main_frame_ = false; 734 needs_begin_main_frame_ = false;
689 send_begin_main_frame_funnel_ = true; 735 did_send_begin_main_frame_for_current_frame_ = true;
690 last_frame_number_begin_main_frame_sent_ = current_frame_number_; 736 last_frame_number_begin_main_frame_sent_ = current_frame_number_;
691 last_begin_frame_sequence_number_begin_main_frame_sent_ = 737 last_begin_frame_sequence_number_begin_main_frame_sent_ =
692 begin_frame_sequence_number_; 738 begin_frame_sequence_number_;
693 } 739 }
694 740
741 void SchedulerStateMachine::WillNotifyBeginMainFrameNotSent() {
742 DCHECK(visible_);
743 DCHECK(!begin_frame_source_paused_);
744 DCHECK(!did_notify_begin_main_frame_not_sent_);
745 did_notify_begin_main_frame_not_sent_ = true;
746 }
747
695 void SchedulerStateMachine::WillCommit(bool commit_has_no_updates) { 748 void SchedulerStateMachine::WillCommit(bool commit_has_no_updates) {
696 bool can_have_pending_tree = 749 bool can_have_pending_tree =
697 commit_has_no_updates && 750 commit_has_no_updates &&
698 (settings_.main_frame_before_activation_enabled || 751 (settings_.main_frame_before_activation_enabled ||
699 current_pending_tree_is_impl_side_); 752 current_pending_tree_is_impl_side_);
700 DCHECK(!has_pending_tree_ || can_have_pending_tree); 753 DCHECK(!has_pending_tree_ || can_have_pending_tree);
701 commit_count_++; 754 commit_count_++;
702 last_commit_had_no_updates_ = commit_has_no_updates; 755 last_commit_had_no_updates_ = commit_has_no_updates;
703 begin_main_frame_state_ = BEGIN_MAIN_FRAME_STATE_IDLE; 756 begin_main_frame_state_ = BEGIN_MAIN_FRAME_STATE_IDLE;
757 did_commit_during_frame_ = true;
704 758
705 if (commit_has_no_updates) { 759 if (commit_has_no_updates) {
706 // Pending tree might still exist from prior commit. 760 // Pending tree might still exist from prior commit.
707 if (has_pending_tree_) { 761 if (has_pending_tree_) {
708 DCHECK(can_have_pending_tree); 762 DCHECK(can_have_pending_tree);
709 last_begin_frame_sequence_number_pending_tree_was_fresh_ = 763 last_begin_frame_sequence_number_pending_tree_was_fresh_ =
710 last_begin_frame_sequence_number_begin_main_frame_sent_; 764 last_begin_frame_sequence_number_begin_main_frame_sent_;
711 } else { 765 } else {
712 if (last_begin_frame_sequence_number_compositor_frame_was_fresh_ == 766 if (last_begin_frame_sequence_number_compositor_frame_was_fresh_ ==
713 last_begin_frame_sequence_number_active_tree_was_fresh_) { 767 last_begin_frame_sequence_number_active_tree_was_fresh_) {
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
1040 1094
1041 begin_impl_frame_state_ = BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME; 1095 begin_impl_frame_state_ = BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME;
1042 current_frame_number_++; 1096 current_frame_number_++;
1043 1097
1044 last_commit_had_no_updates_ = false; 1098 last_commit_had_no_updates_ = false;
1045 did_draw_in_last_frame_ = false; 1099 did_draw_in_last_frame_ = false;
1046 did_submit_in_last_frame_ = false; 1100 did_submit_in_last_frame_ = false;
1047 needs_one_begin_impl_frame_ = false; 1101 needs_one_begin_impl_frame_ = false;
1048 1102
1049 // Clear funnels for any actions we perform during the frame. 1103 // Clear funnels for any actions we perform during the frame.
1050 send_begin_main_frame_funnel_ = false; 1104 did_notify_begin_main_frame_not_sent_ = false;
1105 did_send_begin_main_frame_for_current_frame_ = false;
1106 did_commit_during_frame_ = false;
1051 invalidate_compositor_frame_sink_funnel_ = false; 1107 invalidate_compositor_frame_sink_funnel_ = false;
1052 impl_side_invalidation_funnel_ = false; 1108 impl_side_invalidation_funnel_ = false;
1053 1109
1054 // "Drain" the PrepareTiles funnel. 1110 // "Drain" the PrepareTiles funnel.
1055 if (prepare_tiles_funnel_ > 0) 1111 if (prepare_tiles_funnel_ > 0)
1056 prepare_tiles_funnel_--; 1112 prepare_tiles_funnel_--;
1057 } 1113 }
1058 1114
1059 void SchedulerStateMachine::OnBeginImplFrameDeadline() { 1115 void SchedulerStateMachine::OnBeginImplFrameDeadline() {
1060 begin_impl_frame_state_ = BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE; 1116 begin_impl_frame_state_ = BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE;
(...skipping 17 matching lines...) Expand all
1078 skip_next_begin_main_frame_to_reduce_latency_ = false; 1134 skip_next_begin_main_frame_to_reduce_latency_ = false;
1079 1135
1080 // If a new or undrawn active tree is pending after the deadline, 1136 // If a new or undrawn active tree is pending after the deadline,
1081 // then the main thread is in a high latency mode. 1137 // then the main thread is in a high latency mode.
1082 main_thread_missed_last_deadline_ = 1138 main_thread_missed_last_deadline_ =
1083 CommitPending() || has_pending_tree_ || active_tree_needs_first_draw_; 1139 CommitPending() || has_pending_tree_ || active_tree_needs_first_draw_;
1084 1140
1085 // If we're entering a state where we won't get BeginFrames set all the 1141 // If we're entering a state where we won't get BeginFrames set all the
1086 // funnels so that we don't perform any actions that we shouldn't. 1142 // funnels so that we don't perform any actions that we shouldn't.
1087 if (!BeginFrameNeeded()) 1143 if (!BeginFrameNeeded())
1088 send_begin_main_frame_funnel_ = true; 1144 did_send_begin_main_frame_for_current_frame_ = true;
1089 1145
1090 // Synchronous compositor finishes BeginFrames before triggering their 1146 // Synchronous compositor finishes BeginFrames before triggering their
1091 // deadline. Therefore, we update sequence numbers when becoming idle, before 1147 // deadline. Therefore, we update sequence numbers when becoming idle, before
1092 // the Scheduler sends its BeginFrameAck. 1148 // the Scheduler sends its BeginFrameAck.
1093 if (settings_.using_synchronous_renderer_compositor) 1149 if (settings_.using_synchronous_renderer_compositor)
1094 UpdateBeginFrameSequenceNumbersForBeginFrameDeadline(); 1150 UpdateBeginFrameSequenceNumbersForBeginFrameDeadline();
1095 } 1151 }
1096 1152
1097 SchedulerStateMachine::BeginImplFrameDeadlineMode 1153 SchedulerStateMachine::BeginImplFrameDeadlineMode
1098 SchedulerStateMachine::CurrentBeginImplFrameDeadlineMode() const { 1154 SchedulerStateMachine::CurrentBeginImplFrameDeadlineMode() const {
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
1335 case COMPOSITOR_FRAME_SINK_ACTIVE: 1391 case COMPOSITOR_FRAME_SINK_ACTIVE:
1336 case COMPOSITOR_FRAME_SINK_WAITING_FOR_FIRST_COMMIT: 1392 case COMPOSITOR_FRAME_SINK_WAITING_FOR_FIRST_COMMIT:
1337 case COMPOSITOR_FRAME_SINK_WAITING_FOR_FIRST_ACTIVATION: 1393 case COMPOSITOR_FRAME_SINK_WAITING_FOR_FIRST_ACTIVATION:
1338 return true; 1394 return true;
1339 } 1395 }
1340 NOTREACHED(); 1396 NOTREACHED();
1341 return false; 1397 return false;
1342 } 1398 }
1343 1399
1344 } // namespace cc 1400 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698