gfe-relnote: (n/a) Fix QuicBandwidth::(ToBytesPerPeriod|ToKBytesPerPeriod) by doing multiplications before divisions. Not protected.
PiperOrigin-RevId: 252595070
Change-Id: Iced39e2225f45576a23a484dd43b231fff9f3636
diff --git a/quic/core/quic_bandwidth.h b/quic/core/quic_bandwidth.h
index a5bb306..afd31b2 100644
--- a/quic/core/quic_bandwidth.h
+++ b/quic/core/quic_bandwidth.h
@@ -67,12 +67,12 @@
inline int64_t ToKBytesPerSecond() const { return bits_per_second_ / 8000; }
inline QuicByteCount ToBytesPerPeriod(QuicTime::Delta time_period) const {
- return ToBytesPerSecond() * time_period.ToMicroseconds() /
+ return bits_per_second_ * time_period.ToMicroseconds() / 8 /
kNumMicrosPerSecond;
}
inline int64_t ToKBytesPerPeriod(QuicTime::Delta time_period) const {
- return ToKBytesPerSecond() * time_period.ToMicroseconds() /
+ return bits_per_second_ * time_period.ToMicroseconds() / 8000 /
kNumMicrosPerSecond;
}
diff --git a/quic/core/quic_bandwidth_test.cc b/quic/core/quic_bandwidth_test.cc
index 22a5107..005eef0 100644
--- a/quic/core/quic_bandwidth_test.cc
+++ b/quic/core/quic_bandwidth_test.cc
@@ -84,6 +84,13 @@
QuicTime::Delta::FromMilliseconds(100)));
EXPECT_EQ(200u, QuicBandwidth::FromKBytesPerSecond(2000).ToKBytesPerPeriod(
QuicTime::Delta::FromMilliseconds(100)));
+
+ // 1599 * 1001 = 1600599 bits/ms = 200.074875 bytes/s.
+ EXPECT_EQ(200u, QuicBandwidth::FromBitsPerSecond(1599).ToBytesPerPeriod(
+ QuicTime::Delta::FromMilliseconds(1001)));
+
+ EXPECT_EQ(200u, QuicBandwidth::FromBitsPerSecond(1599).ToKBytesPerPeriod(
+ QuicTime::Delta::FromSeconds(1001)));
}
TEST_F(QuicBandwidthTest, TransferTime) {