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

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

Issue 2767933002: [cc] Don't send missed BeginFrames with past deadline.
Patch Set: add ExternalBFS tests, don't check in DelayBasedBFS. Created 3 years, 9 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
« no previous file with comments | « cc/scheduler/begin_frame_source.h ('k') | cc/scheduler/begin_frame_source_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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/begin_frame_source.h" 5 #include "cc/scheduler/begin_frame_source.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/atomic_sequence_num.h" 9 #include "base/atomic_sequence_num.h"
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 // Send a MISSED begin frame if necessary. 357 // Send a MISSED begin frame if necessary.
358 if (missed_begin_frame_args_.IsValid()) { 358 if (missed_begin_frame_args_.IsValid()) {
359 const BeginFrameArgs& last_args = obs->LastUsedBeginFrameArgs(); 359 const BeginFrameArgs& last_args = obs->LastUsedBeginFrameArgs();
360 if (!last_args.IsValid() || 360 if (!last_args.IsValid() ||
361 (missed_begin_frame_args_.frame_time > last_args.frame_time)) { 361 (missed_begin_frame_args_.frame_time > last_args.frame_time)) {
362 DCHECK((missed_begin_frame_args_.source_id != last_args.source_id) || 362 DCHECK((missed_begin_frame_args_.source_id != last_args.source_id) ||
363 (missed_begin_frame_args_.sequence_number > 363 (missed_begin_frame_args_.sequence_number >
364 last_args.sequence_number)) 364 last_args.sequence_number))
365 << "current " << missed_begin_frame_args_.AsValue()->ToString() 365 << "current " << missed_begin_frame_args_.AsValue()->ToString()
366 << ", last " << last_args.AsValue()->ToString(); 366 << ", last " << last_args.AsValue()->ToString();
367 obs->OnBeginFrame(missed_begin_frame_args_); 367 // Avoid issuing missed BeginFrames with a past deadline.
368 if (missed_begin_frame_args_.deadline.is_null() ||
369 missed_begin_frame_args_.deadline > Now()) {
370 obs->OnBeginFrame(missed_begin_frame_args_);
371 }
368 } 372 }
369 } 373 }
370 } 374 }
371 375
372 void ExternalBeginFrameSource::RemoveObserver(BeginFrameObserver* obs) { 376 void ExternalBeginFrameSource::RemoveObserver(BeginFrameObserver* obs) {
373 DCHECK(obs); 377 DCHECK(obs);
374 DCHECK(observers_.find(obs) != observers_.end()); 378 DCHECK(observers_.find(obs) != observers_.end());
375 379
376 observers_.erase(obs); 380 observers_.erase(obs);
377 ack_tracker_.OnObserverRemoved(obs); 381 ack_tracker_.OnObserverRemoved(obs);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 void ExternalBeginFrameSource::FinishFrame() { 439 void ExternalBeginFrameSource::FinishFrame() {
436 frame_active_ = false; 440 frame_active_ = false;
437 441
438 BeginFrameAck ack(missed_begin_frame_args_.source_id, 442 BeginFrameAck ack(missed_begin_frame_args_.source_id,
439 missed_begin_frame_args_.sequence_number, 443 missed_begin_frame_args_.sequence_number,
440 ack_tracker_.LatestConfirmedSequenceNumber(), 0, 444 ack_tracker_.LatestConfirmedSequenceNumber(), 0,
441 ack_tracker_.AnyObserversHadDamage()); 445 ack_tracker_.AnyObserversHadDamage());
442 client_->OnDidFinishFrame(ack); 446 client_->OnDidFinishFrame(ack);
443 } 447 }
444 448
449 base::TimeTicks ExternalBeginFrameSource::Now() const {
450 return base::TimeTicks::Now();
451 }
452
445 } // namespace cc 453 } // namespace cc
OLDNEW
« no previous file with comments | « cc/scheduler/begin_frame_source.h ('k') | cc/scheduler/begin_frame_source_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698