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

Side by Side Diff: webrtc/modules/congestion_controller/probe_bitrate_estimator_unittest.cc

Issue 2728553007: Use pacing info in ProbeBitrateEstimator to validate probe results. (Closed)
Patch Set: Created 3 years, 9 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include "webrtc/modules/congestion_controller/probe_bitrate_estimator.h" 11 #include "webrtc/modules/congestion_controller/probe_bitrate_estimator.h"
12 12
13 #include <vector> 13 #include <vector>
14 #include <utility> 14 #include <utility>
15 15
16 #include "webrtc/modules/remote_bitrate_estimator/aimd_rate_control.h" 16 #include "webrtc/modules/remote_bitrate_estimator/aimd_rate_control.h"
17 #include "webrtc/test/gmock.h" 17 #include "webrtc/test/gmock.h"
18 #include "webrtc/test/gtest.h" 18 #include "webrtc/test/gtest.h"
19 19
20 namespace webrtc { 20 namespace webrtc {
21 21
22 constexpr int INVALID_BPS = -1; 22 namespace {
23 constexpr int kInvalidBitrate = -1;
24 constexpr int kDefaultMinProbes = 5;
25 constexpr int kDefaultMinBytes = 5000;
26 } // anonymous namespace
23 27
24 class TestProbeBitrateEstimator : public ::testing::Test { 28 class TestProbeBitrateEstimator : public ::testing::Test {
25 public: 29 public:
26 TestProbeBitrateEstimator() : probe_bitrate_estimator_() {} 30 TestProbeBitrateEstimator() : probe_bitrate_estimator_() {}
27 31
28 // TODO(philipel): Use PacedPacketInfo when ProbeBitrateEstimator is rewritten 32 // TODO(philipel): Use PacedPacketInfo when ProbeBitrateEstimator is rewritten
29 // to use that information. 33 // to use that information.
30 void AddPacketFeedback(int probe_cluster_id, 34 void AddPacketFeedback(int probe_cluster_id,
31 size_t size_bytes, 35 size_t size_bytes,
32 int64_t send_time_ms, 36 int64_t send_time_ms,
33 int64_t arrival_time_ms) { 37 int64_t arrival_time_ms,
34 PacketInfo info(arrival_time_ms, send_time_ms, 0, size_bytes, 38 int min_probes = kDefaultMinProbes,
35 PacedPacketInfo(probe_cluster_id, -1, -1)); 39 int min_bytes = kDefaultMinBytes) {
40 PacedPacketInfo pacing_info(probe_cluster_id, min_probes, min_bytes);
41 PacketInfo info(arrival_time_ms, send_time_ms, 0, size_bytes, pacing_info);
36 measured_bps_ = 42 measured_bps_ =
37 probe_bitrate_estimator_.HandleProbeAndEstimateBitrate(info); 43 probe_bitrate_estimator_.HandleProbeAndEstimateBitrate(info);
38 } 44 }
39 45
40 protected: 46 protected:
41 int measured_bps_ = INVALID_BPS; 47 int measured_bps_ = kInvalidBitrate;
42 ProbeBitrateEstimator probe_bitrate_estimator_; 48 ProbeBitrateEstimator probe_bitrate_estimator_;
43 }; 49 };
44 50
45 TEST_F(TestProbeBitrateEstimator, OneCluster) { 51 TEST_F(TestProbeBitrateEstimator, OneCluster) {
46 AddPacketFeedback(0, 1000, 0, 10); 52 AddPacketFeedback(0, 1000, 0, 10);
47 AddPacketFeedback(0, 1000, 10, 20); 53 AddPacketFeedback(0, 1000, 10, 20);
48 AddPacketFeedback(0, 1000, 20, 30); 54 AddPacketFeedback(0, 1000, 20, 30);
49 AddPacketFeedback(0, 1000, 30, 40); 55 AddPacketFeedback(0, 1000, 30, 40);
50 56
51 EXPECT_NEAR(measured_bps_, 800000, 10); 57 EXPECT_NEAR(measured_bps_, 800000, 10);
52 } 58 }
53 59
60 TEST_F(TestProbeBitrateEstimator, OneClusterTooFewProbes) {
61 AddPacketFeedback(0, 1400, 0, 10);
62 AddPacketFeedback(0, 1400, 10, 20);
63 AddPacketFeedback(0, 1400, 20, 30);
terelius 2017/03/08 15:55:11 Could we make this test send 5000 bytes to make it
philipel 2017/03/09 11:47:41 Done.
64
65 EXPECT_EQ(kInvalidBitrate, measured_bps_);
66 }
67
68 TEST_F(TestProbeBitrateEstimator, OneClusterTooFewBytes) {
terelius 2017/03/08 15:55:11 Could we make this send 5 packets to make it clear
philipel 2017/03/09 11:47:41 Done.
69 const int kMinBytes = 6000;
70 AddPacketFeedback(0, 1000, 0, 10, kDefaultMinProbes, kMinBytes);
71 AddPacketFeedback(0, 1000, 10, 20, kDefaultMinProbes, kMinBytes);
72 AddPacketFeedback(0, 1000, 20, 30, kDefaultMinProbes, kMinBytes);
73 AddPacketFeedback(0, 1000, 30, 40, kDefaultMinProbes, kMinBytes);
74
75 EXPECT_EQ(kInvalidBitrate, measured_bps_);
76 }
77
78 TEST_F(TestProbeBitrateEstimator, SmallCluster) {
79 const int kMinBytes = 1000;
80 AddPacketFeedback(0, 150, 0, 10, kDefaultMinProbes, kMinBytes);
81 AddPacketFeedback(0, 150, 10, 20, kDefaultMinProbes, kMinBytes);
82 AddPacketFeedback(0, 150, 20, 30, kDefaultMinProbes, kMinBytes);
83 AddPacketFeedback(0, 150, 30, 40, kDefaultMinProbes, kMinBytes);
84 AddPacketFeedback(0, 150, 40, 50, kDefaultMinProbes, kMinBytes);
85 AddPacketFeedback(0, 150, 50, 60, kDefaultMinProbes, kMinBytes);
86 EXPECT_NEAR(measured_bps_, 120000, 10);
87 }
88
89 TEST_F(TestProbeBitrateEstimator, LargeCluster) {
90 const int kMinProbes = 30;
91 const int kMinBytes = 312500;
92
93 int64_t send_time = 0;
94 int64_t receive_time = 5;
95 for (int i = 0; i < 25; ++i) {
96 AddPacketFeedback(0, 12500, send_time, receive_time, kMinProbes, kMinBytes);
97 ++send_time;
98 ++receive_time;
99 }
100 EXPECT_NEAR(measured_bps_, 100000000, 10);
101 }
102
54 TEST_F(TestProbeBitrateEstimator, FastReceive) { 103 TEST_F(TestProbeBitrateEstimator, FastReceive) {
55 AddPacketFeedback(0, 1000, 0, 15); 104 AddPacketFeedback(0, 1000, 0, 15);
56 AddPacketFeedback(0, 1000, 10, 30); 105 AddPacketFeedback(0, 1000, 10, 30);
57 AddPacketFeedback(0, 1000, 20, 35); 106 AddPacketFeedback(0, 1000, 20, 35);
58 AddPacketFeedback(0, 1000, 30, 40); 107 AddPacketFeedback(0, 1000, 30, 40);
59 108
60 EXPECT_NEAR(measured_bps_, 800000, 10); 109 EXPECT_NEAR(measured_bps_, 800000, 10);
61 } 110 }
62 111
63 TEST_F(TestProbeBitrateEstimator, TooFastReceive) { 112 TEST_F(TestProbeBitrateEstimator, TooFastReceive) {
64 AddPacketFeedback(0, 1000, 0, 19); 113 AddPacketFeedback(0, 1000, 0, 19);
65 AddPacketFeedback(0, 1000, 10, 22); 114 AddPacketFeedback(0, 1000, 10, 22);
66 AddPacketFeedback(0, 1000, 20, 25); 115 AddPacketFeedback(0, 1000, 20, 25);
67 AddPacketFeedback(0, 1000, 40, 27); 116 AddPacketFeedback(0, 1000, 40, 27);
68 117
69 EXPECT_EQ(measured_bps_, INVALID_BPS); 118 EXPECT_EQ(kInvalidBitrate, measured_bps_);
terelius 2017/03/08 15:55:11 Is there a reason for switching order here? Or, mo
philipel 2017/03/09 11:47:41 No reason, fixed :)
70 } 119 }
71 120
72 TEST_F(TestProbeBitrateEstimator, SlowReceive) { 121 TEST_F(TestProbeBitrateEstimator, SlowReceive) {
73 AddPacketFeedback(0, 1000, 0, 10); 122 AddPacketFeedback(0, 1000, 0, 10);
74 AddPacketFeedback(0, 1000, 10, 40); 123 AddPacketFeedback(0, 1000, 10, 40);
75 AddPacketFeedback(0, 1000, 20, 70); 124 AddPacketFeedback(0, 1000, 20, 70);
76 AddPacketFeedback(0, 1000, 30, 85); 125 AddPacketFeedback(0, 1000, 30, 85);
77 126
78 EXPECT_NEAR(measured_bps_, 320000, 10); 127 EXPECT_NEAR(measured_bps_, 320000, 10);
79 } 128 }
80 129
81 TEST_F(TestProbeBitrateEstimator, BurstReceive) { 130 TEST_F(TestProbeBitrateEstimator, BurstReceive) {
82 AddPacketFeedback(0, 1000, 0, 50); 131 AddPacketFeedback(0, 1000, 0, 50);
83 AddPacketFeedback(0, 1000, 10, 50); 132 AddPacketFeedback(0, 1000, 10, 50);
84 AddPacketFeedback(0, 1000, 20, 50); 133 AddPacketFeedback(0, 1000, 20, 50);
85 AddPacketFeedback(0, 1000, 40, 50); 134 AddPacketFeedback(0, 1000, 40, 50);
86 135
87 EXPECT_EQ(measured_bps_, INVALID_BPS); 136 EXPECT_EQ(measured_bps_, kInvalidBitrate);
88 } 137 }
89 138
90 TEST_F(TestProbeBitrateEstimator, MultipleClusters) { 139 TEST_F(TestProbeBitrateEstimator, MultipleClusters) {
91 AddPacketFeedback(0, 1000, 0, 10); 140 AddPacketFeedback(0, 1000, 0, 10);
92 AddPacketFeedback(0, 1000, 10, 20); 141 AddPacketFeedback(0, 1000, 10, 20);
93 AddPacketFeedback(0, 1000, 20, 30); 142 AddPacketFeedback(0, 1000, 20, 30);
94 AddPacketFeedback(0, 1000, 40, 60); 143 AddPacketFeedback(0, 1000, 40, 60);
95
96 EXPECT_NEAR(measured_bps_, 480000, 10); 144 EXPECT_NEAR(measured_bps_, 480000, 10);
97 145
98 AddPacketFeedback(0, 1000, 50, 60); 146 AddPacketFeedback(0, 1000, 50, 60);
99
100 EXPECT_NEAR(measured_bps_, 640000, 10); 147 EXPECT_NEAR(measured_bps_, 640000, 10);
101 148
102 AddPacketFeedback(1, 1000, 60, 70); 149 AddPacketFeedback(1, 1000, 60, 70);
103 AddPacketFeedback(1, 1000, 65, 77); 150 AddPacketFeedback(1, 1000, 65, 77);
104 AddPacketFeedback(1, 1000, 70, 84); 151 AddPacketFeedback(1, 1000, 70, 84);
105 AddPacketFeedback(1, 1000, 75, 90); 152 AddPacketFeedback(1, 1000, 75, 90);
106 153
107 EXPECT_NEAR(measured_bps_, 1200000, 10); 154 EXPECT_NEAR(measured_bps_, 1200000, 10);
108 } 155 }
109 156
110 TEST_F(TestProbeBitrateEstimator, IgnoreOldClusters) { 157 TEST_F(TestProbeBitrateEstimator, IgnoreOldClusters) {
111 AddPacketFeedback(0, 1000, 0, 10); 158 AddPacketFeedback(0, 1000, 0, 10);
112 AddPacketFeedback(0, 1000, 10, 20); 159 AddPacketFeedback(0, 1000, 10, 20);
113 AddPacketFeedback(0, 1000, 20, 30); 160 AddPacketFeedback(0, 1000, 20, 30);
114 161
115 AddPacketFeedback(1, 1000, 60, 70); 162 AddPacketFeedback(1, 1000, 60, 70);
116 AddPacketFeedback(1, 1000, 65, 77); 163 AddPacketFeedback(1, 1000, 65, 77);
117 AddPacketFeedback(1, 1000, 70, 84); 164 AddPacketFeedback(1, 1000, 70, 84);
118 AddPacketFeedback(1, 1000, 75, 90); 165 AddPacketFeedback(1, 1000, 75, 90);
119 166
120 EXPECT_NEAR(measured_bps_, 1200000, 10); 167 EXPECT_NEAR(measured_bps_, 1200000, 10);
121 168
122 // Coming in 6s later 169 // Coming in 6s later
123 AddPacketFeedback(0, 1000, 40 + 6000, 60 + 6000); 170 AddPacketFeedback(0, 1000, 40 + 6000, 60 + 6000);
124 171
125 EXPECT_EQ(measured_bps_, INVALID_BPS); 172 EXPECT_EQ(measured_bps_, kInvalidBitrate);
126 } 173 }
127 174
128 TEST_F(TestProbeBitrateEstimator, IgnoreSizeLastSendPacket) { 175 TEST_F(TestProbeBitrateEstimator, IgnoreSizeLastSendPacket) {
129 AddPacketFeedback(0, 1000, 0, 10); 176 AddPacketFeedback(0, 1000, 0, 10);
130 AddPacketFeedback(0, 1000, 10, 20); 177 AddPacketFeedback(0, 1000, 10, 20);
131 AddPacketFeedback(0, 1000, 20, 30); 178 AddPacketFeedback(0, 1000, 20, 30);
132 AddPacketFeedback(0, 1000, 30, 40); 179 AddPacketFeedback(0, 1000, 30, 40);
133 AddPacketFeedback(0, 1500, 40, 50); 180 AddPacketFeedback(0, 1500, 40, 50);
134 181
135 EXPECT_NEAR(measured_bps_, 800000, 10); 182 EXPECT_NEAR(measured_bps_, 800000, 10);
136 } 183 }
137 184
138 TEST_F(TestProbeBitrateEstimator, IgnoreSizeFirstReceivePacket) { 185 TEST_F(TestProbeBitrateEstimator, IgnoreSizeFirstReceivePacket) {
139 AddPacketFeedback(0, 1500, 0, 10); 186 AddPacketFeedback(0, 1500, 0, 10);
140 AddPacketFeedback(0, 1000, 10, 20); 187 AddPacketFeedback(0, 1000, 10, 20);
141 AddPacketFeedback(0, 1000, 20, 30); 188 AddPacketFeedback(0, 1000, 20, 30);
142 AddPacketFeedback(0, 1000, 30, 40); 189 AddPacketFeedback(0, 1000, 30, 40);
143 190
144 EXPECT_NEAR(measured_bps_, 800000, 10); 191 EXPECT_NEAR(measured_bps_, 800000, 10);
145 } 192 }
146 193
147 } // namespace webrtc 194 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698