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