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.
5 // QuicBandwidth represents a bandwidth, stored in bits per second resolution.
7 #ifndef NET_QUIC_QUIC_BANDWIDTH_H_
8 #define NET_QUIC_QUIC_BANDWIDTH_H_
10 #include "base/basictypes.h"
11 #include "net/quic/quic_time.h"
15 typedef uint64 QuicByteCount
;
16 typedef uint64 QuicPacketCount
;
18 class NET_EXPORT_PRIVATE QuicBandwidth
{
20 // Creates a new QuicBandwidth with an internal value of 0.
21 static QuicBandwidth
Zero();
23 // Create a new QuicBandwidth holding the bits per second.
24 static QuicBandwidth
FromBitsPerSecond(int64 bits_per_second
);
26 // Create a new QuicBandwidth holding the kilo bits per second.
27 static QuicBandwidth
FromKBitsPerSecond(int64 k_bits_per_second
);
29 // Create a new QuicBandwidth holding the bytes per second.
30 static QuicBandwidth
FromBytesPerSecond(int64 bytes_per_second
);
32 // Create a new QuicBandwidth holding the kilo bytes per second.
33 static QuicBandwidth
FromKBytesPerSecond(int64 k_bytes_per_second
);
35 // Create a new QuicBandwidth based on the bytes per the elapsed delta.
36 static QuicBandwidth
FromBytesAndTimeDelta(QuicByteCount bytes
,
37 QuicTime::Delta delta
);
39 int64
ToBitsPerSecond() const;
41 int64
ToKBitsPerSecond() const;
43 int64
ToBytesPerSecond() const;
45 int64
ToKBytesPerSecond() const;
47 QuicByteCount
ToBytesPerPeriod(QuicTime::Delta time_period
) const;
49 int64
ToKBytesPerPeriod(QuicTime::Delta time_period
) const;
53 QuicBandwidth
Add(const QuicBandwidth
& delta
) const;
55 QuicBandwidth
Subtract(const QuicBandwidth
& delta
) const;
57 QuicBandwidth
Scale(float scale_factor
) const;
59 QuicTime::Delta
TransferTime(QuicByteCount bytes
) const;
62 explicit QuicBandwidth(int64 bits_per_second
);
63 int64 bits_per_second_
;
66 // Non-member relational operators for QuicBandwidth.
67 inline bool operator==(QuicBandwidth lhs
, QuicBandwidth rhs
) {
68 return lhs
.ToBitsPerSecond() == rhs
.ToBitsPerSecond();
70 inline bool operator!=(QuicBandwidth lhs
, QuicBandwidth rhs
) {
73 inline bool operator<(QuicBandwidth lhs
, QuicBandwidth rhs
) {
74 return lhs
.ToBitsPerSecond() < rhs
.ToBitsPerSecond();
76 inline bool operator>(QuicBandwidth lhs
, QuicBandwidth rhs
) {
79 inline bool operator<=(QuicBandwidth lhs
, QuicBandwidth rhs
) {
82 inline bool operator>=(QuicBandwidth lhs
, QuicBandwidth rhs
) {
87 #endif // NET_QUIC_QUIC_BANDWIDTH_H_