diff options
Diffstat (limited to 'media/cast/test/skewed_tick_clock.h')
-rw-r--r-- | media/cast/test/skewed_tick_clock.h | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/media/cast/test/skewed_tick_clock.h b/media/cast/test/skewed_tick_clock.h new file mode 100644 index 0000000..dcb5384 --- /dev/null +++ b/media/cast/test/skewed_tick_clock.h @@ -0,0 +1,44 @@ +// 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 CAST_MEDIA_TEST_SKEWED_TICK_CLOCK_H +#define CAST_MEDIA_TEST_SKEWED_TICK_CLOCK_H + +#include "base/time/tick_clock.h" +#include "base/time/time.h" + +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); + virtual base::TimeTicks NowTicks() OVERRIDE; + + 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 + +#endif // CAST_MEDIA_TEST_SKEWED_TICK_CLOCK_H |