blob: 17eb217dc05bbcef6f1177218c8439b69b1d9a9d [file] [log] [blame]
Avi Drissmane4622aa2022-09-08 20:36:061// Copyright 2013 The Chromium Authors
[email protected]bd5a3742013-09-29 18:06:132// 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 Dorwin3f503b82022-04-20 04:07:037#include "base/check.h"
8
[email protected]bd5a3742013-09-29 18:06:139namespace base {
10
Gabriel Charetteef6cbc22019-08-02 06:24:5911namespace {
12bool g_mock_elapsed_timers_for_test = false;
13} // namespace
14
James Leedb0f34d2023-10-09 10:51:2215ElapsedTimer::ElapsedTimer() : start_time_(TimeTicks::Now()) {}
[email protected]bd5a3742013-09-29 18:06:1316
[email protected]bd5a3742013-09-29 18:06:1317TimeDelta ElapsedTimer::Elapsed() const {
Peter Kasting134ef9af2024-12-28 02:30:0918 if (g_mock_elapsed_timers_for_test) {
Gabriel Charetteef6cbc22019-08-02 06:24:5919 return ScopedMockElapsedTimersForTest::kMockElapsedTime;
Peter Kasting134ef9af2024-12-28 02:30:0920 }
James Leedb0f34d2023-10-09 10:51:2221 return TimeTicks::Now() - start_time_;
[email protected]bd5a3742013-09-29 18:06:1322}
23
Benoît Lizé0af836f2019-05-15 09:44:4124ElapsedThreadTimer::ElapsedThreadTimer()
25 : is_supported_(ThreadTicks::IsSupported()),
26 begin_(is_supported_ ? ThreadTicks::Now() : ThreadTicks()) {}
27
28TimeDelta ElapsedThreadTimer::Elapsed() const {
Peter Kasting134ef9af2024-12-28 02:30:0929 if (!is_supported_) {
Gabriel Charetteef6cbc22019-08-02 06:24:5930 return TimeDelta();
Peter Kasting134ef9af2024-12-28 02:30:0931 }
32 if (g_mock_elapsed_timers_for_test) {
Gabriel Charetteef6cbc22019-08-02 06:24:5933 return ScopedMockElapsedTimersForTest::kMockElapsedTime;
Peter Kasting134ef9af2024-12-28 02:30:0934 }
Gabriel Charetteef6cbc22019-08-02 06:24:5935 return ThreadTicks::Now() - begin_;
36}
37
38// static
39constexpr TimeDelta ScopedMockElapsedTimersForTest::kMockElapsedTime;
40
41ScopedMockElapsedTimersForTest::ScopedMockElapsedTimersForTest() {
42 DCHECK(!g_mock_elapsed_timers_for_test);
43 g_mock_elapsed_timers_for_test = true;
44}
45
46ScopedMockElapsedTimersForTest::~ScopedMockElapsedTimersForTest() {
47 DCHECK(g_mock_elapsed_timers_for_test);
48 g_mock_elapsed_timers_for_test = false;
Benoît Lizé0af836f2019-05-15 09:44:4149}
50
[email protected]bd5a3742013-09-29 18:06:1351} // namespace base