| 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 |
| 11 #ifndef NET_QUIC_CORE_QUIC_TIME_H_ | 11 #ifndef NET_QUIC_CORE_QUIC_TIME_H_ |
| 12 #define NET_QUIC_CORE_QUIC_TIME_H_ | 12 #define NET_QUIC_CORE_QUIC_TIME_H_ |
| 13 | 13 |
| 14 #include <cmath> | 14 #include <cmath> |
| 15 #include <cstdint> | 15 #include <cstdint> |
| 16 #include <limits> | 16 #include <limits> |
| 17 #include <ostream> | 17 #include <ostream> |
| 18 | 18 |
| 19 #include "base/compiler_specific.h" | 19 #include "base/compiler_specific.h" |
| 20 #include "base/time/time.h" | 20 #include "base/time/time.h" |
| 21 #include "net/quic/platform/api/quic_export.h" | 21 #include "net/quic/platform/api/quic_export.h" |
| 22 | 22 |
| 23 #define QUICTIME_CONSTEXPR inline | 23 #define QUICTIME_CONSTEXPR inline |
| 24 | 24 |
| 25 namespace net { | 25 namespace net { |
| 26 | 26 |
| 27 class QuicClock; |
| 28 |
| 27 // A QuicTime is a purely relative time. QuicTime values from different clocks | 29 // A QuicTime is a purely relative time. QuicTime values from different clocks |
| 28 // cannot be compared to each other. If you need an absolute time, see | 30 // cannot be compared to each other. If you need an absolute time, see |
| 29 // QuicWallTime, below. | 31 // QuicWallTime, below. |
| 30 class QUIC_EXPORT_PRIVATE QuicTime { | 32 class QUIC_EXPORT_PRIVATE QuicTime { |
| 31 public: | 33 public: |
| 32 // A QuicTime::Delta represents the signed difference between two points in | 34 // A QuicTime::Delta represents the signed difference between two points in |
| 33 // time, stored in microsecond resolution. | 35 // time, stored in microsecond resolution. |
| 34 class QUIC_EXPORT_PRIVATE Delta { | 36 class QUIC_EXPORT_PRIVATE Delta { |
| 35 public: | 37 public: |
| 36 explicit Delta(base::TimeDelta delta); | 38 explicit Delta(base::TimeDelta delta); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 97 std::numeric_limits<int64_t>::max(); | 99 std::numeric_limits<int64_t>::max(); |
| 98 | 100 |
| 99 explicit QUICTIME_CONSTEXPR Delta(int64_t time_offset) | 101 explicit QUICTIME_CONSTEXPR Delta(int64_t time_offset) |
| 100 : time_offset_(time_offset) {} | 102 : time_offset_(time_offset) {} |
| 101 | 103 |
| 102 int64_t time_offset_; | 104 int64_t time_offset_; |
| 103 friend class QuicTime; | 105 friend class QuicTime; |
| 104 friend class QuicClock; | 106 friend class QuicClock; |
| 105 }; | 107 }; |
| 106 | 108 |
| 107 explicit QuicTime(base::TimeTicks ticks) : time_(ticks.ToInternalValue()) {} | |
| 108 | |
| 109 // Creates a new QuicTime with an internal value of 0. IsInitialized() | 109 // Creates a new QuicTime with an internal value of 0. IsInitialized() |
| 110 // will return false for these times. | 110 // will return false for these times. |
| 111 static QUICTIME_CONSTEXPR QuicTime Zero() { return QuicTime(0); } | 111 static QUICTIME_CONSTEXPR QuicTime Zero() { return QuicTime(0); } |
| 112 | 112 |
| 113 // Creates a new QuicTime with an infinite time. | 113 // Creates a new QuicTime with an infinite time. |
| 114 static QUICTIME_CONSTEXPR QuicTime Infinite() { | 114 static QUICTIME_CONSTEXPR QuicTime Infinite() { |
| 115 return QuicTime(Delta::kQuicInfiniteTimeUs); | 115 return QuicTime(Delta::kQuicInfiniteTimeUs); |
| 116 } | 116 } |
| 117 | 117 |
| 118 // Produce the internal value to be used when logging. This value | 118 // Produce the internal value to be used when logging. This value |
| 119 // represents the number of microseconds since some epoch. It may | 119 // represents the number of microseconds since some epoch. It may |
| 120 // be the UNIX epoch on some platforms. On others, it may | 120 // be the UNIX epoch on some platforms. On others, it may |
| 121 // be a CPU ticks based value. | 121 // be a CPU ticks based value. |
| 122 inline int64_t ToDebuggingValue() const { return time_; } | 122 inline int64_t ToDebuggingValue() const { return time_; } |
| 123 | 123 |
| 124 inline bool IsInitialized() const { return 0 != time_; } | 124 inline bool IsInitialized() const { return 0 != time_; } |
| 125 | 125 |
| 126 private: | 126 private: |
| 127 friend class QuicClock; |
| 128 |
| 127 friend inline bool operator==(QuicTime lhs, QuicTime rhs); | 129 friend inline bool operator==(QuicTime lhs, QuicTime rhs); |
| 128 friend inline bool operator<(QuicTime lhs, QuicTime rhs); | 130 friend inline bool operator<(QuicTime lhs, QuicTime rhs); |
| 129 friend inline QuicTime operator+(QuicTime lhs, QuicTime::Delta rhs); | 131 friend inline QuicTime operator+(QuicTime lhs, QuicTime::Delta rhs); |
| 130 friend inline QuicTime operator-(QuicTime lhs, QuicTime::Delta rhs); | 132 friend inline QuicTime operator-(QuicTime lhs, QuicTime::Delta rhs); |
| 131 friend inline QuicTime::Delta operator-(QuicTime lhs, QuicTime rhs); | 133 friend inline QuicTime::Delta operator-(QuicTime lhs, QuicTime rhs); |
| 132 | 134 |
| 133 explicit QUICTIME_CONSTEXPR QuicTime(int64_t time) : time_(time) {} | 135 explicit QUICTIME_CONSTEXPR QuicTime(int64_t time) : time_(time) {} |
| 134 | 136 |
| 135 int64_t time_; | 137 int64_t time_; |
| 136 }; | 138 }; |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 | 267 |
| 266 // Override stream output operator for gtest. | 268 // Override stream output operator for gtest. |
| 267 inline std::ostream& operator<<(std::ostream& output, | 269 inline std::ostream& operator<<(std::ostream& output, |
| 268 const QuicTime::Delta delta) { | 270 const QuicTime::Delta delta) { |
| 269 output << delta.ToDebugValue(); | 271 output << delta.ToDebugValue(); |
| 270 return output; | 272 return output; |
| 271 } | 273 } |
| 272 } // namespace net | 274 } // namespace net |
| 273 | 275 |
| 274 #endif // NET_QUIC_CORE_QUIC_TIME_H_ | 276 #endif // NET_QUIC_CORE_QUIC_TIME_H_ |
| OLD | NEW |