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_bandwidth.h" 6 7 #include "base/logging.h" 8 #include "base/time/time.h" 9 10 namespace net { 11 12 // Highest number that QuicBandwidth can hold. 13 const int64 kQuicInfiniteBandwidth = GG_INT64_C(0x7fffffffffffffff); 14 15 // static Zero()16QuicBandwidth QuicBandwidth::Zero() { 17 return QuicBandwidth(0); 18 } 19 20 // static FromBitsPerSecond(int64 bits_per_second)21QuicBandwidth QuicBandwidth::FromBitsPerSecond(int64 bits_per_second) { 22 return QuicBandwidth(bits_per_second); 23 } 24 25 // static FromKBitsPerSecond(int64 k_bits_per_second)26QuicBandwidth QuicBandwidth::FromKBitsPerSecond(int64 k_bits_per_second) { 27 DCHECK(k_bits_per_second < kQuicInfiniteBandwidth / 1000); 28 return QuicBandwidth(k_bits_per_second * 1000); 29 } 30 31 // static FromBytesPerSecond(int64 bytes_per_second)32QuicBandwidth QuicBandwidth::FromBytesPerSecond(int64 bytes_per_second) { 33 DCHECK(bytes_per_second < kQuicInfiniteBandwidth / 8); 34 return QuicBandwidth(bytes_per_second * 8); 35 } 36 37 // static FromKBytesPerSecond(int64 k_bytes_per_second)38QuicBandwidth QuicBandwidth::FromKBytesPerSecond(int64 k_bytes_per_second) { 39 DCHECK(k_bytes_per_second < kQuicInfiniteBandwidth / 8000); 40 return QuicBandwidth(k_bytes_per_second * 8000); 41 } 42 43 // static FromBytesAndTimeDelta(QuicByteCount bytes,QuicTime::Delta delta)44QuicBandwidth QuicBandwidth::FromBytesAndTimeDelta(QuicByteCount bytes, 45 QuicTime::Delta delta) { 46 DCHECK_LT(bytes, 47 static_cast<uint64>(kQuicInfiniteBandwidth / 48 (8 * base::Time::kMicrosecondsPerSecond))); 49 int64 bytes_per_second = (bytes * base::Time::kMicrosecondsPerSecond) / 50 delta.ToMicroseconds(); 51 return QuicBandwidth(bytes_per_second * 8); 52 } 53 QuicBandwidth(int64 bits_per_second)54QuicBandwidth::QuicBandwidth(int64 bits_per_second) 55 : bits_per_second_(bits_per_second) { 56 DCHECK_GE(bits_per_second, 0); 57 } 58 ToBitsPerSecond() const59int64 QuicBandwidth::ToBitsPerSecond() const { 60 return bits_per_second_; 61 } 62 ToKBitsPerSecond() const63int64 QuicBandwidth::ToKBitsPerSecond() const { 64 return bits_per_second_ / 1000; 65 } 66 ToBytesPerSecond() const67int64 QuicBandwidth::ToBytesPerSecond() const { 68 return bits_per_second_ / 8; 69 } 70 ToKBytesPerSecond() const71int64 QuicBandwidth::ToKBytesPerSecond() const { 72 return bits_per_second_ / 8000; 73 } 74 ToBytesPerPeriod(QuicTime::Delta time_period) const75QuicByteCount QuicBandwidth::ToBytesPerPeriod( 76 QuicTime::Delta time_period) const { 77 return ToBytesPerSecond() * time_period.ToMicroseconds() / 78 base::Time::kMicrosecondsPerSecond; 79 } 80 ToKBytesPerPeriod(QuicTime::Delta time_period) const81int64 QuicBandwidth::ToKBytesPerPeriod(QuicTime::Delta time_period) const { 82 return ToKBytesPerSecond() * time_period.ToMicroseconds() / 83 base::Time::kMicrosecondsPerSecond; 84 } 85 IsZero() const86bool QuicBandwidth::IsZero() const { 87 return (bits_per_second_ == 0); 88 } 89 Add(const QuicBandwidth & delta) const90QuicBandwidth QuicBandwidth::Add(const QuicBandwidth& delta) const { 91 return QuicBandwidth(bits_per_second_ + delta.bits_per_second_); 92 } 93 Subtract(const QuicBandwidth & delta) const94QuicBandwidth QuicBandwidth::Subtract(const QuicBandwidth& delta) const { 95 return QuicBandwidth(bits_per_second_ - delta.bits_per_second_); 96 } 97 Scale(float scale_factor) const98QuicBandwidth QuicBandwidth::Scale(float scale_factor) const { 99 return QuicBandwidth(bits_per_second_ * scale_factor); 100 } 101 TransferTime(QuicByteCount bytes) const102QuicTime::Delta QuicBandwidth::TransferTime(QuicByteCount bytes) const { 103 return QuicTime::Delta::FromMicroseconds( 104 bytes * 8 * base::Time::kMicrosecondsPerSecond / bits_per_second_); 105 } 106 107 } // namespace net 108