|  | // 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 |