15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file.
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/test/simple_test_tick_clock.h"
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "media/base/wall_clock_time_source.h"
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace media {
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class WallClockTimeSourceTest : public testing::Test {
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public:
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  WallClockTimeSourceTest() : tick_clock_(new base::SimpleTestTickClock()) {
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    time_source_.SetTickClockForTesting(
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        scoped_ptr<base::TickClock>(tick_clock_));
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual ~WallClockTimeSourceTest() {}
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void AdvanceTimeInSeconds(int seconds) {
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    tick_clock_->Advance(base::TimeDelta::FromSeconds(seconds));
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  int CurrentMediaTimeInSeconds() {
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return time_source_.CurrentMediaTime().InSeconds();
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void SetMediaTimeInSeconds(int seconds) {
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return time_source_.SetMediaTime(base::TimeDelta::FromSeconds(seconds));
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  WallClockTimeSource time_source_;
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private:
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  base::SimpleTestTickClock* tick_clock_;  // Owned by |time_source_|.
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(WallClockTimeSourceTest);
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)};
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(WallClockTimeSourceTest, InitialTimeIsZero) {
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(0, CurrentMediaTimeInSeconds());
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(WallClockTimeSourceTest, InitialTimeIsNotTicking) {
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(0, CurrentMediaTimeInSeconds());
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  AdvanceTimeInSeconds(100);
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(0, CurrentMediaTimeInSeconds());
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(WallClockTimeSourceTest, InitialPlaybackRateIsOne) {
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  time_source_.StartTicking();
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(0, CurrentMediaTimeInSeconds());
535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  AdvanceTimeInSeconds(100);
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(100, CurrentMediaTimeInSeconds());
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(WallClockTimeSourceTest, SetMediaTime) {
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(0, CurrentMediaTimeInSeconds());
595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  SetMediaTimeInSeconds(10);
605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(10, CurrentMediaTimeInSeconds());
615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(WallClockTimeSourceTest, SetPlaybackRate) {
645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  time_source_.StartTicking();
655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  time_source_.SetPlaybackRate(0.5);
675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(0, CurrentMediaTimeInSeconds());
685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  AdvanceTimeInSeconds(10);
695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(5, CurrentMediaTimeInSeconds());
705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  time_source_.SetPlaybackRate(2);
725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(5, CurrentMediaTimeInSeconds());
735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  AdvanceTimeInSeconds(10);
745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(25, CurrentMediaTimeInSeconds());
755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(WallClockTimeSourceTest, StopTicking) {
785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  time_source_.StartTicking();
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(0, CurrentMediaTimeInSeconds());
815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  AdvanceTimeInSeconds(10);
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(10, CurrentMediaTimeInSeconds());
835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  time_source_.StopTicking();
855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  AdvanceTimeInSeconds(10);
875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(10, CurrentMediaTimeInSeconds());
885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace media
91