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 // QuicBandwidth represents a bandwidth, stored in bits per second resolution. 6 7 #ifndef NET_QUIC_QUIC_BANDWIDTH_H_ 8 #define NET_QUIC_QUIC_BANDWIDTH_H_ 9 10 #include "base/basictypes.h" 11 #include "net/quic/quic_time.h" 12 13 namespace net { 14 15 typedef uint64 QuicByteCount; 16 17 class NET_EXPORT_PRIVATE QuicBandwidth { 18 19 public: 20 // Creates a new QuicBandwidth with an internal value of 0. 21 static QuicBandwidth Zero(); 22 23 // Create a new QuicBandwidth holding the bits per second. 24 static QuicBandwidth FromBitsPerSecond(int64 bits_per_second); 25 26 // Create a new QuicBandwidth holding the kilo bits per second. 27 static QuicBandwidth FromKBitsPerSecond(int64 k_bits_per_second); 28 29 // Create a new QuicBandwidth holding the bytes per second. 30 static QuicBandwidth FromBytesPerSecond(int64 bytes_per_second); 31 32 // Create a new QuicBandwidth holding the kilo bytes per second. 33 static QuicBandwidth FromKBytesPerSecond(int64 k_bytes_per_second); 34 35 // Create a new QuicBandwidth based on the bytes per the elapsed delta. 36 static QuicBandwidth FromBytesAndTimeDelta(QuicByteCount bytes, 37 QuicTime::Delta delta); 38 39 int64 ToBitsPerSecond() const; 40 41 int64 ToKBitsPerSecond() const; 42 43 int64 ToBytesPerSecond() const; 44 45 int64 ToKBytesPerSecond() const; 46 47 QuicByteCount ToBytesPerPeriod(QuicTime::Delta time_period) const; 48 49 int64 ToKBytesPerPeriod(QuicTime::Delta time_period) const; 50 51 bool IsZero() const; 52 53 QuicBandwidth Add(const QuicBandwidth& delta) const; 54 55 QuicBandwidth Subtract(const QuicBandwidth& delta) const; 56 57 QuicBandwidth Scale(float scale_factor) const; 58 59 QuicTime::Delta TransferTime(QuicByteCount bytes) const; 60 61 private: 62 explicit QuicBandwidth(int64 bits_per_second); 63 int64 bits_per_second_; 64 }; 65 66 // Non-member relational operators for QuicBandwidth. 67 inline bool operator==(QuicBandwidth lhs, QuicBandwidth rhs) { 68 return lhs.ToBitsPerSecond() == rhs.ToBitsPerSecond(); 69 } 70 inline bool operator!=(QuicBandwidth lhs, QuicBandwidth rhs) { 71 return !(lhs == rhs); 72 } 73 inline bool operator<(QuicBandwidth lhs, QuicBandwidth rhs) { 74 return lhs.ToBitsPerSecond() < rhs.ToBitsPerSecond(); 75 } 76 inline bool operator>(QuicBandwidth lhs, QuicBandwidth rhs) { 77 return rhs < lhs; 78 } 79 inline bool operator<=(QuicBandwidth lhs, QuicBandwidth rhs) { 80 return !(rhs < lhs); 81 } 82 inline bool operator>=(QuicBandwidth lhs, QuicBandwidth rhs) { 83 return !(lhs < rhs); 84 } 85 86 } // namespace net 87 #endif // NET_QUIC_QUIC_BANDWIDTH_H_ 88