Chromium Code Reviews| Index: ui/android/window_android.cc |
| diff --git a/ui/android/window_android.cc b/ui/android/window_android.cc |
| index 79472befe6973cb2f905d9ef992650f92122fd6a..69c6f5c25fbfa5bf4cc9b33ab5372cc4892b86c7 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_; |
| }; |
| @@ -67,6 +68,8 @@ void WindowAndroid::WindowBeginFrameSource::AddObserver( |
| cc::BeginFrameArgs last_args = obs->LastUsedBeginFrameArgs(); |
| if (!last_args.IsValid() || |
| last_args.frame_time < last_begin_frame_args_.frame_time) { |
| + DCHECK(last_args.sequence_number < |
|
brianderson
2016/12/16 17:53:38
Is it possible for the source id to change?
If yes
Eric Seckler
2016/12/20 12:52:29
I think you're right, the observer could switch wi
|
| + 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 +98,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 |