// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef UI_GL_SYNC_CONTROL_VSYNC_PROVIDER_H_ #define UI_GL_SYNC_CONTROL_VSYNC_PROVIDER_H_ #include #include #include "base/macros.h" #include "ui/gfx/vsync_provider.h" namespace gfx { // Base class for providers based on extensions like GLX_OML_sync_control and // EGL_CHROMIUM_sync_control. class SyncControlVSyncProvider : public VSyncProvider { public: SyncControlVSyncProvider(); ~SyncControlVSyncProvider() override; void GetVSyncParameters(const UpdateVSyncCallback& callback) override; protected: virtual bool GetSyncValues(int64_t* system_time, int64_t* media_stream_counter, int64_t* swap_buffer_counter) = 0; virtual bool GetMscRate(int32_t* numerator, int32_t* denominator) = 0; private: base::TimeTicks last_timebase_; uint64_t last_media_stream_counter_; base::TimeDelta last_good_interval_; bool invalid_msc_; // A short history of the last few computed intervals. // We use this to filter out the noise in the computation resulting // from configuration change (monitor reconfiguration, moving windows // between monitors, suspend and resume, etc.). std::queue last_computed_intervals_; DISALLOW_COPY_AND_ASSIGN(SyncControlVSyncProvider); }; } // namespace gfx #endif // UI_GL_SYNC_CONTROL_VSYNC_PROVIDER_H_