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

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: kNumProbes --> kNumProbesCluster 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
« no previous file with comments | « webrtc/modules/congestion_controller/probe_bitrate_estimator.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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,
38 int min_probes = kDefaultMinProbes,
39 int min_bytes = kDefaultMinBytes) {
40 PacedPacketInfo pacing_info(probe_cluster_id, min_probes, min_bytes);
34 PacketFeedback packet_feedback(arrival_time_ms, send_time_ms, 0, size_bytes, 41 PacketFeedback packet_feedback(arrival_time_ms, send_time_ms, 0, size_bytes,
35 PacedPacketInfo(probe_cluster_id, -1, -1)); 42 pacing_info);
36 measured_bps_ = 43 measured_bps_ =
37 probe_bitrate_estimator_.HandleProbeAndEstimateBitrate(packet_feedback); 44 probe_bitrate_estimator_.HandleProbeAndEstimateBitrate(packet_feedback);
38 } 45 }
39 46
40 protected: 47 protected:
41 int measured_bps_ = INVALID_BPS; 48 int measured_bps_ = kInvalidBitrate;
42 ProbeBitrateEstimator probe_bitrate_estimator_; 49 ProbeBitrateEstimator probe_bitrate_estimator_;
43 }; 50 };
44 51
45 TEST_F(TestProbeBitrateEstimator, OneCluster) { 52 TEST_F(TestProbeBitrateEstimator, OneCluster) {
46 AddPacketFeedback(0, 1000, 0, 10); 53 AddPacketFeedback(0, 1000, 0, 10);
47 AddPacketFeedback(0, 1000, 10, 20); 54 AddPacketFeedback(0, 1000, 10, 20);
48 AddPacketFeedback(0, 1000, 20, 30); 55 AddPacketFeedback(0, 1000, 20, 30);
49 AddPacketFeedback(0, 1000, 30, 40); 56 AddPacketFeedback(0, 1000, 30, 40);
50 57
51 EXPECT_NEAR(measured_bps_, 800000, 10); 58 EXPECT_NEAR(measured_bps_, 800000, 10);
52 } 59 }
53 60
61 TEST_F(TestProbeBitrateEstimator, OneClusterTooFewProbes) {
62 AddPacketFeedback(0, 2000, 0, 10);
63 AddPacketFeedback(0, 2000, 10, 20);
64 AddPacketFeedback(0, 2000, 20, 30);
65
66 EXPECT_EQ(kInvalidBitrate, measured_bps_);
67 }
68
69 TEST_F(TestProbeBitrateEstimator, OneClusterTooFewBytes) {
70 const int kMinBytes = 6000;
71 AddPacketFeedback(0, 800, 0, 10, kDefaultMinProbes, kMinBytes);
72 AddPacketFeedback(0, 800, 10, 20, kDefaultMinProbes, kMinBytes);
73 AddPacketFeedback(0, 800, 20, 30, kDefaultMinProbes, kMinBytes);
74 AddPacketFeedback(0, 800, 30, 40, kDefaultMinProbes, kMinBytes);
75 AddPacketFeedback(0, 800, 40, 50, kDefaultMinProbes, kMinBytes);
76
77 EXPECT_EQ(kInvalidBitrate, measured_bps_);
78 }
79
80 TEST_F(TestProbeBitrateEstimator, SmallCluster) {
81 const int kMinBytes = 1000;
82 AddPacketFeedback(0, 150, 0, 10, kDefaultMinProbes, kMinBytes);
83 AddPacketFeedback(0, 150, 10, 20, kDefaultMinProbes, kMinBytes);
84 AddPacketFeedback(0, 150, 20, 30, kDefaultMinProbes, kMinBytes);
85 AddPacketFeedback(0, 150, 30, 40, kDefaultMinProbes, kMinBytes);
86 AddPacketFeedback(0, 150, 40, 50, kDefaultMinProbes, kMinBytes);
87 AddPacketFeedback(0, 150, 50, 60, kDefaultMinProbes, kMinBytes);
88 EXPECT_NEAR(measured_bps_, 120000, 10);
89 }
90
91 TEST_F(TestProbeBitrateEstimator, LargeCluster) {
92 const int kMinProbes = 30;
93 const int kMinBytes = 312500;
94
95 int64_t send_time = 0;
96 int64_t receive_time = 5;
97 for (int i = 0; i < 25; ++i) {
98 AddPacketFeedback(0, 12500, send_time, receive_time, kMinProbes, kMinBytes);
99 ++send_time;
100 ++receive_time;
101 }
102 EXPECT_NEAR(measured_bps_, 100000000, 10);
103 }
104
54 TEST_F(TestProbeBitrateEstimator, FastReceive) { 105 TEST_F(TestProbeBitrateEstimator, FastReceive) {
55 AddPacketFeedback(0, 1000, 0, 15); 106 AddPacketFeedback(0, 1000, 0, 15);
56 AddPacketFeedback(0, 1000, 10, 30); 107 AddPacketFeedback(0, 1000, 10, 30);
57 AddPacketFeedback(0, 1000, 20, 35); 108 AddPacketFeedback(0, 1000, 20, 35);
58 AddPacketFeedback(0, 1000, 30, 40); 109 AddPacketFeedback(0, 1000, 30, 40);
59 110
60 EXPECT_NEAR(measured_bps_, 800000, 10); 111 EXPECT_NEAR(measured_bps_, 800000, 10);
61 } 112 }
62 113
63 TEST_F(TestProbeBitrateEstimator, TooFastReceive) { 114 TEST_F(TestProbeBitrateEstimator, TooFastReceive) {
64 AddPacketFeedback(0, 1000, 0, 19); 115 AddPacketFeedback(0, 1000, 0, 19);
65 AddPacketFeedback(0, 1000, 10, 22); 116 AddPacketFeedback(0, 1000, 10, 22);
66 AddPacketFeedback(0, 1000, 20, 25); 117 AddPacketFeedback(0, 1000, 20, 25);
67 AddPacketFeedback(0, 1000, 40, 27); 118 AddPacketFeedback(0, 1000, 40, 27);
68 119
69 EXPECT_EQ(measured_bps_, INVALID_BPS); 120 EXPECT_EQ(measured_bps_, kInvalidBitrate);
70 } 121 }
71 122
72 TEST_F(TestProbeBitrateEstimator, SlowReceive) { 123 TEST_F(TestProbeBitrateEstimator, SlowReceive) {
73 AddPacketFeedback(0, 1000, 0, 10); 124 AddPacketFeedback(0, 1000, 0, 10);
74 AddPacketFeedback(0, 1000, 10, 40); 125 AddPacketFeedback(0, 1000, 10, 40);
75 AddPacketFeedback(0, 1000, 20, 70); 126 AddPacketFeedback(0, 1000, 20, 70);
76 AddPacketFeedback(0, 1000, 30, 85); 127 AddPacketFeedback(0, 1000, 30, 85);
77 128
78 EXPECT_NEAR(measured_bps_, 320000, 10); 129 EXPECT_NEAR(measured_bps_, 320000, 10);
79 } 130 }
80 131
81 TEST_F(TestProbeBitrateEstimator, BurstReceive) { 132 TEST_F(TestProbeBitrateEstimator, BurstReceive) {
82 AddPacketFeedback(0, 1000, 0, 50); 133 AddPacketFeedback(0, 1000, 0, 50);
83 AddPacketFeedback(0, 1000, 10, 50); 134 AddPacketFeedback(0, 1000, 10, 50);
84 AddPacketFeedback(0, 1000, 20, 50); 135 AddPacketFeedback(0, 1000, 20, 50);
85 AddPacketFeedback(0, 1000, 40, 50); 136 AddPacketFeedback(0, 1000, 40, 50);
86 137
87 EXPECT_EQ(measured_bps_, INVALID_BPS); 138 EXPECT_EQ(measured_bps_, kInvalidBitrate);
88 } 139 }
89 140
90 TEST_F(TestProbeBitrateEstimator, MultipleClusters) { 141 TEST_F(TestProbeBitrateEstimator, MultipleClusters) {
91 AddPacketFeedback(0, 1000, 0, 10); 142 AddPacketFeedback(0, 1000, 0, 10);
92 AddPacketFeedback(0, 1000, 10, 20); 143 AddPacketFeedback(0, 1000, 10, 20);
93 AddPacketFeedback(0, 1000, 20, 30); 144 AddPacketFeedback(0, 1000, 20, 30);
94 AddPacketFeedback(0, 1000, 40, 60); 145 AddPacketFeedback(0, 1000, 40, 60);
95
96 EXPECT_NEAR(measured_bps_, 480000, 10); 146 EXPECT_NEAR(measured_bps_, 480000, 10);
97 147
98 AddPacketFeedback(0, 1000, 50, 60); 148 AddPacketFeedback(0, 1000, 50, 60);
99
100 EXPECT_NEAR(measured_bps_, 640000, 10); 149 EXPECT_NEAR(measured_bps_, 640000, 10);
101 150
102 AddPacketFeedback(1, 1000, 60, 70); 151 AddPacketFeedback(1, 1000, 60, 70);
103 AddPacketFeedback(1, 1000, 65, 77); 152 AddPacketFeedback(1, 1000, 65, 77);
104 AddPacketFeedback(1, 1000, 70, 84); 153 AddPacketFeedback(1, 1000, 70, 84);
105 AddPacketFeedback(1, 1000, 75, 90); 154 AddPacketFeedback(1, 1000, 75, 90);
106 155
107 EXPECT_NEAR(measured_bps_, 1200000, 10); 156 EXPECT_NEAR(measured_bps_, 1200000, 10);
108 } 157 }
109 158
110 TEST_F(TestProbeBitrateEstimator, IgnoreOldClusters) { 159 TEST_F(TestProbeBitrateEstimator, IgnoreOldClusters) {
111 AddPacketFeedback(0, 1000, 0, 10); 160 AddPacketFeedback(0, 1000, 0, 10);
112 AddPacketFeedback(0, 1000, 10, 20); 161 AddPacketFeedback(0, 1000, 10, 20);
113 AddPacketFeedback(0, 1000, 20, 30); 162 AddPacketFeedback(0, 1000, 20, 30);
114 163
115 AddPacketFeedback(1, 1000, 60, 70); 164 AddPacketFeedback(1, 1000, 60, 70);
116 AddPacketFeedback(1, 1000, 65, 77); 165 AddPacketFeedback(1, 1000, 65, 77);
117 AddPacketFeedback(1, 1000, 70, 84); 166 AddPacketFeedback(1, 1000, 70, 84);
118 AddPacketFeedback(1, 1000, 75, 90); 167 AddPacketFeedback(1, 1000, 75, 90);
119 168
120 EXPECT_NEAR(measured_bps_, 1200000, 10); 169 EXPECT_NEAR(measured_bps_, 1200000, 10);
121 170
122 // Coming in 6s later 171 // Coming in 6s later
123 AddPacketFeedback(0, 1000, 40 + 6000, 60 + 6000); 172 AddPacketFeedback(0, 1000, 40 + 6000, 60 + 6000);
124 173
125 EXPECT_EQ(measured_bps_, INVALID_BPS); 174 EXPECT_EQ(measured_bps_, kInvalidBitrate);
126 } 175 }
127 176
128 TEST_F(TestProbeBitrateEstimator, IgnoreSizeLastSendPacket) { 177 TEST_F(TestProbeBitrateEstimator, IgnoreSizeLastSendPacket) {
129 AddPacketFeedback(0, 1000, 0, 10); 178 AddPacketFeedback(0, 1000, 0, 10);
130 AddPacketFeedback(0, 1000, 10, 20); 179 AddPacketFeedback(0, 1000, 10, 20);
131 AddPacketFeedback(0, 1000, 20, 30); 180 AddPacketFeedback(0, 1000, 20, 30);
132 AddPacketFeedback(0, 1000, 30, 40); 181 AddPacketFeedback(0, 1000, 30, 40);
133 AddPacketFeedback(0, 1500, 40, 50); 182 AddPacketFeedback(0, 1500, 40, 50);
134 183
135 EXPECT_NEAR(measured_bps_, 800000, 10); 184 EXPECT_NEAR(measured_bps_, 800000, 10);
136 } 185 }
137 186
138 TEST_F(TestProbeBitrateEstimator, IgnoreSizeFirstReceivePacket) { 187 TEST_F(TestProbeBitrateEstimator, IgnoreSizeFirstReceivePacket) {
139 AddPacketFeedback(0, 1500, 0, 10); 188 AddPacketFeedback(0, 1500, 0, 10);
140 AddPacketFeedback(0, 1000, 10, 20); 189 AddPacketFeedback(0, 1000, 10, 20);
141 AddPacketFeedback(0, 1000, 20, 30); 190 AddPacketFeedback(0, 1000, 20, 30);
142 AddPacketFeedback(0, 1000, 30, 40); 191 AddPacketFeedback(0, 1000, 30, 40);
143 192
144 EXPECT_NEAR(measured_bps_, 800000, 10); 193 EXPECT_NEAR(measured_bps_, 800000, 10);
145 } 194 }
146 195
147 } // namespace webrtc 196 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/congestion_controller/probe_bitrate_estimator.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698