Avi Drissman | e4622aa | 2022-09-08 20:36:06 | [diff] [blame] | 1 | // Copyright 2013 The Chromium Authors |
[email protected] | bd5a374 | 2013-09-29 18:06:13 | [diff] [blame] | 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 | |||||
David Dorwin | 3f503b8 | 2022-04-20 04:07:03 | [diff] [blame] | 7 | #include "base/check.h" |
8 | |||||
[email protected] | bd5a374 | 2013-09-29 18:06:13 | [diff] [blame] | 9 | namespace base { |
10 | |||||
Gabriel Charette | ef6cbc2 | 2019-08-02 06:24:59 | [diff] [blame] | 11 | namespace { |
12 | bool g_mock_elapsed_timers_for_test = false; | ||||
13 | } // namespace | ||||
14 | |||||
James Lee | db0f34d | 2023-10-09 10:51:22 | [diff] [blame] | 15 | ElapsedTimer::ElapsedTimer() : start_time_(TimeTicks::Now()) {} |
[email protected] | bd5a374 | 2013-09-29 18:06:13 | [diff] [blame] | 16 | |
[email protected] | bd5a374 | 2013-09-29 18:06:13 | [diff] [blame] | 17 | TimeDelta ElapsedTimer::Elapsed() const { |
Peter Kasting | 134ef9af | 2024-12-28 02:30:09 | [diff] [blame] | 18 | if (g_mock_elapsed_timers_for_test) { |
Gabriel Charette | ef6cbc2 | 2019-08-02 06:24:59 | [diff] [blame] | 19 | return ScopedMockElapsedTimersForTest::kMockElapsedTime; |
Peter Kasting | 134ef9af | 2024-12-28 02:30:09 | [diff] [blame] | 20 | } |
James Lee | db0f34d | 2023-10-09 10:51:22 | [diff] [blame] | 21 | return TimeTicks::Now() - start_time_; |
[email protected] | bd5a374 | 2013-09-29 18:06:13 | [diff] [blame] | 22 | } |
23 | |||||
Benoît Lizé | 0af836f | 2019-05-15 09:44:41 | [diff] [blame] | 24 | ElapsedThreadTimer::ElapsedThreadTimer() |
25 | : is_supported_(ThreadTicks::IsSupported()), | ||||
26 | begin_(is_supported_ ? ThreadTicks::Now() : ThreadTicks()) {} | ||||
27 | |||||
28 | TimeDelta ElapsedThreadTimer::Elapsed() const { | ||||
Peter Kasting | 134ef9af | 2024-12-28 02:30:09 | [diff] [blame] | 29 | if (!is_supported_) { |
Gabriel Charette | ef6cbc2 | 2019-08-02 06:24:59 | [diff] [blame] | 30 | return TimeDelta(); |
Peter Kasting | 134ef9af | 2024-12-28 02:30:09 | [diff] [blame] | 31 | } |
32 | if (g_mock_elapsed_timers_for_test) { | ||||
Gabriel Charette | ef6cbc2 | 2019-08-02 06:24:59 | [diff] [blame] | 33 | return ScopedMockElapsedTimersForTest::kMockElapsedTime; |
Peter Kasting | 134ef9af | 2024-12-28 02:30:09 | [diff] [blame] | 34 | } |
Gabriel Charette | ef6cbc2 | 2019-08-02 06:24:59 | [diff] [blame] | 35 | return ThreadTicks::Now() - begin_; |
36 | } | ||||
37 | |||||
38 | // static | ||||
39 | constexpr TimeDelta ScopedMockElapsedTimersForTest::kMockElapsedTime; | ||||
40 | |||||
41 | ScopedMockElapsedTimersForTest::ScopedMockElapsedTimersForTest() { | ||||
42 | DCHECK(!g_mock_elapsed_timers_for_test); | ||||
43 | g_mock_elapsed_timers_for_test = true; | ||||
44 | } | ||||
45 | |||||
46 | ScopedMockElapsedTimersForTest::~ScopedMockElapsedTimersForTest() { | ||||
47 | DCHECK(g_mock_elapsed_timers_for_test); | ||||
48 | g_mock_elapsed_timers_for_test = false; | ||||
Benoît Lizé | 0af836f | 2019-05-15 09:44:41 | [diff] [blame] | 49 | } |
50 | |||||
[email protected] | bd5a374 | 2013-09-29 18:06:13 | [diff] [blame] | 51 | } // namespace base |