// 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 <queue>

#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();
  virtual ~SyncControlVSyncProvider();

  virtual void GetVSyncParameters(const UpdateVSyncCallback& callback) OVERRIDE;

 protected:
  virtual bool GetSyncValues(int64* system_time,
                             int64* media_stream_counter,
                             int64* swap_buffer_counter) = 0;

  virtual bool GetMscRate(int32* numerator, int32* denominator) = 0;

 private:
  base::TimeTicks last_timebase_;
  uint64 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<base::TimeDelta> last_computed_intervals_;

  DISALLOW_COPY_AND_ASSIGN(SyncControlVSyncProvider);
};

}  // namespace gfx

#endif  // UI_GL_SYNC_CONTROL_VSYNC_PROVIDER_H_
