xref: /aosp_15_r20/external/cronet/net/quic/platform/impl/quic_chromium_clock.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2012 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 "net/quic/platform/impl/quic_chromium_clock.h"
6 
7 #include "base/check_op.h"
8 #include "base/no_destructor.h"
9 #include "base/time/time.h"
10 
11 namespace quic {
12 
GetInstance()13 QuicChromiumClock* QuicChromiumClock::GetInstance() {
14   static base::NoDestructor<QuicChromiumClock> instance;
15   return instance.get();
16 }
17 
18 QuicChromiumClock::QuicChromiumClock() = default;
19 
20 QuicChromiumClock::~QuicChromiumClock() = default;
21 
ApproximateNow() const22 QuicTime QuicChromiumClock::ApproximateNow() const {
23   // At the moment, Chrome does not have a distinct notion of ApproximateNow().
24   // We should consider implementing this using MessageLoop::recent_time_.
25   return Now();
26 }
27 
Now() const28 QuicTime QuicChromiumClock::Now() const {
29   int64_t ticks = (base::TimeTicks::Now() - base::TimeTicks()).InMicroseconds();
30   DCHECK_GE(ticks, 0);
31   return CreateTimeFromMicroseconds(ticks);
32 }
33 
WallNow() const34 QuicWallTime QuicChromiumClock::WallNow() const {
35   const base::TimeDelta time_since_unix_epoch =
36       base::Time::Now() - base::Time::UnixEpoch();
37   int64_t time_since_unix_epoch_micro = time_since_unix_epoch.InMicroseconds();
38   DCHECK_GE(time_since_unix_epoch_micro, 0);
39   return QuicWallTime::FromUNIXMicroseconds(time_since_unix_epoch_micro);
40 }
41 
42 // static
QuicTimeToTimeTicks(QuicTime quic_time)43 base::TimeTicks QuicChromiumClock::QuicTimeToTimeTicks(QuicTime quic_time) {
44   // QuicChromiumClock defines base::TimeTicks() as equal to
45   // quic::QuicTime::Zero(). See QuicChromiumClock::Now() above.
46   QuicTime::Delta offset_from_zero = quic_time - QuicTime::Zero();
47   int64_t offset_from_zero_us = offset_from_zero.ToMicroseconds();
48   return base::TimeTicks() + base::Microseconds(offset_from_zero_us);
49 }
50 
51 }  // namespace quic
52