OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 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 |
(...skipping 12 matching lines...) Expand all Loading... |
23 #include "webrtc/video_engine/vie_remb.h" | 23 #include "webrtc/video_engine/vie_remb.h" |
24 | 24 |
25 using ::testing::_; | 25 using ::testing::_; |
26 using ::testing::AnyNumber; | 26 using ::testing::AnyNumber; |
27 using ::testing::NiceMock; | 27 using ::testing::NiceMock; |
28 using ::testing::Return; | 28 using ::testing::Return; |
29 | 29 |
30 namespace webrtc { | 30 namespace webrtc { |
31 | 31 |
32 class ViERembTest : public ::testing::Test { | 32 class ViERembTest : public ::testing::Test { |
| 33 public: |
| 34 ViERembTest() : fake_clock_(12345) {} |
| 35 |
33 protected: | 36 protected: |
34 virtual void SetUp() { | 37 virtual void SetUp() { |
35 TickTime::UseFakeClock(12345); | |
36 process_thread_.reset(new NiceMock<MockProcessThread>); | 38 process_thread_.reset(new NiceMock<MockProcessThread>); |
37 vie_remb_.reset(new VieRemb()); | 39 vie_remb_.reset(new VieRemb(&fake_clock_)); |
38 } | 40 } |
| 41 SimulatedClock fake_clock_; |
39 rtc::scoped_ptr<MockProcessThread> process_thread_; | 42 rtc::scoped_ptr<MockProcessThread> process_thread_; |
40 rtc::scoped_ptr<VieRemb> vie_remb_; | 43 rtc::scoped_ptr<VieRemb> vie_remb_; |
41 }; | 44 }; |
42 | 45 |
43 TEST_F(ViERembTest, OneModuleTestForSendingRemb) { | 46 TEST_F(ViERembTest, OneModuleTestForSendingRemb) { |
44 MockRtpRtcp rtp; | 47 MockRtpRtcp rtp; |
45 vie_remb_->AddReceiveChannel(&rtp); | 48 vie_remb_->AddReceiveChannel(&rtp); |
46 vie_remb_->AddRembSender(&rtp); | 49 vie_remb_->AddRembSender(&rtp); |
47 | 50 |
48 const unsigned int bitrate_estimate = 456; | 51 const unsigned int bitrate_estimate = 456; |
49 unsigned int ssrc = 1234; | 52 unsigned int ssrc = 1234; |
50 std::vector<unsigned int> ssrcs(&ssrc, &ssrc + 1); | 53 std::vector<unsigned int> ssrcs(&ssrc, &ssrc + 1); |
51 | 54 |
52 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); | 55 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); |
53 | 56 |
54 TickTime::AdvanceFakeClock(1000); | 57 fake_clock_.AdvanceTimeMilliseconds(1000); |
55 EXPECT_CALL(rtp, SetREMBData(bitrate_estimate, ssrcs)) | 58 EXPECT_CALL(rtp, SetREMBData(bitrate_estimate, ssrcs)) |
56 .Times(1); | 59 .Times(1); |
57 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); | 60 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); |
58 | 61 |
59 // Lower bitrate to send another REMB packet. | 62 // Lower bitrate to send another REMB packet. |
60 EXPECT_CALL(rtp, SetREMBData(bitrate_estimate - 100, ssrcs)) | 63 EXPECT_CALL(rtp, SetREMBData(bitrate_estimate - 100, ssrcs)) |
61 .Times(1); | 64 .Times(1); |
62 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate - 100); | 65 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate - 100); |
63 | 66 |
64 vie_remb_->RemoveReceiveChannel(&rtp); | 67 vie_remb_->RemoveReceiveChannel(&rtp); |
65 vie_remb_->RemoveRembSender(&rtp); | 68 vie_remb_->RemoveRembSender(&rtp); |
66 } | 69 } |
67 | 70 |
68 TEST_F(ViERembTest, LowerEstimateToSendRemb) { | 71 TEST_F(ViERembTest, LowerEstimateToSendRemb) { |
69 MockRtpRtcp rtp; | 72 MockRtpRtcp rtp; |
70 vie_remb_->AddReceiveChannel(&rtp); | 73 vie_remb_->AddReceiveChannel(&rtp); |
71 vie_remb_->AddRembSender(&rtp); | 74 vie_remb_->AddRembSender(&rtp); |
72 | 75 |
73 unsigned int bitrate_estimate = 456; | 76 unsigned int bitrate_estimate = 456; |
74 unsigned int ssrc = 1234; | 77 unsigned int ssrc = 1234; |
75 std::vector<unsigned int> ssrcs(&ssrc, &ssrc + 1); | 78 std::vector<unsigned int> ssrcs(&ssrc, &ssrc + 1); |
76 | 79 |
77 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); | 80 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); |
78 // Call OnReceiveBitrateChanged twice to get a first estimate. | 81 // Call OnReceiveBitrateChanged twice to get a first estimate. |
79 TickTime::AdvanceFakeClock(1000); | 82 fake_clock_.AdvanceTimeMilliseconds(1000); |
80 EXPECT_CALL(rtp, SetREMBData(bitrate_estimate, ssrcs)) | 83 EXPECT_CALL(rtp, SetREMBData(bitrate_estimate, ssrcs)) |
81 .Times(1); | 84 .Times(1); |
82 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); | 85 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); |
83 | 86 |
84 // Lower the estimate with more than 3% to trigger a call to SetREMBData right | 87 // Lower the estimate with more than 3% to trigger a call to SetREMBData right |
85 // away. | 88 // away. |
86 bitrate_estimate = bitrate_estimate - 100; | 89 bitrate_estimate = bitrate_estimate - 100; |
87 EXPECT_CALL(rtp, SetREMBData(bitrate_estimate, ssrcs)) | 90 EXPECT_CALL(rtp, SetREMBData(bitrate_estimate, ssrcs)) |
88 .Times(1); | 91 .Times(1); |
89 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); | 92 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); |
90 } | 93 } |
91 | 94 |
92 TEST_F(ViERembTest, VerifyIncreasingAndDecreasing) { | 95 TEST_F(ViERembTest, VerifyIncreasingAndDecreasing) { |
93 MockRtpRtcp rtp_0; | 96 MockRtpRtcp rtp_0; |
94 MockRtpRtcp rtp_1; | 97 MockRtpRtcp rtp_1; |
95 vie_remb_->AddReceiveChannel(&rtp_0); | 98 vie_remb_->AddReceiveChannel(&rtp_0); |
96 vie_remb_->AddRembSender(&rtp_0); | 99 vie_remb_->AddRembSender(&rtp_0); |
97 vie_remb_->AddReceiveChannel(&rtp_1); | 100 vie_remb_->AddReceiveChannel(&rtp_1); |
98 | 101 |
99 unsigned int bitrate_estimate[] = { 456, 789 }; | 102 unsigned int bitrate_estimate[] = { 456, 789 }; |
100 unsigned int ssrc[] = { 1234, 5678 }; | 103 unsigned int ssrc[] = { 1234, 5678 }; |
101 std::vector<unsigned int> ssrcs(ssrc, ssrc + sizeof(ssrc) / sizeof(ssrc[0])); | 104 std::vector<unsigned int> ssrcs(ssrc, ssrc + sizeof(ssrc) / sizeof(ssrc[0])); |
102 | 105 |
103 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate[0]); | 106 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate[0]); |
104 | 107 |
105 // Call OnReceiveBitrateChanged twice to get a first estimate. | 108 // Call OnReceiveBitrateChanged twice to get a first estimate. |
106 EXPECT_CALL(rtp_0, SetREMBData(bitrate_estimate[0], ssrcs)) | 109 EXPECT_CALL(rtp_0, SetREMBData(bitrate_estimate[0], ssrcs)) |
107 .Times(1); | 110 .Times(1); |
108 TickTime::AdvanceFakeClock(1000); | 111 fake_clock_.AdvanceTimeMilliseconds(1000); |
109 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate[0]); | 112 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate[0]); |
110 | 113 |
111 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate[1] + 100); | 114 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate[1] + 100); |
112 | 115 |
113 // Lower the estimate to trigger a callback. | 116 // Lower the estimate to trigger a callback. |
114 EXPECT_CALL(rtp_0, SetREMBData(bitrate_estimate[1], ssrcs)) | 117 EXPECT_CALL(rtp_0, SetREMBData(bitrate_estimate[1], ssrcs)) |
115 .Times(1); | 118 .Times(1); |
116 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate[1]); | 119 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate[1]); |
117 | 120 |
118 vie_remb_->RemoveReceiveChannel(&rtp_0); | 121 vie_remb_->RemoveReceiveChannel(&rtp_0); |
119 vie_remb_->RemoveRembSender(&rtp_0); | 122 vie_remb_->RemoveRembSender(&rtp_0); |
120 vie_remb_->RemoveReceiveChannel(&rtp_1); | 123 vie_remb_->RemoveReceiveChannel(&rtp_1); |
121 } | 124 } |
122 | 125 |
123 TEST_F(ViERembTest, NoRembForIncreasedBitrate) { | 126 TEST_F(ViERembTest, NoRembForIncreasedBitrate) { |
124 MockRtpRtcp rtp_0; | 127 MockRtpRtcp rtp_0; |
125 MockRtpRtcp rtp_1; | 128 MockRtpRtcp rtp_1; |
126 vie_remb_->AddReceiveChannel(&rtp_0); | 129 vie_remb_->AddReceiveChannel(&rtp_0); |
127 vie_remb_->AddRembSender(&rtp_0); | 130 vie_remb_->AddRembSender(&rtp_0); |
128 vie_remb_->AddReceiveChannel(&rtp_1); | 131 vie_remb_->AddReceiveChannel(&rtp_1); |
129 | 132 |
130 unsigned int bitrate_estimate = 456; | 133 unsigned int bitrate_estimate = 456; |
131 unsigned int ssrc[] = { 1234, 5678 }; | 134 unsigned int ssrc[] = { 1234, 5678 }; |
132 std::vector<unsigned int> ssrcs(ssrc, ssrc + sizeof(ssrc) / sizeof(ssrc[0])); | 135 std::vector<unsigned int> ssrcs(ssrc, ssrc + sizeof(ssrc) / sizeof(ssrc[0])); |
133 | 136 |
134 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); | 137 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); |
135 // Call OnReceiveBitrateChanged twice to get a first estimate. | 138 // Call OnReceiveBitrateChanged twice to get a first estimate. |
136 TickTime::AdvanceFakeClock(1000); | 139 fake_clock_.AdvanceTimeMilliseconds(1000); |
137 EXPECT_CALL(rtp_0, SetREMBData(bitrate_estimate, ssrcs)) | 140 EXPECT_CALL(rtp_0, SetREMBData(bitrate_estimate, ssrcs)) |
138 .Times(1); | 141 .Times(1); |
139 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); | 142 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); |
140 | 143 |
141 // Increased estimate shouldn't trigger a callback right away. | 144 // Increased estimate shouldn't trigger a callback right away. |
142 EXPECT_CALL(rtp_0, SetREMBData(_, _)) | 145 EXPECT_CALL(rtp_0, SetREMBData(_, _)) |
143 .Times(0); | 146 .Times(0); |
144 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate + 1); | 147 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate + 1); |
145 | 148 |
146 // Decreasing the estimate less than 3% shouldn't trigger a new callback. | 149 // Decreasing the estimate less than 3% shouldn't trigger a new callback. |
(...skipping 13 matching lines...) Expand all Loading... |
160 vie_remb_->AddReceiveChannel(&rtp_0); | 163 vie_remb_->AddReceiveChannel(&rtp_0); |
161 vie_remb_->AddRembSender(&rtp_0); | 164 vie_remb_->AddRembSender(&rtp_0); |
162 vie_remb_->AddReceiveChannel(&rtp_1); | 165 vie_remb_->AddReceiveChannel(&rtp_1); |
163 | 166 |
164 unsigned int bitrate_estimate = 456; | 167 unsigned int bitrate_estimate = 456; |
165 unsigned int ssrc[] = { 1234, 5678 }; | 168 unsigned int ssrc[] = { 1234, 5678 }; |
166 std::vector<unsigned int> ssrcs(ssrc, ssrc + sizeof(ssrc) / sizeof(ssrc[0])); | 169 std::vector<unsigned int> ssrcs(ssrc, ssrc + sizeof(ssrc) / sizeof(ssrc[0])); |
167 | 170 |
168 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); | 171 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); |
169 // Call OnReceiveBitrateChanged twice to get a first estimate. | 172 // Call OnReceiveBitrateChanged twice to get a first estimate. |
170 TickTime::AdvanceFakeClock(1000); | 173 fake_clock_.AdvanceTimeMilliseconds(1000); |
171 EXPECT_CALL(rtp_0, SetREMBData(bitrate_estimate, ssrcs)) | 174 EXPECT_CALL(rtp_0, SetREMBData(bitrate_estimate, ssrcs)) |
172 .Times(1); | 175 .Times(1); |
173 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); | 176 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); |
174 | 177 |
175 // Decrease estimate to trigger a REMB. | 178 // Decrease estimate to trigger a REMB. |
176 bitrate_estimate = bitrate_estimate - 100; | 179 bitrate_estimate = bitrate_estimate - 100; |
177 EXPECT_CALL(rtp_0, SetREMBData(bitrate_estimate, ssrcs)) | 180 EXPECT_CALL(rtp_0, SetREMBData(bitrate_estimate, ssrcs)) |
178 .Times(1); | 181 .Times(1); |
179 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); | 182 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); |
180 | 183 |
(...skipping 15 matching lines...) Expand all Loading... |
196 TEST_F(ViERembTest, OnlyOneRembForDoubleProcess) { | 199 TEST_F(ViERembTest, OnlyOneRembForDoubleProcess) { |
197 MockRtpRtcp rtp; | 200 MockRtpRtcp rtp; |
198 unsigned int bitrate_estimate = 456; | 201 unsigned int bitrate_estimate = 456; |
199 unsigned int ssrc = 1234; | 202 unsigned int ssrc = 1234; |
200 std::vector<unsigned int> ssrcs(&ssrc, &ssrc + 1); | 203 std::vector<unsigned int> ssrcs(&ssrc, &ssrc + 1); |
201 | 204 |
202 vie_remb_->AddReceiveChannel(&rtp); | 205 vie_remb_->AddReceiveChannel(&rtp); |
203 vie_remb_->AddRembSender(&rtp); | 206 vie_remb_->AddRembSender(&rtp); |
204 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); | 207 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); |
205 // Call OnReceiveBitrateChanged twice to get a first estimate. | 208 // Call OnReceiveBitrateChanged twice to get a first estimate. |
206 TickTime::AdvanceFakeClock(1000); | 209 fake_clock_.AdvanceTimeMilliseconds(1000); |
207 EXPECT_CALL(rtp, SetREMBData(_, _)) | 210 EXPECT_CALL(rtp, SetREMBData(_, _)) |
208 .Times(1); | 211 .Times(1); |
209 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); | 212 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); |
210 | 213 |
211 // Lower the estimate, should trigger a call to SetREMBData right away. | 214 // Lower the estimate, should trigger a call to SetREMBData right away. |
212 bitrate_estimate = bitrate_estimate - 100; | 215 bitrate_estimate = bitrate_estimate - 100; |
213 EXPECT_CALL(rtp, SetREMBData(bitrate_estimate, ssrcs)) | 216 EXPECT_CALL(rtp, SetREMBData(bitrate_estimate, ssrcs)) |
214 .Times(1); | 217 .Times(1); |
215 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); | 218 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); |
216 | 219 |
(...skipping 11 matching lines...) Expand all Loading... |
228 MockRtpRtcp rtp; | 231 MockRtpRtcp rtp; |
229 vie_remb_->AddReceiveChannel(&rtp); | 232 vie_remb_->AddReceiveChannel(&rtp); |
230 | 233 |
231 unsigned int bitrate_estimate = 456; | 234 unsigned int bitrate_estimate = 456; |
232 unsigned int ssrc = 1234; | 235 unsigned int ssrc = 1234; |
233 std::vector<unsigned int> ssrcs(&ssrc, &ssrc + 1); | 236 std::vector<unsigned int> ssrcs(&ssrc, &ssrc + 1); |
234 | 237 |
235 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); | 238 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); |
236 | 239 |
237 // Call OnReceiveBitrateChanged twice to get a first estimate. | 240 // Call OnReceiveBitrateChanged twice to get a first estimate. |
238 TickTime::AdvanceFakeClock(1000); | 241 fake_clock_.AdvanceTimeMilliseconds(1000); |
239 EXPECT_CALL(rtp, SetREMBData(_, _)) | 242 EXPECT_CALL(rtp, SetREMBData(_, _)) |
240 .Times(1); | 243 .Times(1); |
241 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); | 244 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); |
242 | 245 |
243 // Lower the estimate to trigger a new packet REMB packet. | 246 // Lower the estimate to trigger a new packet REMB packet. |
244 bitrate_estimate = bitrate_estimate - 100; | 247 bitrate_estimate = bitrate_estimate - 100; |
245 EXPECT_CALL(rtp, SetREMBData(_, _)) | 248 EXPECT_CALL(rtp, SetREMBData(_, _)) |
246 .Times(1); | 249 .Times(1); |
247 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); | 250 vie_remb_->OnReceiveBitrateChanged(ssrcs, bitrate_estimate); |
248 } | 251 } |
249 | 252 |
250 } // namespace webrtc | 253 } // namespace webrtc |
OLD | NEW |