Index: ui/android/window_android.cc |
diff --git a/ui/android/window_android.cc b/ui/android/window_android.cc |
index 79472befe6973cb2f905d9ef992650f92122fd6a..848d60668e1343f442b4c3bfd87ec47439aead7a 100644 |
--- a/ui/android/window_android.cc |
+++ b/ui/android/window_android.cc |
@@ -30,6 +30,7 @@ class WindowAndroid::WindowBeginFrameSource : public cc::BeginFrameSource { |
explicit WindowBeginFrameSource(WindowAndroid* window) |
: window_(window), |
observer_count_(0), |
+ next_sequence_number_(cc::BeginFrameArgs::kStartingFrameNumber), |
in_on_vsync_(false) {} |
~WindowBeginFrameSource() override {} |
@@ -40,14 +41,14 @@ class WindowAndroid::WindowBeginFrameSource : public cc::BeginFrameSource { |
size_t remaining_frames) override {} |
bool IsThrottled() const override { return true; } |
- void OnVSync(base::TimeTicks frame_time, |
- base::TimeDelta vsync_period); |
+ void OnVSync(base::TimeTicks frame_time, base::TimeDelta vsync_period); |
private: |
WindowAndroid* const window_; |
base::ObserverList<cc::BeginFrameObserver> observers_; |
int observer_count_; |
cc::BeginFrameArgs last_begin_frame_args_; |
+ uint64_t next_sequence_number_; |
bool in_on_vsync_; |
}; |
@@ -66,7 +67,7 @@ void WindowAndroid::WindowBeginFrameSource::AddObserver( |
if (!in_on_vsync_ && last_begin_frame_args_.IsValid()) { |
cc::BeginFrameArgs last_args = obs->LastUsedBeginFrameArgs(); |
if (!last_args.IsValid() || |
- last_args.frame_time < last_begin_frame_args_.frame_time) { |
+ last_args.sequence_number < last_begin_frame_args_.sequence_number) { |
last_begin_frame_args_.type = cc::BeginFrameArgs::MISSED; |
// TODO(crbug.com/602485): A deadline doesn't make too much sense |
// for a missed BeginFrame (the intention rather is 'immediately'), |
@@ -95,9 +96,9 @@ void WindowAndroid::WindowBeginFrameSource::OnVSync( |
base::TimeDelta vsync_period) { |
// frame time is in the past, so give the next vsync period as the deadline. |
base::TimeTicks deadline = frame_time + vsync_period; |
- last_begin_frame_args_ = |
- cc::BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, frame_time, deadline, |
- vsync_period, cc::BeginFrameArgs::NORMAL); |
+ last_begin_frame_args_ = cc::BeginFrameArgs::Create( |
+ BEGINFRAME_FROM_HERE, source_id(), next_sequence_number_++, frame_time, |
+ deadline, vsync_period, cc::BeginFrameArgs::NORMAL); |
DCHECK(last_begin_frame_args_.IsValid()); |
// We support adding/removing observers during observer iteration through |