Added simulations of capacity variations and wifi recordings.
Also changes the packet sizes for the video sender and the trace based filter to match. R=solenberg@webrtc.org Review URL: https://webrtc-codereview.appspot.com/9929004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@5824 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
parent
7e889b7126
commit
f8f7c8b618
@ -82,6 +82,42 @@ TEST_P(BweSimulation, Verizon4gDownlinkTest) {
|
||||
ASSERT_TRUE(filter.Init(test::ResourcePath("verizon4g-downlink", "rx")));
|
||||
RunFor(22 * 60 * 1000);
|
||||
}
|
||||
|
||||
TEST_P(BweSimulation, Choke1000kbps500kbps1000kbps) {
|
||||
VerboseLogging(true);
|
||||
ChokeFilter filter(this);
|
||||
RateCounterFilter counter(this, "receiver_input");
|
||||
filter.SetCapacity(1000);
|
||||
filter.SetMaxDelay(500);
|
||||
RunFor(60 * 1000);
|
||||
filter.SetCapacity(500);
|
||||
RunFor(60 * 1000);
|
||||
filter.SetCapacity(1000);
|
||||
RunFor(60 * 1000);
|
||||
}
|
||||
|
||||
TEST_P(BweSimulation, Choke200kbps30kbps200kbps) {
|
||||
VerboseLogging(true);
|
||||
ChokeFilter filter(this);
|
||||
RateCounterFilter counter(this, "receiver_input");
|
||||
filter.SetCapacity(200);
|
||||
filter.SetMaxDelay(500);
|
||||
RunFor(60 * 1000);
|
||||
filter.SetCapacity(30);
|
||||
RunFor(60 * 1000);
|
||||
filter.SetCapacity(200);
|
||||
RunFor(60 * 1000);
|
||||
}
|
||||
|
||||
TEST_P(BweSimulation, GoogleWifiTrace3Mbps) {
|
||||
VerboseLogging(true);
|
||||
RateCounterFilter counter1(this, "sender_output");
|
||||
TraceBasedDeliveryFilter filter(this, "link_capacity");
|
||||
filter.SetMaxDelay(500);
|
||||
RateCounterFilter counter2(this, "receiver_input");
|
||||
ASSERT_TRUE(filter.Init(test::ResourcePath("google-wifi-3mbps", "rx")));
|
||||
RunFor(300 * 1000);
|
||||
}
|
||||
#endif // BWE_TEST_LOGGING_COMPILE_TIME_ENABLE
|
||||
} // namespace bwe
|
||||
} // namespace testing
|
||||
|
@ -203,6 +203,10 @@ void RateCounterFilter::LogStats() {
|
||||
kbps_stats_.Log("kbps");
|
||||
}
|
||||
|
||||
Stats<double> RateCounterFilter::GetBitrateStats() const {
|
||||
return kbps_stats_;
|
||||
}
|
||||
|
||||
void RateCounterFilter::Plot(int64_t timestamp_ms) {
|
||||
BWE_TEST_LOGGING_CONTEXT(name_.c_str());
|
||||
BWE_TEST_LOGGING_PLOT("Throughput_#1", timestamp_ms,
|
||||
@ -469,7 +473,7 @@ void TraceBasedDeliveryFilter::ProceedToNextSlot() {
|
||||
}
|
||||
}
|
||||
local_time_us_ = *next_delivery_it_;
|
||||
const int kPayloadSize = 1240;
|
||||
const int kPayloadSize = 1200;
|
||||
rate_counter_->UpdateRates(local_time_us_, kPayloadSize);
|
||||
}
|
||||
|
||||
@ -480,7 +484,7 @@ PacketSender::PacketSender(PacketProcessorListener* listener)
|
||||
VideoSender::VideoSender(PacketProcessorListener* listener, float fps,
|
||||
uint32_t kbps, uint32_t ssrc, float first_frame_offset)
|
||||
: PacketSender(listener),
|
||||
kMaxPayloadSizeBytes(1000),
|
||||
kMaxPayloadSizeBytes(1200),
|
||||
kTimestampBase(0xff80ff00ul),
|
||||
frame_period_ms_(1000.0 / fps),
|
||||
bytes_per_second_((1000 * kbps) / 8),
|
||||
|
@ -205,6 +205,7 @@ class RateCounterFilter : public PacketProcessor {
|
||||
uint32_t bits_per_second() const;
|
||||
|
||||
void LogStats();
|
||||
Stats<double> GetBitrateStats() const;
|
||||
virtual void Plot(int64_t timestamp_ms);
|
||||
virtual void RunFor(int64_t time_ms, Packets* in_out);
|
||||
|
||||
|
@ -772,33 +772,33 @@ TEST(BweTestFramework_VideoSenderTest, Fps1Kbps80_1s) {
|
||||
EXPECT_EQ(10000u, sender.bytes_per_second());
|
||||
// We're at 1 fps, so all packets should be generated on first call, giving 10
|
||||
// packets of each 1000 bytes, total 10000 bytes.
|
||||
TestVideoSender(&sender, 1, 10, 1000, 10000);
|
||||
TestVideoSender(&sender, 1, 9, 400, 10000);
|
||||
// 999ms, should see no output here.
|
||||
TestVideoSender(&sender, 998, 0, 0, 0);
|
||||
// 1999ms, should get data for one more frame.
|
||||
TestVideoSender(&sender, 1000, 10, 1000, 10000);
|
||||
TestVideoSender(&sender, 1000, 9, 400, 10000);
|
||||
// 2000ms, one more frame.
|
||||
TestVideoSender(&sender, 1, 10, 1000, 10000);
|
||||
TestVideoSender(&sender, 1, 9, 400, 10000);
|
||||
// 2999ms, should see nothing.
|
||||
TestVideoSender(&sender, 999, 0, 0, 0);
|
||||
}
|
||||
|
||||
TEST(BweTestFramework_VideoSenderTest, Fps1Kpbs80_1s_Offset) {
|
||||
TEST(BweTestFramework_VideoSenderTest, Fps1Kbps80_1s_Offset) {
|
||||
// 1 fps, 80 kbps, offset 0.5 of a frame period, ==0.5s in this case.
|
||||
VideoSender sender(NULL, 1.0f, 80, 0x1234, 0.5f);
|
||||
EXPECT_EQ(10000u, sender.bytes_per_second());
|
||||
// 499ms, no output.
|
||||
TestVideoSender(&sender, 499, 0, 0, 0);
|
||||
// 500ms, first frame (this is the offset we set), 10 packets of 1000 bytes.
|
||||
TestVideoSender(&sender, 1, 10, 1000, 10000);
|
||||
TestVideoSender(&sender, 1, 9, 400, 10000);
|
||||
// 1499ms, nothing.
|
||||
TestVideoSender(&sender, 999, 0, 0, 0);
|
||||
// 1999ms, second frame.
|
||||
TestVideoSender(&sender, 500, 10, 1000, 10000);
|
||||
TestVideoSender(&sender, 500, 9, 400, 10000);
|
||||
// 2499ms, nothing.
|
||||
TestVideoSender(&sender, 500, 0, 0, 0);
|
||||
// 2500ms, third frame.
|
||||
TestVideoSender(&sender, 1, 10, 1000, 10000);
|
||||
TestVideoSender(&sender, 1, 9, 400, 10000);
|
||||
// 3499ms, nothing.
|
||||
TestVideoSender(&sender, 999, 0, 0, 0);
|
||||
}
|
||||
@ -835,7 +835,7 @@ TEST(BweTestFramework_VideoSenderTest, Fps10Kpbs120_1s) {
|
||||
TestVideoSender(&sender, 1, 0, 0, 0);
|
||||
}
|
||||
|
||||
TEST(BweTestFramework_VideoSenderTest, Fps30Kpbs800_20s) {
|
||||
TEST(BweTestFramework_VideoSenderTest, Fps30Kbps800_20s) {
|
||||
// 20 fps, 820 kbps.
|
||||
VideoSender sender(NULL, 25.0f, 820, 0x1234, 0);
|
||||
EXPECT_EQ(102500u, sender.bytes_per_second());
|
||||
@ -843,15 +843,15 @@ TEST(BweTestFramework_VideoSenderTest, Fps30Kpbs800_20s) {
|
||||
// Each frame is 102500/25=4100 bytes, or 5 packets (4 @1000 bytes, 1 @100),
|
||||
// so packet count should be 5*250=1250 and last packet of each frame has
|
||||
// 100 bytes of payload.
|
||||
TestVideoSender(&sender, 9998, 1250, 100, 1025000);
|
||||
TestVideoSender(&sender, 9998, 1000, 500, 1025000);
|
||||
// 9999ms, nothing.
|
||||
TestVideoSender(&sender, 1, 0, 0, 0);
|
||||
// 19998ms, 250 more frames.
|
||||
TestVideoSender(&sender, 9999, 1250, 100, 1025000);
|
||||
TestVideoSender(&sender, 9999, 1000, 500, 1025000);
|
||||
// 19999ms, nothing.
|
||||
TestVideoSender(&sender, 1, 0, 0, 0);
|
||||
// 20038ms, one more frame, as described above (25fps == 40ms/frame).
|
||||
TestVideoSender(&sender, 39, 5, 100, 4100);
|
||||
TestVideoSender(&sender, 39, 4, 500, 4100);
|
||||
// 20039ms, nothing.
|
||||
TestVideoSender(&sender, 1, 0, 0, 0);
|
||||
}
|
||||
@ -865,12 +865,12 @@ TEST(BweTestFramework_VideoSenderTest, TestAppendInOrder) {
|
||||
sender1.RunFor(999, &packets);
|
||||
ASSERT_TRUE(IsTimeSorted(packets));
|
||||
ASSERT_TRUE(IsSequenceNumberSorted(packets));
|
||||
EXPECT_EQ(10u, packets.size());
|
||||
EXPECT_EQ(9u, packets.size());
|
||||
// Generate some more packets and verify they are appended to end of list.
|
||||
sender1.RunFor(1000, &packets);
|
||||
ASSERT_TRUE(IsTimeSorted(packets));
|
||||
ASSERT_TRUE(IsSequenceNumberSorted(packets));
|
||||
EXPECT_EQ(20u, packets.size());
|
||||
EXPECT_EQ(18u, packets.size());
|
||||
|
||||
// Another sender, 2 fps, 160 kpbs, 150ms offset
|
||||
VideoSender sender2(NULL, 2.0f, 160, 0x2234, 0.30f);
|
||||
@ -879,42 +879,42 @@ TEST(BweTestFramework_VideoSenderTest, TestAppendInOrder) {
|
||||
// on the list.
|
||||
sender2.RunFor(999, &packets);
|
||||
ASSERT_TRUE(IsTimeSorted(packets));
|
||||
EXPECT_EQ(40u, packets.size());
|
||||
EXPECT_EQ(36u, packets.size());
|
||||
// Generate some more.
|
||||
sender2.RunFor(1000, &packets);
|
||||
ASSERT_TRUE(IsTimeSorted(packets));
|
||||
EXPECT_EQ(60u, packets.size());
|
||||
EXPECT_EQ(54u, packets.size());
|
||||
}
|
||||
|
||||
TEST(BweTestFramework_VideoSenderTest, FeedbackIneffective) {
|
||||
VideoSender sender(NULL, 25.0f, 820, 0x1234, 0);
|
||||
EXPECT_EQ(102500u, sender.bytes_per_second());
|
||||
TestVideoSender(&sender, 9998, 1250, 100, 1025000);
|
||||
TestVideoSender(&sender, 9998, 1000, 500, 1025000);
|
||||
|
||||
// Make sure feedback has no effect on a regular video sender.
|
||||
PacketSender::Feedback feedback = { 512000 };
|
||||
sender.GiveFeedback(feedback);
|
||||
EXPECT_EQ(102500u, sender.bytes_per_second());
|
||||
TestVideoSender(&sender, 9998, 1250, 100, 1025000);
|
||||
TestVideoSender(&sender, 9998, 1000, 500, 1025000);
|
||||
}
|
||||
|
||||
TEST(BweTestFramework_AdaptiveVideoSenderTest, FeedbackChangesBitrate) {
|
||||
AdaptiveVideoSender sender(NULL, 25.0f, 820, 0x1234, 0);
|
||||
EXPECT_EQ(102500u, sender.bytes_per_second());
|
||||
TestVideoSender(&sender, 9998, 1250, 100, 1025000);
|
||||
TestVideoSender(&sender, 9998, 1000, 500, 1025000);
|
||||
|
||||
// Make sure we can reduce the bitrate.
|
||||
PacketSender::Feedback feedback = { 512000 };
|
||||
sender.GiveFeedback(feedback);
|
||||
EXPECT_EQ(64000u, sender.bytes_per_second());
|
||||
TestVideoSender(&sender, 9998, 750, 560, 640000);
|
||||
TestVideoSender(&sender, 9998, 750, 160, 640000);
|
||||
|
||||
// Increase the bitrate to the initial bitrate and verify that the output is
|
||||
// the same.
|
||||
feedback.estimated_bps = 820000;
|
||||
sender.GiveFeedback(feedback);
|
||||
EXPECT_EQ(102500u, sender.bytes_per_second());
|
||||
TestVideoSender(&sender, 9998, 1250, 100, 1025000);
|
||||
TestVideoSender(&sender, 9998, 1000, 500, 1025000);
|
||||
}
|
||||
} // namespace bwe
|
||||
} // namespace testing
|
||||
|
Loading…
x
Reference in New Issue
Block a user