quic_time.cc revision b2df76ea8fec9e32f6f3718986dba0d95315b29c
1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 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/quic_time.h" 6 7#include "base/logging.h" 8 9namespace net { 10 11// Highest number of microseconds that DateTimeOffset can hold. 12const int64 kQuicInfiniteTimeUs = GG_INT64_C(0x7fffffffffffffff) / 10; 13 14QuicTime::Delta::Delta(base::TimeDelta delta) 15 : delta_(delta) { 16} 17 18// static 19QuicTime::Delta QuicTime::Delta::Zero() { 20 return QuicTime::Delta::FromMicroseconds(0); 21} 22 23// static 24QuicTime::Delta QuicTime::Delta::Infinite() { 25 return QuicTime::Delta::FromMicroseconds(kQuicInfiniteTimeUs); 26} 27 28// static 29QuicTime::Delta QuicTime::Delta::FromSeconds(int64 seconds) { 30 return QuicTime::Delta(base::TimeDelta::FromSeconds(seconds)); 31} 32 33// static 34QuicTime::Delta QuicTime::Delta::FromMilliseconds(int64 ms) { 35 return QuicTime::Delta(base::TimeDelta::FromMilliseconds(ms)); 36} 37 38// static 39QuicTime::Delta QuicTime::Delta::FromMicroseconds(int64 us) { 40 return QuicTime::Delta(base::TimeDelta::FromMicroseconds(us)); 41} 42 43int64 QuicTime::Delta::ToSeconds() const { 44 return delta_.InSeconds(); 45} 46 47int64 QuicTime::Delta::ToMilliseconds() const { 48 return delta_.InMilliseconds(); 49} 50 51int64 QuicTime::Delta::ToMicroseconds() const { 52 return delta_.InMicroseconds(); 53} 54 55QuicTime::Delta QuicTime::Delta::Add(const Delta& delta) const { 56 return QuicTime::Delta::FromMicroseconds(ToMicroseconds() + 57 delta.ToMicroseconds()); 58} 59 60QuicTime::Delta QuicTime::Delta::Subtract(const Delta& delta) const { 61 return QuicTime::Delta::FromMicroseconds(ToMicroseconds() - 62 delta.ToMicroseconds()); 63} 64 65bool QuicTime::Delta::IsZero() const { 66 return delta_.InMicroseconds() == 0; 67} 68 69bool QuicTime::Delta::IsInfinite() const { 70 return delta_.InMicroseconds() == kQuicInfiniteTimeUs; 71} 72 73// static 74QuicTime QuicTime::Zero() { 75 return QuicTime(base::TimeTicks()); 76} 77 78QuicTime::QuicTime(base::TimeTicks ticks) 79 : ticks_(ticks) { 80} 81 82int64 QuicTime::ToDebuggingValue() const { 83 return (ticks_ - base::TimeTicks()).InMicroseconds(); 84} 85 86bool QuicTime::IsInitialized() const { 87 return ticks_ != base::TimeTicks(); 88} 89 90QuicTime QuicTime::Add(const Delta& delta) const { 91 return QuicTime(ticks_ + delta.delta_); 92} 93 94QuicTime QuicTime::Subtract(const Delta& delta) const { 95 return QuicTime(ticks_ - delta.delta_); 96} 97 98QuicTime::Delta QuicTime::Subtract(const QuicTime& other) const { 99 return QuicTime::Delta(ticks_ - other.ticks_); 100} 101 102// static 103QuicWallTime QuicWallTime::FromUNIXSeconds(uint64 seconds) { 104 return QuicWallTime(seconds); 105} 106 107uint64 QuicWallTime::ToUNIXSeconds() const { 108 return seconds_; 109} 110 111bool QuicWallTime::IsAfter(QuicWallTime other) const { 112 return seconds_ > other.seconds_; 113} 114 115bool QuicWallTime::IsBefore(QuicWallTime other) const { 116 return seconds_ < other.seconds_; 117} 118 119QuicTime::Delta QuicWallTime::AbsoluteDifference(QuicWallTime other) const { 120 uint64 d; 121 122 if (seconds_ > other.seconds_) { 123 d = seconds_ - other.seconds_; 124 } else { 125 d = other.seconds_ - seconds_; 126 } 127 128 if (d > static_cast<uint64>(kint64max)) { 129 d = kint64max; 130 } 131 return QuicTime::Delta::FromSeconds(d); 132} 133 134QuicWallTime QuicWallTime::Add(QuicTime::Delta delta) const { 135 uint64 seconds = seconds_ + delta.ToSeconds(); 136 if (seconds < seconds_) { 137 seconds = kuint64max; 138 } 139 return QuicWallTime(seconds); 140} 141 142QuicWallTime QuicWallTime::Subtract(QuicTime::Delta delta) const { 143 uint64 seconds = seconds_ - delta.ToSeconds(); 144 if (seconds > seconds_) { 145 seconds = 0; 146 } 147 return QuicWallTime(seconds); 148} 149 150QuicWallTime::QuicWallTime(uint64 seconds) 151 : seconds_(seconds) { 152} 153 154} // namespace net 155