blob: 6f39844f77f64992303edddd4650be34242ab9f5 [file] [log] [blame]
// Copyright 2014 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 COBALT_MEDIA_CAST_TEST_SKEWED_TICK_CLOCK_H_
#define COBALT_MEDIA_CAST_TEST_SKEWED_TICK_CLOCK_H_
#include "base/macros.h"
#include "base/time/tick_clock.h"
#include "base/time/time.h"
namespace cobalt {
namespace media {
namespace cast {
namespace test {
// Wraps a base::TickClock, and lets you change the speed and offset
// of time compared to the wrapped clock. See SetSkew for how usage.
class SkewedTickClock : public base::TickClock {
public:
// Does not take ownership of |clock_|.
explicit SkewedTickClock(base::TickClock* clock_);
// |skew| > 1.0 means clock runs faster.
// |offset| > 0 means clock returns times from the future.
// Note, |offset| is cumulative.
// Also note that changing the skew will never make the clock
// jump forwards or backwards, only changing the offset will
// do that.
void SetSkew(double skew, base::TimeDelta offset);
base::TimeTicks NowTicks() final;
private:
base::TimeTicks SkewTicks(base::TimeTicks now);
base::TickClock* clock_; // Not owned.
double skew_;
base::TimeTicks last_skew_set_time_;
base::TimeTicks skew_clock_at_last_set_;
DISALLOW_COPY_AND_ASSIGN(SkewedTickClock);
};
} // namespace test
} // namespace cast
} // namespace media
} // namespace cobalt
#endif // COBALT_MEDIA_CAST_TEST_SKEWED_TICK_CLOCK_H_