Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(384)

Unified Diff: webrtc/modules/pacing/bitrate_prober_unittest.cc

Issue 2628563003: Propagate packet pacing information to SenTimeHistory (Closed)
Patch Set: . Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/pacing/bitrate_prober_unittest.cc
diff --git a/webrtc/modules/pacing/bitrate_prober_unittest.cc b/webrtc/modules/pacing/bitrate_prober_unittest.cc
index 9ada11462572fda41178b0e05b0ecd2046ca2655..edae30cfffdb45378c298f7fc39bbff379eba5d9 100644
--- a/webrtc/modules/pacing/bitrate_prober_unittest.cc
+++ b/webrtc/modules/pacing/bitrate_prober_unittest.cc
@@ -9,17 +9,44 @@
*/
#include <limits>
+#include <vector>
#include "webrtc/modules/pacing/bitrate_prober.h"
+#include "webrtc/system_wrappers/include/clock.h"
#include "webrtc/test/gtest.h"
namespace webrtc {
-TEST(BitrateProberTest, VerifyStatesAndTimeBetweenProbes) {
- BitrateProber prober;
- EXPECT_FALSE(prober.IsProbing());
- int64_t now_ms = 0;
- EXPECT_EQ(-1, prober.TimeUntilNextProbe(now_ms));
+class BitrateProberTest : public ::testing::Test,
+ public ProbeClusterCreatedObserver {
+ public:
+ struct ProbeInfo {
+ int cluster_id = 0;
+ int min_bytes = 0;
+ int min_probes = 0;
+ };
+
+ void OnProbingClusterCreated(int cluster_id,
+ int min_bytes,
+ int min_probes) override {
+ ProbeInfo info;
+ info.cluster_id = cluster_id;
+ info.min_bytes = min_bytes;
+ info.min_probes = min_probes;
+ probe_info_.push_back(info);
+ }
+
+ protected:
+ BitrateProberTest() : prober_(this), clock_(0) {}
+ BitrateProber prober_;
+ SimulatedClock clock_;
+ std::vector<ProbeInfo> probe_info_;
+};
+
+TEST_F(BitrateProberTest, VerifyStatesAndTimeBetweenProbes) {
+ int64_t now_ms = clock_.TimeInMilliseconds();
+ EXPECT_FALSE(prober_.IsProbing());
+ EXPECT_EQ(-1, prober_.TimeUntilNextProbe(now_ms));
const int kTestBitrate1 = 900000;
const int kTestBitrate2 = 1800000;
@@ -27,22 +54,22 @@ TEST(BitrateProberTest, VerifyStatesAndTimeBetweenProbes) {
const int kProbeSize = 1000;
const int kMinProbeDurationMs = 15;
- prober.CreateProbeCluster(kTestBitrate1);
- prober.CreateProbeCluster(kTestBitrate2);
- EXPECT_FALSE(prober.IsProbing());
+ prober_.CreateProbeCluster(kTestBitrate1);
+ prober_.CreateProbeCluster(kTestBitrate2);
+ EXPECT_FALSE(prober_.IsProbing());
- prober.OnIncomingPacket(kProbeSize);
- EXPECT_TRUE(prober.IsProbing());
- EXPECT_EQ(0, prober.CurrentClusterId());
+ prober_.OnIncomingPacket(kProbeSize);
+ EXPECT_TRUE(prober_.IsProbing());
+ EXPECT_EQ(0, prober_.CurrentClusterId());
// First packet should probe as soon as possible.
- EXPECT_EQ(0, prober.TimeUntilNextProbe(now_ms));
+ EXPECT_EQ(0, prober_.TimeUntilNextProbe(now_ms));
for (int i = 0; i < kClusterSize; ++i) {
- now_ms += prober.TimeUntilNextProbe(now_ms);
- EXPECT_EQ(0, prober.TimeUntilNextProbe(now_ms));
- EXPECT_EQ(0, prober.CurrentClusterId());
- prober.ProbeSent(now_ms, kProbeSize);
+ now_ms += prober_.TimeUntilNextProbe(now_ms);
+ EXPECT_EQ(0, prober_.TimeUntilNextProbe(now_ms));
+ EXPECT_EQ(0, prober_.CurrentClusterId());
+ prober_.ProbeSent(now_ms, kProbeSize);
}
EXPECT_GE(now_ms, kMinProbeDurationMs);
@@ -51,14 +78,14 @@ TEST(BitrateProberTest, VerifyStatesAndTimeBetweenProbes) {
EXPECT_GT(bitrate, kTestBitrate1 * 0.9);
EXPECT_LT(bitrate, kTestBitrate1 * 1.1);
- now_ms += prober.TimeUntilNextProbe(now_ms);
+ now_ms += prober_.TimeUntilNextProbe(now_ms);
int64_t probe2_started = now_ms;
for (int i = 0; i < kClusterSize; ++i) {
- now_ms += prober.TimeUntilNextProbe(now_ms);
- EXPECT_EQ(0, prober.TimeUntilNextProbe(now_ms));
- EXPECT_EQ(1, prober.CurrentClusterId());
- prober.ProbeSent(now_ms, kProbeSize);
+ now_ms += prober_.TimeUntilNextProbe(now_ms);
+ EXPECT_EQ(0, prober_.TimeUntilNextProbe(now_ms));
+ EXPECT_EQ(1, prober_.CurrentClusterId());
+ prober_.ProbeSent(now_ms, kProbeSize);
}
// Verify that the actual bitrate is withing 10% of the target.
@@ -68,91 +95,93 @@ TEST(BitrateProberTest, VerifyStatesAndTimeBetweenProbes) {
EXPECT_GT(bitrate, kTestBitrate2 * 0.9);
EXPECT_LT(bitrate, kTestBitrate2 * 1.1);
- EXPECT_EQ(-1, prober.TimeUntilNextProbe(now_ms));
- EXPECT_FALSE(prober.IsProbing());
+ EXPECT_EQ(-1, prober_.TimeUntilNextProbe(now_ms));
+ EXPECT_FALSE(prober_.IsProbing());
}
-TEST(BitrateProberTest, DoesntProbeWithoutRecentPackets) {
- BitrateProber prober;
- EXPECT_FALSE(prober.IsProbing());
+TEST_F(BitrateProberTest, DoesntProbeWithoutRecentPackets) {
+ EXPECT_FALSE(prober_.IsProbing());
int64_t now_ms = 0;
- EXPECT_EQ(-1, prober.TimeUntilNextProbe(now_ms));
+ EXPECT_EQ(-1, prober_.TimeUntilNextProbe(now_ms));
- prober.CreateProbeCluster(900000);
- EXPECT_FALSE(prober.IsProbing());
+ prober_.CreateProbeCluster(900000);
+ EXPECT_FALSE(prober_.IsProbing());
- prober.OnIncomingPacket(1000);
- EXPECT_TRUE(prober.IsProbing());
- EXPECT_EQ(0, prober.TimeUntilNextProbe(now_ms));
- prober.ProbeSent(now_ms, 1000);
- // Let time pass, no large enough packets put into prober.
+ prober_.OnIncomingPacket(1000);
+ EXPECT_TRUE(prober_.IsProbing());
+ EXPECT_EQ(0, prober_.TimeUntilNextProbe(now_ms));
+ prober_.ProbeSent(now_ms, 1000);
+ // Let time pass, no large enough packets put into prober_.
now_ms += 6000;
- EXPECT_EQ(-1, prober.TimeUntilNextProbe(now_ms));
+ EXPECT_EQ(-1, prober_.TimeUntilNextProbe(now_ms));
// Insert a small packet, not a candidate for probing.
- prober.OnIncomingPacket(100);
- EXPECT_FALSE(prober.IsProbing());
- EXPECT_EQ(-1, prober.TimeUntilNextProbe(now_ms));
+ prober_.OnIncomingPacket(100);
+ EXPECT_FALSE(prober_.IsProbing());
+ EXPECT_EQ(-1, prober_.TimeUntilNextProbe(now_ms));
// Insert a large-enough packet after downtime while probing should reset to
// perform a new probe since the requested one didn't finish.
- prober.OnIncomingPacket(1000);
- EXPECT_EQ(0, prober.TimeUntilNextProbe(now_ms));
- prober.ProbeSent(now_ms, 1000);
+ prober_.OnIncomingPacket(1000);
+ EXPECT_EQ(0, prober_.TimeUntilNextProbe(now_ms));
+ prober_.ProbeSent(now_ms, 1000);
// Next packet should be part of new probe and be sent with non-zero delay.
- prober.OnIncomingPacket(1000);
- EXPECT_GT(prober.TimeUntilNextProbe(now_ms), 0);
+ prober_.OnIncomingPacket(1000);
+ EXPECT_GT(prober_.TimeUntilNextProbe(now_ms), 0);
}
-TEST(BitrateProberTest, DoesntInitializeProbingForSmallPackets) {
- BitrateProber prober;
- prober.SetEnabled(true);
- EXPECT_FALSE(prober.IsProbing());
+TEST_F(BitrateProberTest, DoesntInitializeProbingForSmallPackets) {
+ prober_.SetEnabled(true);
+ EXPECT_FALSE(prober_.IsProbing());
- prober.OnIncomingPacket(100);
- EXPECT_FALSE(prober.IsProbing());
+ prober_.OnIncomingPacket(100);
+ EXPECT_FALSE(prober_.IsProbing());
}
-TEST(BitrateProberTest, VerifyProbeSizeOnHighBitrate) {
- BitrateProber prober;
+TEST_F(BitrateProberTest, VerifyProbeSizeOnHighBitrate) {
constexpr unsigned kHighBitrateBps = 10000000; // 10 Mbps
- prober.CreateProbeCluster(kHighBitrateBps);
+ prober_.CreateProbeCluster(kHighBitrateBps);
// Probe size should ensure a minimum of 1 ms interval.
- EXPECT_GT(prober.RecommendedMinProbeSize(), kHighBitrateBps / 8000);
+ EXPECT_GT(prober_.RecommendedMinProbeSize(), kHighBitrateBps / 8000);
}
-TEST(BitrateProberTest, MinumumNumberOfProbingPackets) {
- BitrateProber prober;
+TEST_F(BitrateProberTest, MinProbingPacketsUsedLowBitrates) {
// Even when probing at a low bitrate we expect a minimum number
// of packets to be sent.
- constexpr int kBitrateBps = 100000; // 100 kbps
- constexpr int kPacketSizeBytes = 1000;
-
- prober.CreateProbeCluster(kBitrateBps);
- prober.OnIncomingPacket(kPacketSizeBytes);
- for (int i = 0; i < 5; ++i) {
- EXPECT_TRUE(prober.IsProbing());
- prober.ProbeSent(0, kPacketSizeBytes);
+ constexpr int kLowBitrate = 100000; // 100 kbps
+ constexpr int kPacketSize = 1400;
+ int64_t now_ms = clock_.TimeInMilliseconds();
+ prober_.SetEnabled(true);
+ prober_.CreateProbeCluster(kLowBitrate);
+ prober_.OnIncomingPacket(200);
+ EXPECT_TRUE(prober_.IsProbing());
+
+ EXPECT_GT(probe_info_[0].min_probes, 0);
+ int probes_sent = 0;
+ int bytes_sent = 0l;
+ while (prober_.IsProbing()) {
+ prober_.ProbeSent(now_ms, kPacketSize);
+ ++probes_sent;
+ bytes_sent += kPacketSize;
}
- EXPECT_FALSE(prober.IsProbing());
+ EXPECT_EQ(probes_sent, probe_info_[0].min_probes);
}
-TEST(BitrateProberTest, ScaleBytesUsedForProbing) {
- BitrateProber prober;
+TEST_F(BitrateProberTest, ScaleBytesUsedForProbing) {
constexpr int kBitrateBps = 10000000; // 10 Mbps
constexpr int kPacketSizeBytes = 1000;
constexpr int kExpectedBytesSent = kBitrateBps * 15 / 8000;
- prober.CreateProbeCluster(kBitrateBps);
- prober.OnIncomingPacket(kPacketSizeBytes);
+ prober_.CreateProbeCluster(kBitrateBps);
+ prober_.OnIncomingPacket(kPacketSizeBytes);
int bytes_sent = 0;
while (bytes_sent < kExpectedBytesSent) {
- EXPECT_TRUE(prober.IsProbing());
- prober.ProbeSent(0, kPacketSizeBytes);
+ EXPECT_TRUE(prober_.IsProbing());
+ prober_.ProbeSent(0, kPacketSizeBytes);
bytes_sent += kPacketSizeBytes;
}
- EXPECT_FALSE(prober.IsProbing());
+ EXPECT_FALSE(prober_.IsProbing());
}
} // namespace webrtc

Powered by Google App Engine
This is Rietveld 408576698