1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifndef UI_GL_SYNC_CONTROL_VSYNC_PROVIDER_H_ 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define UI_GL_SYNC_CONTROL_VSYNC_PROVIDER_H_ 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <queue> 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/gfx/vsync_provider.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace gfx { 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Base class for providers based on extensions like GLX_OML_sync_control and 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// EGL_CHROMIUM_sync_control. 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class SyncControlVSyncProvider : public VSyncProvider { 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SyncControlVSyncProvider(); 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual ~SyncControlVSyncProvider(); 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void GetVSyncParameters(const UpdateVSyncCallback& callback) OVERRIDE; 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) protected: 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual bool GetSyncValues(int64* system_time, 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int64* media_stream_counter, 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int64* swap_buffer_counter) = 0; 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual bool GetMscRate(int32* numerator, int32* denominator) = 0; 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private: 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::TimeTicks last_timebase_; 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) uint64 last_media_stream_counter_; 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::TimeDelta last_good_interval_; 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool invalid_msc_; 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // A short history of the last few computed intervals. 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // We use this to filter out the noise in the computation resulting 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // from configuration change (monitor reconfiguration, moving windows 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // between monitors, suspend and resume, etc.). 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::queue<base::TimeDelta> last_computed_intervals_; 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SyncControlVSyncProvider); 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace gfx 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif // UI_GL_SYNC_CONTROL_VSYNC_PROVIDER_H_ 48