quic_time.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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::FromMilliseconds(0);
76}
77
78// static
79QuicTime QuicTime::FromMilliseconds(int64 time_ms) {
80  // DateTime use 100 ns as resolution make sure we don't pass down too high
81  // values.
82  DCHECK(time_ms < kQuicInfiniteTimeUs / 1000);
83  return QuicTime(base::TimeTicks() +
84                  base::TimeDelta::FromMilliseconds(time_ms));
85}
86
87// static
88QuicTime QuicTime::FromMicroseconds(int64 time_us) {
89  // DateTime use 100 ns as resolution make sure we don't pass down too high
90  // values.
91  DCHECK(time_us < kQuicInfiniteTimeUs);
92  return QuicTime(base::TimeTicks() +
93                  base::TimeDelta::FromMicroseconds(time_us));
94}
95
96QuicTime::QuicTime(base::TimeTicks ticks)
97    : ticks_(ticks) {
98}
99
100int64 QuicTime::ToMilliseconds() const {
101  return (ticks_ - base::TimeTicks()).InMilliseconds();
102}
103
104int64 QuicTime::ToMicroseconds() const {
105  return (ticks_ - base::TimeTicks()).InMicroseconds();
106}
107
108bool QuicTime::IsInitialized() const {
109  return ticks_ != base::TimeTicks();
110}
111
112QuicTime QuicTime::Add(const Delta& delta) const {
113  return QuicTime(ticks_ + delta.delta_);
114}
115
116QuicTime QuicTime::Subtract(const Delta& delta) const {
117  return QuicTime(ticks_ - delta.delta_);
118}
119
120QuicTime::Delta QuicTime::Subtract(const QuicTime& other) const {
121  return QuicTime::Delta(ticks_ - other.ticks_);
122}
123
124}  // namespace net
125