1 // Copyright 2013 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/timer/elapsed_timer.h" 6 7 #include "base/check.h" 8 9 namespace base { 10 11 namespace { 12 bool g_mock_elapsed_timers_for_test = false; 13 } // namespace 14 ElapsedTimer()15ElapsedTimer::ElapsedTimer() : start_time_(TimeTicks::Now()) {} 16 ElapsedTimer(ElapsedTimer && other)17ElapsedTimer::ElapsedTimer(ElapsedTimer&& other) 18 : start_time_(other.start_time_) {} 19 operator =(ElapsedTimer && other)20void ElapsedTimer::operator=(ElapsedTimer&& other) { 21 start_time_ = other.start_time_; 22 } 23 Elapsed() const24TimeDelta ElapsedTimer::Elapsed() const { 25 if (g_mock_elapsed_timers_for_test) 26 return ScopedMockElapsedTimersForTest::kMockElapsedTime; 27 return TimeTicks::Now() - start_time_; 28 } 29 ElapsedThreadTimer()30ElapsedThreadTimer::ElapsedThreadTimer() 31 : is_supported_(ThreadTicks::IsSupported()), 32 begin_(is_supported_ ? ThreadTicks::Now() : ThreadTicks()) {} 33 Elapsed() const34TimeDelta ElapsedThreadTimer::Elapsed() const { 35 if (!is_supported_) 36 return TimeDelta(); 37 if (g_mock_elapsed_timers_for_test) 38 return ScopedMockElapsedTimersForTest::kMockElapsedTime; 39 return ThreadTicks::Now() - begin_; 40 } 41 42 // static 43 constexpr TimeDelta ScopedMockElapsedTimersForTest::kMockElapsedTime; 44 ScopedMockElapsedTimersForTest()45ScopedMockElapsedTimersForTest::ScopedMockElapsedTimersForTest() { 46 DCHECK(!g_mock_elapsed_timers_for_test); 47 g_mock_elapsed_timers_for_test = true; 48 } 49 ~ScopedMockElapsedTimersForTest()50ScopedMockElapsedTimersForTest::~ScopedMockElapsedTimersForTest() { 51 DCHECK(g_mock_elapsed_timers_for_test); 52 g_mock_elapsed_timers_for_test = false; 53 } 54 55 } // namespace base 56