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_GFX_VSYNC_PROVIDER_H_
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define UI_GFX_VSYNC_PROVIDER_H_
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/callback.h"
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/time/time.h"
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/gfx/gfx_export.h"
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace gfx {
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class GFX_EXPORT VSyncProvider {
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public:
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual ~VSyncProvider() {}
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  typedef base::Callback<
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      void(const base::TimeTicks timebase, const base::TimeDelta interval)>
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      UpdateVSyncCallback;
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Get the time of the most recent screen refresh, along with the time
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // between consecutive refreshes. The callback is called as soon as
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // the data is available: it could be immediately from this method,
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // later via a PostTask to the current MessageLoop, or never (if we have
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // no data source). We provide the strong guarantee that the callback will
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // not be called once the instance of this class is destroyed.
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void GetVSyncParameters(const UpdateVSyncCallback& callback) = 0;
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace gfx
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif  // UI_GFX_VSYNC_PROVIDER_H_
34