• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef CC_SCHEDULER_TIME_SOURCE_H_
6 #define CC_SCHEDULER_TIME_SOURCE_H_
7 
8 #include "base/memory/ref_counted.h"
9 #include "base/time/time.h"
10 #include "cc/base/cc_export.h"
11 
12 namespace cc {
13 
14 class TimeSourceClient {
15  public:
16   virtual void OnTimerTick() = 0;
17 
18  protected:
~TimeSourceClient()19   virtual ~TimeSourceClient() {}
20 };
21 
22 // An generic interface for getting a reliably-ticking timesource of
23 // a specified rate.
24 //
25 // Be sure to call SetActive(false) before releasing your reference to the
26 // timer, or it will keep on ticking!
27 class CC_EXPORT TimeSource : public base::RefCounted<TimeSource> {
28  public:
29   virtual void SetClient(TimeSourceClient* client) = 0;
30 
31   // If transitioning from not active to active, SetActive will return the
32   // timestamp of the most recenly missed tick that did not have OnTimerTick
33   // called.
34   virtual base::TimeTicks SetActive(bool active) = 0;
35 
36   virtual bool Active() const = 0;
37   virtual void SetTimebaseAndInterval(base::TimeTicks timebase,
38                                       base::TimeDelta interval) = 0;
39   virtual base::TimeTicks LastTickTime() = 0;
40   virtual base::TimeTicks NextTickTime() = 0;
41 
42  protected:
~TimeSource()43   virtual ~TimeSource() {}
44 
45  private:
46   friend class base::RefCounted<TimeSource>;
47 };
48 
49 }  // namespace cc
50 
51 #endif  // CC_SCHEDULER_TIME_SOURCE_H_
52