Home | History | Annotate | Download | only in scheduler
      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:
     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:
     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