OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 // | 4 // |
5 // QuicTime represents one point in time, stored in microsecond resolution. | 5 // QuicTime represents one point in time, stored in microsecond resolution. |
6 // QuicTime is monotonically increasing, even across system clock adjustments. | 6 // QuicTime is monotonically increasing, even across system clock adjustments. |
7 // The epoch (time 0) of QuicTime is unspecified. | 7 // The epoch (time 0) of QuicTime is unspecified. |
8 // | 8 // |
9 // This implementation wraps the classes base::TimeTicks and base::TimeDelta. | 9 // This implementation wraps the classes base::TimeTicks and base::TimeDelta. |
10 | 10 |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 | 63 |
64 // Converts the time offset to a rounded number of seconds. | 64 // Converts the time offset to a rounded number of seconds. |
65 inline int64_t ToSeconds() const { return time_offset_ / 1000 / 1000; } | 65 inline int64_t ToSeconds() const { return time_offset_ / 1000 / 1000; } |
66 | 66 |
67 // Converts the time offset to a rounded number of milliseconds. | 67 // Converts the time offset to a rounded number of milliseconds. |
68 inline int64_t ToMilliseconds() const { return time_offset_ / 1000; } | 68 inline int64_t ToMilliseconds() const { return time_offset_ / 1000; } |
69 | 69 |
70 // Converts the time offset to a rounded number of microseconds. | 70 // Converts the time offset to a rounded number of microseconds. |
71 inline int64_t ToMicroseconds() const { return time_offset_; } | 71 inline int64_t ToMicroseconds() const { return time_offset_; } |
72 | 72 |
73 inline Delta Add(Delta delta) const WARN_UNUSED_RESULT { | |
74 return Delta(time_offset_ + delta.time_offset_); | |
75 } | |
76 | |
77 inline Delta Subtract(Delta delta) const WARN_UNUSED_RESULT { | |
78 return Delta(time_offset_ - delta.time_offset_); | |
79 } | |
80 | |
81 inline Delta Multiply(int i) const WARN_UNUSED_RESULT { | |
82 return Delta(time_offset_ * i); | |
83 } | |
84 | |
85 inline Delta Multiply(double d) const WARN_UNUSED_RESULT { | |
86 return Delta(time_offset_ * d); | |
87 } | |
88 | |
89 // Returns the larger delta of time1 and time2. | 73 // Returns the larger delta of time1 and time2. |
90 static inline Delta Max(Delta delta1, Delta delta2) { | 74 static inline Delta Max(Delta delta1, Delta delta2) { |
91 return delta1 < delta2 ? delta2 : delta1; | 75 return delta1 < delta2 ? delta2 : delta1; |
92 } | 76 } |
93 | 77 |
94 // Returns the smaller delta of time1 and time2. | 78 // Returns the smaller delta of time1 and time2. |
95 static inline Delta Min(Delta delta1, Delta delta2) { | 79 static inline Delta Min(Delta delta1, Delta delta2) { |
96 return delta1 < delta2 ? delta1 : delta2; | 80 return delta1 < delta2 ? delta1 : delta2; |
97 } | 81 } |
98 | 82 |
99 inline bool IsZero() const { return time_offset_ == 0; } | 83 inline bool IsZero() const { return time_offset_ == 0; } |
100 | 84 |
101 inline bool IsInfinite() const { | 85 inline bool IsInfinite() const { |
102 return time_offset_ == kQuicInfiniteTimeUs; | 86 return time_offset_ == kQuicInfiniteTimeUs; |
103 } | 87 } |
104 | 88 |
105 private: | 89 private: |
106 base::TimeDelta delta_; | 90 base::TimeDelta delta_; |
107 friend inline bool operator==(QuicTime::Delta lhs, QuicTime::Delta rhs); | 91 friend inline bool operator==(QuicTime::Delta lhs, QuicTime::Delta rhs); |
108 friend inline bool operator<(QuicTime::Delta lhs, QuicTime::Delta rhs); | 92 friend inline bool operator<(QuicTime::Delta lhs, QuicTime::Delta rhs); |
109 friend inline QuicTime::Delta operator<<(QuicTime::Delta lhs, size_t rhs); | 93 friend inline QuicTime::Delta operator<<(QuicTime::Delta lhs, size_t rhs); |
110 friend inline QuicTime::Delta operator>>(QuicTime::Delta lhs, size_t rhs); | 94 friend inline QuicTime::Delta operator>>(QuicTime::Delta lhs, size_t rhs); |
111 | 95 |
112 // Highest number of microseconds that DateTimeOffset can hold. | 96 friend inline QuicTime::Delta operator+(QuicTime::Delta lhs, |
113 static const int64_t kQuicInfiniteTimeUs = INT64_C(0x7fffffffffffffff) / 10; | 97 QuicTime::Delta rhs); |
| 98 friend inline QuicTime::Delta operator-(QuicTime::Delta lhs, |
| 99 QuicTime::Delta rhs); |
| 100 friend inline QuicTime::Delta operator*(QuicTime::Delta lhs, int rhs); |
| 101 friend inline QuicTime::Delta operator*(QuicTime::Delta lhs, double rhs); |
| 102 |
| 103 friend inline QuicTime operator+(QuicTime lhs, QuicTime::Delta rhs); |
| 104 friend inline QuicTime operator-(QuicTime lhs, QuicTime::Delta rhs); |
| 105 friend inline QuicTime::Delta operator-(QuicTime lhs, QuicTime rhs); |
| 106 |
| 107 static const int64_t kQuicInfiniteTimeUs = |
| 108 std::numeric_limits<int64_t>::max(); |
114 | 109 |
115 explicit QUICTIME_CONSTEXPR Delta(int64_t time_offset) | 110 explicit QUICTIME_CONSTEXPR Delta(int64_t time_offset) |
116 : time_offset_(time_offset) {} | 111 : time_offset_(time_offset) {} |
117 | 112 |
118 int64_t time_offset_; | 113 int64_t time_offset_; |
119 friend class QuicTime; | 114 friend class QuicTime; |
120 friend class QuicClock; | 115 friend class QuicClock; |
121 }; | 116 }; |
122 | 117 |
123 explicit QuicTime(base::TimeTicks ticks) : time_(ticks.ToInternalValue()) {} | 118 explicit QuicTime(base::TimeTicks ticks) : time_(ticks.ToInternalValue()) {} |
(...skipping 13 matching lines...) Expand all Loading... |
137 } | 132 } |
138 | 133 |
139 // Produce the internal value to be used when logging. This value | 134 // Produce the internal value to be used when logging. This value |
140 // represents the number of microseconds since some epoch. It may | 135 // represents the number of microseconds since some epoch. It may |
141 // be the UNIX epoch on some platforms. On others, it may | 136 // be the UNIX epoch on some platforms. On others, it may |
142 // be a CPU ticks based value. | 137 // be a CPU ticks based value. |
143 inline int64_t ToDebuggingValue() const { return time_; } | 138 inline int64_t ToDebuggingValue() const { return time_; } |
144 | 139 |
145 inline bool IsInitialized() const { return 0 != time_; } | 140 inline bool IsInitialized() const { return 0 != time_; } |
146 | 141 |
147 inline QuicTime Add(Delta delta) const WARN_UNUSED_RESULT { | |
148 return QuicTime(time_ + delta.time_offset_); | |
149 } | |
150 | |
151 inline QuicTime Subtract(Delta delta) const WARN_UNUSED_RESULT { | |
152 return QuicTime(time_ - delta.time_offset_); | |
153 } | |
154 | |
155 inline Delta Subtract(QuicTime other) const WARN_UNUSED_RESULT { | |
156 return Delta(time_ - other.time_); | |
157 } | |
158 | |
159 private: | 142 private: |
160 friend inline bool operator==(QuicTime lhs, QuicTime rhs); | 143 friend inline bool operator==(QuicTime lhs, QuicTime rhs); |
161 friend inline bool operator<(QuicTime lhs, QuicTime rhs); | 144 friend inline bool operator<(QuicTime lhs, QuicTime rhs); |
162 friend class QuicClock; | 145 friend inline QuicTime operator+(QuicTime lhs, QuicTime::Delta rhs); |
163 friend class QuicClockTest; | 146 friend inline QuicTime operator-(QuicTime lhs, QuicTime::Delta rhs); |
| 147 friend inline QuicTime::Delta operator-(QuicTime lhs, QuicTime rhs); |
164 | 148 |
165 explicit QUICTIME_CONSTEXPR QuicTime(int64_t time) : time_(time) {} | 149 explicit QUICTIME_CONSTEXPR QuicTime(int64_t time) : time_(time) {} |
166 | 150 |
167 int64_t time_; | 151 int64_t time_; |
168 }; | 152 }; |
169 | 153 |
170 // A QuicWallTime represents an absolute time that is globally consistent. In | 154 // A QuicWallTime represents an absolute time that is globally consistent. In |
171 // practice, clock-skew means that comparing values from different machines | 155 // practice, clock-skew means that comparing values from different machines |
172 // requires some flexibility in interpretation. | 156 // requires some flexibility. |
173 class NET_EXPORT_PRIVATE QuicWallTime { | 157 class NET_EXPORT_PRIVATE QuicWallTime { |
174 public: | 158 public: |
175 // FromUNIXSeconds constructs a QuicWallTime from a count of the seconds | 159 // FromUNIXSeconds constructs a QuicWallTime from a count of the seconds |
176 // since the UNIX epoch. | 160 // since the UNIX epoch. |
177 static QUICTIME_CONSTEXPR QuicWallTime FromUNIXSeconds(uint64_t seconds) { | 161 static QUICTIME_CONSTEXPR QuicWallTime FromUNIXSeconds(uint64_t seconds) { |
178 return QuicWallTime(seconds * 1000000); | 162 return QuicWallTime(seconds * 1000000); |
179 } | 163 } |
180 | 164 |
181 static QUICTIME_CONSTEXPR QuicWallTime | 165 static QUICTIME_CONSTEXPR QuicWallTime |
182 FromUNIXMicroseconds(uint64_t microseconds) { | 166 FromUNIXMicroseconds(uint64_t microseconds) { |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
256 inline bool operator>(QuicTime lhs, QuicTime rhs) { | 240 inline bool operator>(QuicTime lhs, QuicTime rhs) { |
257 return rhs < lhs; | 241 return rhs < lhs; |
258 } | 242 } |
259 inline bool operator<=(QuicTime lhs, QuicTime rhs) { | 243 inline bool operator<=(QuicTime lhs, QuicTime rhs) { |
260 return !(rhs < lhs); | 244 return !(rhs < lhs); |
261 } | 245 } |
262 inline bool operator>=(QuicTime lhs, QuicTime rhs) { | 246 inline bool operator>=(QuicTime lhs, QuicTime rhs) { |
263 return !(lhs < rhs); | 247 return !(lhs < rhs); |
264 } | 248 } |
265 | 249 |
| 250 // Non-member arithmetic operators for QuicTime::Delta. |
| 251 inline QuicTime::Delta operator+(QuicTime::Delta lhs, QuicTime::Delta rhs) { |
| 252 return QuicTime::Delta(lhs.time_offset_ + rhs.time_offset_); |
| 253 } |
| 254 inline QuicTime::Delta operator-(QuicTime::Delta lhs, QuicTime::Delta rhs) { |
| 255 return QuicTime::Delta(lhs.time_offset_ - rhs.time_offset_); |
| 256 } |
| 257 inline QuicTime::Delta operator*(QuicTime::Delta lhs, int rhs) { |
| 258 return QuicTime::Delta(lhs.time_offset_ * rhs); |
| 259 } |
| 260 inline QuicTime::Delta operator*(QuicTime::Delta lhs, double rhs) { |
| 261 return QuicTime::Delta(lhs.time_offset_ * rhs); |
| 262 } |
| 263 inline QuicTime::Delta operator*(int lhs, QuicTime::Delta rhs) { |
| 264 return rhs * lhs; |
| 265 } |
| 266 inline QuicTime::Delta operator*(double lhs, QuicTime::Delta rhs) { |
| 267 return rhs * lhs; |
| 268 } |
| 269 |
| 270 // Non-member arithmetic operators for QuicTime and QuicTime::Delta. |
| 271 inline QuicTime operator+(QuicTime lhs, QuicTime::Delta rhs) { |
| 272 return QuicTime(lhs.time_ + rhs.time_offset_); |
| 273 } |
| 274 inline QuicTime operator-(QuicTime lhs, QuicTime::Delta rhs) { |
| 275 return QuicTime(lhs.time_ - rhs.time_offset_); |
| 276 } |
| 277 inline QuicTime::Delta operator-(QuicTime lhs, QuicTime rhs) { |
| 278 return QuicTime::Delta(lhs.time_ - rhs.time_); |
| 279 } |
| 280 |
266 } // namespace net | 281 } // namespace net |
267 | 282 |
268 #endif // NET_QUIC_QUIC_TIME_H_ | 283 #endif // NET_QUIC_QUIC_TIME_H_ |
OLD | NEW |