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