| // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "net/quic/quic_time.h" | 
 |  | 
 | #include "base/logging.h" | 
 |  | 
 | namespace net { | 
 |  | 
 | // Highest number of microseconds that DateTimeOffset can hold. | 
 | const int64 kQuicInfiniteTimeUs = GG_INT64_C(0x7fffffffffffffff) / 10; | 
 |  | 
 | QuicTime::Delta::Delta() | 
 |     : delta_(base::TimeDelta::FromMicroseconds(0)) { | 
 | } | 
 |  | 
 | QuicTime::Delta::Delta(base::TimeDelta delta) | 
 |     : delta_(delta) { | 
 | } | 
 |  | 
 | QuicTime::Delta QuicTime::Delta::Infinite() { | 
 |   return QuicTime::Delta::FromMicroseconds(kQuicInfiniteTimeUs); | 
 | } | 
 |  | 
 | bool QuicTime::Delta::IsZero() const { | 
 |   return delta_.InMicroseconds() == 0; | 
 | } | 
 |  | 
 | bool QuicTime::Delta::IsInfinite() const { | 
 |   return delta_.InMicroseconds() == kQuicInfiniteTimeUs; | 
 | } | 
 |  | 
 | QuicTime::Delta QuicTime::Delta::FromMilliseconds(int64 ms) { | 
 |   return QuicTime::Delta(base::TimeDelta::FromMilliseconds(ms)); | 
 | } | 
 |  | 
 | QuicTime::Delta QuicTime::Delta::FromMicroseconds(int64 us) { | 
 |   return QuicTime::Delta(base::TimeDelta::FromMicroseconds(us)); | 
 | } | 
 |  | 
 | int64 QuicTime::Delta::ToMilliseconds() const { | 
 |   return delta_.InMilliseconds(); | 
 | } | 
 |  | 
 | int64 QuicTime::Delta::ToMicroseconds() const { | 
 |   return delta_.InMicroseconds(); | 
 | } | 
 |  | 
 | QuicTime::Delta QuicTime::Delta::Add(const Delta& delta) const { | 
 |   return QuicTime::Delta::FromMicroseconds(ToMicroseconds() + | 
 |                                            delta.ToMicroseconds()); | 
 | } | 
 |  | 
 | QuicTime::Delta QuicTime::Delta::Subtract(const Delta& delta) const { | 
 |   return QuicTime::Delta::FromMicroseconds(ToMicroseconds() - | 
 |                                            delta.ToMicroseconds()); | 
 | } | 
 |  | 
 |  | 
 | QuicTime::QuicTime() { | 
 | } | 
 |  | 
 | QuicTime::QuicTime(base::TimeTicks ticks) | 
 |     : ticks_(ticks) { | 
 | } | 
 |  | 
 | QuicTime QuicTime::FromMilliseconds(int64 time_ms) { | 
 |   // DateTime use 100 ns as resolution make sure we don't pass down too high | 
 |   // values. | 
 |   DCHECK(time_ms < kQuicInfiniteTimeUs / 1000); | 
 |   return QuicTime(base::TimeTicks() + | 
 |                   base::TimeDelta::FromMilliseconds(time_ms)); | 
 | } | 
 |  | 
 | QuicTime QuicTime::FromMicroseconds(int64 time_us) { | 
 |   // DateTime use 100 ns as resolution make sure we don't pass down too high | 
 |   // values. | 
 |   DCHECK(time_us < kQuicInfiniteTimeUs); | 
 |   return QuicTime(base::TimeTicks() + | 
 |                   base::TimeDelta::FromMicroseconds(time_us)); | 
 | } | 
 |  | 
 | int64 QuicTime::ToMilliseconds() const { | 
 |   return (ticks_ - base::TimeTicks()).InMilliseconds(); | 
 | } | 
 |  | 
 | int64 QuicTime::ToMicroseconds() const { | 
 |   return (ticks_ - base::TimeTicks()).InMicroseconds(); | 
 | } | 
 |  | 
 | bool QuicTime::IsInitialized() const { | 
 |   return ticks_ != base::TimeTicks(); | 
 | } | 
 |  | 
 | QuicTime QuicTime::Add(const Delta& delta) const { | 
 |   return QuicTime(ticks_ + delta.delta_); | 
 | } | 
 |  | 
 | QuicTime QuicTime::Subtract(const Delta& delta) const { | 
 |   return QuicTime(ticks_ - delta.delta_); | 
 | } | 
 |  | 
 | QuicTime::Delta QuicTime::Subtract(const QuicTime& other) const { | 
 |   return QuicTime::Delta(ticks_ - other.ticks_); | 
 | } | 
 |  | 
 | }  // namespace gfe_quic |