xref: /aosp_15_r20/external/cronet/base/timer/elapsed_timer.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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()15 ElapsedTimer::ElapsedTimer() : start_time_(TimeTicks::Now()) {}
16 
ElapsedTimer(ElapsedTimer && other)17 ElapsedTimer::ElapsedTimer(ElapsedTimer&& other)
18     : start_time_(other.start_time_) {}
19 
operator =(ElapsedTimer && other)20 void ElapsedTimer::operator=(ElapsedTimer&& other) {
21   start_time_ = other.start_time_;
22 }
23 
Elapsed() const24 TimeDelta ElapsedTimer::Elapsed() const {
25   if (g_mock_elapsed_timers_for_test)
26     return ScopedMockElapsedTimersForTest::kMockElapsedTime;
27   return TimeTicks::Now() - start_time_;
28 }
29 
ElapsedThreadTimer()30 ElapsedThreadTimer::ElapsedThreadTimer()
31     : is_supported_(ThreadTicks::IsSupported()),
32       begin_(is_supported_ ? ThreadTicks::Now() : ThreadTicks()) {}
33 
Elapsed() const34 TimeDelta 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()45 ScopedMockElapsedTimersForTest::ScopedMockElapsedTimersForTest() {
46   DCHECK(!g_mock_elapsed_timers_for_test);
47   g_mock_elapsed_timers_for_test = true;
48 }
49 
~ScopedMockElapsedTimersForTest()50 ScopedMockElapsedTimersForTest::~ScopedMockElapsedTimersForTest() {
51   DCHECK(g_mock_elapsed_timers_for_test);
52   g_mock_elapsed_timers_for_test = false;
53 }
54 
55 }  // namespace base
56