diff --git a/modules/pacing/bitrate_prober.cc b/modules/pacing/bitrate_prober.cc index f3795645fa..4ff7c0d583 100644 --- a/modules/pacing/bitrate_prober.cc +++ b/modules/pacing/bitrate_prober.cc @@ -96,8 +96,9 @@ void BitrateProber::CreateProbeCluster(int bitrate_bps, int64_t now_ms) { ProbeCluster cluster; cluster.time_created_ms = now_ms; cluster.pace_info.probe_cluster_min_probes = kMinProbePacketsSent; - cluster.pace_info.probe_cluster_min_bytes = - bitrate_bps * kMinProbeDurationMs / 8000; + cluster.pace_info.probe_cluster_min_bytes = static_cast( + static_cast(bitrate_bps) * kMinProbeDurationMs / 8000); + RTC_DCHECK_GE(cluster.pace_info.probe_cluster_min_bytes, 0); cluster.pace_info.send_bitrate_bps = bitrate_bps; cluster.pace_info.probe_cluster_id = next_cluster_id_++; clusters_.push(cluster); diff --git a/modules/pacing/bitrate_prober_unittest.cc b/modules/pacing/bitrate_prober_unittest.cc index dc596982db..95d26593cb 100644 --- a/modules/pacing/bitrate_prober_unittest.cc +++ b/modules/pacing/bitrate_prober_unittest.cc @@ -147,6 +147,24 @@ TEST(BitrateProberTest, ScaleBytesUsedForProbing) { EXPECT_FALSE(prober.IsProbing()); } +TEST(BitrateProberTest, HighBitrateProbing) { + BitrateProber prober; + constexpr int kBitrateBps = 1000000000; // 1 Gbps. + constexpr int kPacketSizeBytes = 1000; + constexpr int kExpectedBytesSent = (kBitrateBps / 8000) * 15; + + prober.CreateProbeCluster(kBitrateBps, 0); + prober.OnIncomingPacket(kPacketSizeBytes); + int bytes_sent = 0; + while (bytes_sent < kExpectedBytesSent) { + ASSERT_TRUE(prober.IsProbing()); + prober.ProbeSent(0, kPacketSizeBytes); + bytes_sent += kPacketSizeBytes; + } + + EXPECT_FALSE(prober.IsProbing()); +} + TEST(BitrateProberTest, ProbeClusterTimeout) { BitrateProber prober; constexpr int kBitrateBps = 300000; // 300 kbps