| Index: cc/delay_based_time_source.h
|
| diff --git a/cc/delay_based_time_source.h b/cc/delay_based_time_source.h
|
| index 638cbb270ce9b24689d5095baf174ade4f4d1a13..bf183f7aa7313e2ffd2131829f77e6a7d83b773a 100644
|
| --- a/cc/delay_based_time_source.h
|
| +++ b/cc/delay_based_time_source.h
|
| @@ -1,3 +1,79 @@
|
| -// Copyright 2012 The Chromium Authors. All rights reserved.
|
| +// Copyright 2011 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 CCDelayBasedTimeSource_h
|
| +#define CCDelayBasedTimeSource_h
|
| +
|
| +#include "CCTimeSource.h"
|
| +#include "CCTimer.h"
|
| +#include <wtf/PassRefPtr.h>
|
| +
|
| +namespace cc {
|
| +
|
| +class CCThread;
|
| +
|
| +// This timer implements a time source that achieves the specified interval
|
| +// in face of millisecond-precision delayed callbacks and random queueing delays.
|
| +class CCDelayBasedTimeSource : public CCTimeSource, CCTimerClient {
|
| +public:
|
| + static PassRefPtr<CCDelayBasedTimeSource> create(base::TimeDelta interval, CCThread*);
|
| +
|
| + virtual ~CCDelayBasedTimeSource();
|
| +
|
| + virtual void setClient(CCTimeSourceClient* client) OVERRIDE;
|
| +
|
| + // CCTimeSource implementation
|
| + virtual void setTimebaseAndInterval(base::TimeTicks timebase, base::TimeDelta interval) OVERRIDE;
|
| +
|
| + virtual void setActive(bool) OVERRIDE;
|
| + virtual bool active() const OVERRIDE;
|
| +
|
| + // Get the last and next tick times. nextTimeTime() returns null when
|
| + // inactive.
|
| + virtual base::TimeTicks lastTickTime() OVERRIDE;
|
| + virtual base::TimeTicks nextTickTime() OVERRIDE;
|
| +
|
| + // CCTimerClient implementation.
|
| + virtual void onTimerFired() OVERRIDE;
|
| +
|
| + // Virtual for testing.
|
| + virtual base::TimeTicks now() const;
|
| +
|
| +protected:
|
| + CCDelayBasedTimeSource(base::TimeDelta interval, CCThread*);
|
| + base::TimeTicks nextTickTarget(base::TimeTicks now);
|
| + void postNextTickTask(base::TimeTicks now);
|
| +
|
| + enum State {
|
| + STATE_INACTIVE,
|
| + STATE_STARTING,
|
| + STATE_ACTIVE,
|
| + };
|
| +
|
| + struct Parameters {
|
| + Parameters(base::TimeDelta interval, base::TimeTicks tickTarget)
|
| + : interval(interval), tickTarget(tickTarget)
|
| + { }
|
| + base::TimeDelta interval;
|
| + base::TimeTicks tickTarget;
|
| + };
|
| +
|
| + CCTimeSourceClient* m_client;
|
| + bool m_hasTickTarget;
|
| + base::TimeTicks m_lastTickTime;
|
| +
|
| + // m_currentParameters should only be written by postNextTickTask.
|
| + // m_nextParameters will take effect on the next call to postNextTickTask.
|
| + // Maintaining a pending set of parameters allows nextTickTime() to always
|
| + // reflect the actual time we expect onTimerFired to be called.
|
| + Parameters m_currentParameters;
|
| + Parameters m_nextParameters;
|
| +
|
| + State m_state;
|
| + CCThread* m_thread;
|
| + CCTimer m_timer;
|
| +};
|
| +
|
| +}
|
| +#endif // CCDelayBasedTimeSource_h
|
|
|