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()13QuicChromiumClock* 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() const22QuicTime 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() const28QuicTime 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() const34QuicWallTime 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)43base::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