OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2015 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 34 matching lines...) Loading... |
45 int64_t timestamp_us = feedback_packet.GetBaseTimeUs(); | 45 int64_t timestamp_us = feedback_packet.GetBaseTimeUs(); |
46 for (const auto& rtp_packet_received : feedback_packet.GetReceivedPackets()) { | 46 for (const auto& rtp_packet_received : feedback_packet.GetReceivedPackets()) { |
47 timestamp_us += rtp_packet_received.delta_us(); | 47 timestamp_us += rtp_packet_received.delta_us(); |
48 timestamps.push_back(timestamp_us / 1000); | 48 timestamps.push_back(timestamp_us / 1000); |
49 } | 49 } |
50 return timestamps; | 50 return timestamps; |
51 } | 51 } |
52 | 52 |
53 class MockPacketRouter : public PacketRouter { | 53 class MockPacketRouter : public PacketRouter { |
54 public: | 54 public: |
55 MOCK_METHOD1(SendFeedback, bool(rtcp::TransportFeedback* feedback_packet)); | 55 MOCK_METHOD1(SendTransportFeedback, |
| 56 bool(rtcp::TransportFeedback* feedback_packet)); |
56 }; | 57 }; |
57 | 58 |
58 class RemoteEstimatorProxyTest : public ::testing::Test { | 59 class RemoteEstimatorProxyTest : public ::testing::Test { |
59 public: | 60 public: |
60 RemoteEstimatorProxyTest() : clock_(0), proxy_(&clock_, &router_) {} | 61 RemoteEstimatorProxyTest() : clock_(0), proxy_(&clock_, &router_) {} |
61 | 62 |
62 protected: | 63 protected: |
63 void IncomingPacket(uint16_t seq, int64_t time_ms) { | 64 void IncomingPacket(uint16_t seq, int64_t time_ms) { |
64 RTPHeader header; | 65 RTPHeader header; |
65 header.extension.hasTransportSequenceNumber = true; | 66 header.extension.hasTransportSequenceNumber = true; |
66 header.extension.transportSequenceNumber = seq; | 67 header.extension.transportSequenceNumber = seq; |
67 header.ssrc = kMediaSsrc; | 68 header.ssrc = kMediaSsrc; |
68 proxy_.IncomingPacket(time_ms, kDefaultPacketSize, header); | 69 proxy_.IncomingPacket(time_ms, kDefaultPacketSize, header); |
69 } | 70 } |
70 | 71 |
71 void Process() { | 72 void Process() { |
72 clock_.AdvanceTimeMilliseconds( | 73 clock_.AdvanceTimeMilliseconds( |
73 RemoteEstimatorProxy::kDefaultSendIntervalMs); | 74 RemoteEstimatorProxy::kDefaultSendIntervalMs); |
74 proxy_.Process(); | 75 proxy_.Process(); |
75 } | 76 } |
76 | 77 |
77 SimulatedClock clock_; | 78 SimulatedClock clock_; |
78 testing::StrictMock<MockPacketRouter> router_; | 79 testing::StrictMock<MockPacketRouter> router_; |
79 RemoteEstimatorProxy proxy_; | 80 RemoteEstimatorProxy proxy_; |
80 }; | 81 }; |
81 | 82 |
82 TEST_F(RemoteEstimatorProxyTest, SendsSinglePacketFeedback) { | 83 TEST_F(RemoteEstimatorProxyTest, SendsSinglePacketFeedback) { |
83 IncomingPacket(kBaseSeq, kBaseTimeMs); | 84 IncomingPacket(kBaseSeq, kBaseTimeMs); |
84 | 85 |
85 EXPECT_CALL(router_, SendFeedback(_)) | 86 EXPECT_CALL(router_, SendTransportFeedback(_)) |
86 .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) { | 87 .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) { |
87 EXPECT_EQ(kBaseSeq, feedback_packet->GetBaseSequence()); | 88 EXPECT_EQ(kBaseSeq, feedback_packet->GetBaseSequence()); |
88 EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc()); | 89 EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc()); |
89 | 90 |
90 EXPECT_THAT(SequenceNumbers(*feedback_packet), ElementsAre(kBaseSeq)); | 91 EXPECT_THAT(SequenceNumbers(*feedback_packet), ElementsAre(kBaseSeq)); |
91 EXPECT_THAT(TimestampsMs(*feedback_packet), ElementsAre(kBaseTimeMs)); | 92 EXPECT_THAT(TimestampsMs(*feedback_packet), ElementsAre(kBaseTimeMs)); |
92 return true; | 93 return true; |
93 })); | 94 })); |
94 | 95 |
95 Process(); | 96 Process(); |
96 } | 97 } |
97 | 98 |
98 TEST_F(RemoteEstimatorProxyTest, DuplicatedPackets) { | 99 TEST_F(RemoteEstimatorProxyTest, DuplicatedPackets) { |
99 IncomingPacket(kBaseSeq, kBaseTimeMs); | 100 IncomingPacket(kBaseSeq, kBaseTimeMs); |
100 IncomingPacket(kBaseSeq, kBaseTimeMs + 1000); | 101 IncomingPacket(kBaseSeq, kBaseTimeMs + 1000); |
101 | 102 |
102 EXPECT_CALL(router_, SendFeedback(_)) | 103 EXPECT_CALL(router_, SendTransportFeedback(_)) |
103 .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) { | 104 .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) { |
104 EXPECT_EQ(kBaseSeq, feedback_packet->GetBaseSequence()); | 105 EXPECT_EQ(kBaseSeq, feedback_packet->GetBaseSequence()); |
105 EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc()); | 106 EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc()); |
106 | 107 |
107 EXPECT_THAT(SequenceNumbers(*feedback_packet), ElementsAre(kBaseSeq)); | 108 EXPECT_THAT(SequenceNumbers(*feedback_packet), ElementsAre(kBaseSeq)); |
108 EXPECT_THAT(TimestampsMs(*feedback_packet), ElementsAre(kBaseTimeMs)); | 109 EXPECT_THAT(TimestampsMs(*feedback_packet), ElementsAre(kBaseTimeMs)); |
109 return true; | 110 return true; |
110 })); | 111 })); |
111 | 112 |
112 Process(); | 113 Process(); |
113 } | 114 } |
114 | 115 |
115 TEST_F(RemoteEstimatorProxyTest, FeedbackWithMissingStart) { | 116 TEST_F(RemoteEstimatorProxyTest, FeedbackWithMissingStart) { |
116 // First feedback. | 117 // First feedback. |
117 IncomingPacket(kBaseSeq, kBaseTimeMs); | 118 IncomingPacket(kBaseSeq, kBaseTimeMs); |
118 IncomingPacket(kBaseSeq + 1, kBaseTimeMs + 1000); | 119 IncomingPacket(kBaseSeq + 1, kBaseTimeMs + 1000); |
119 EXPECT_CALL(router_, SendFeedback(_)).WillOnce(Return(true)); | 120 EXPECT_CALL(router_, SendTransportFeedback(_)).WillOnce(Return(true)); |
120 Process(); | 121 Process(); |
121 | 122 |
122 // Second feedback starts with a missing packet (DROP kBaseSeq + 2). | 123 // Second feedback starts with a missing packet (DROP kBaseSeq + 2). |
123 IncomingPacket(kBaseSeq + 3, kBaseTimeMs + 3000); | 124 IncomingPacket(kBaseSeq + 3, kBaseTimeMs + 3000); |
124 | 125 |
125 EXPECT_CALL(router_, SendFeedback(_)) | 126 EXPECT_CALL(router_, SendTransportFeedback(_)) |
126 .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) { | 127 .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) { |
127 EXPECT_EQ(kBaseSeq + 2, feedback_packet->GetBaseSequence()); | 128 EXPECT_EQ(kBaseSeq + 2, feedback_packet->GetBaseSequence()); |
128 EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc()); | 129 EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc()); |
129 | 130 |
130 EXPECT_THAT(SequenceNumbers(*feedback_packet), | 131 EXPECT_THAT(SequenceNumbers(*feedback_packet), |
131 ElementsAre(kBaseSeq + 3)); | 132 ElementsAre(kBaseSeq + 3)); |
132 EXPECT_THAT(TimestampsMs(*feedback_packet), | 133 EXPECT_THAT(TimestampsMs(*feedback_packet), |
133 ElementsAre(kBaseTimeMs + 3000)); | 134 ElementsAre(kBaseTimeMs + 3000)); |
134 return true; | 135 return true; |
135 })); | 136 })); |
136 | 137 |
137 Process(); | 138 Process(); |
138 } | 139 } |
139 | 140 |
140 TEST_F(RemoteEstimatorProxyTest, SendsFeedbackWithVaryingDeltas) { | 141 TEST_F(RemoteEstimatorProxyTest, SendsFeedbackWithVaryingDeltas) { |
141 IncomingPacket(kBaseSeq, kBaseTimeMs); | 142 IncomingPacket(kBaseSeq, kBaseTimeMs); |
142 IncomingPacket(kBaseSeq + 1, kBaseTimeMs + kMaxSmallDeltaMs); | 143 IncomingPacket(kBaseSeq + 1, kBaseTimeMs + kMaxSmallDeltaMs); |
143 IncomingPacket(kBaseSeq + 2, kBaseTimeMs + (2 * kMaxSmallDeltaMs) + 1); | 144 IncomingPacket(kBaseSeq + 2, kBaseTimeMs + (2 * kMaxSmallDeltaMs) + 1); |
144 | 145 |
145 EXPECT_CALL(router_, SendFeedback(_)) | 146 EXPECT_CALL(router_, SendTransportFeedback(_)) |
146 .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) { | 147 .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) { |
147 EXPECT_EQ(kBaseSeq, feedback_packet->GetBaseSequence()); | 148 EXPECT_EQ(kBaseSeq, feedback_packet->GetBaseSequence()); |
148 EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc()); | 149 EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc()); |
149 | 150 |
150 EXPECT_THAT(SequenceNumbers(*feedback_packet), | 151 EXPECT_THAT(SequenceNumbers(*feedback_packet), |
151 ElementsAre(kBaseSeq, kBaseSeq + 1, kBaseSeq + 2)); | 152 ElementsAre(kBaseSeq, kBaseSeq + 1, kBaseSeq + 2)); |
152 EXPECT_THAT(TimestampsMs(*feedback_packet), | 153 EXPECT_THAT(TimestampsMs(*feedback_packet), |
153 ElementsAre(kBaseTimeMs, kBaseTimeMs + kMaxSmallDeltaMs, | 154 ElementsAre(kBaseTimeMs, kBaseTimeMs + kMaxSmallDeltaMs, |
154 kBaseTimeMs + (2 * kMaxSmallDeltaMs) + 1)); | 155 kBaseTimeMs + (2 * kMaxSmallDeltaMs) + 1)); |
155 return true; | 156 return true; |
156 })); | 157 })); |
157 | 158 |
158 Process(); | 159 Process(); |
159 } | 160 } |
160 | 161 |
161 TEST_F(RemoteEstimatorProxyTest, SendsFragmentedFeedback) { | 162 TEST_F(RemoteEstimatorProxyTest, SendsFragmentedFeedback) { |
162 static constexpr int64_t kTooLargeDelta = | 163 static constexpr int64_t kTooLargeDelta = |
163 rtcp::TransportFeedback::kDeltaScaleFactor * (1 << 16); | 164 rtcp::TransportFeedback::kDeltaScaleFactor * (1 << 16); |
164 | 165 |
165 IncomingPacket(kBaseSeq, kBaseTimeMs); | 166 IncomingPacket(kBaseSeq, kBaseTimeMs); |
166 IncomingPacket(kBaseSeq + 1, kBaseTimeMs + kTooLargeDelta); | 167 IncomingPacket(kBaseSeq + 1, kBaseTimeMs + kTooLargeDelta); |
167 | 168 |
168 EXPECT_CALL(router_, SendFeedback(_)) | 169 EXPECT_CALL(router_, SendTransportFeedback(_)) |
169 .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) { | 170 .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) { |
170 EXPECT_EQ(kBaseSeq, feedback_packet->GetBaseSequence()); | 171 EXPECT_EQ(kBaseSeq, feedback_packet->GetBaseSequence()); |
171 EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc()); | 172 EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc()); |
172 | 173 |
173 EXPECT_THAT(SequenceNumbers(*feedback_packet), ElementsAre(kBaseSeq)); | 174 EXPECT_THAT(SequenceNumbers(*feedback_packet), ElementsAre(kBaseSeq)); |
174 EXPECT_THAT(TimestampsMs(*feedback_packet), ElementsAre(kBaseTimeMs)); | 175 EXPECT_THAT(TimestampsMs(*feedback_packet), ElementsAre(kBaseTimeMs)); |
175 return true; | 176 return true; |
176 })) | 177 })) |
177 .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) { | 178 .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) { |
178 EXPECT_EQ(kBaseSeq + 1, feedback_packet->GetBaseSequence()); | 179 EXPECT_EQ(kBaseSeq + 1, feedback_packet->GetBaseSequence()); |
179 EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc()); | 180 EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc()); |
180 | 181 |
181 EXPECT_THAT(SequenceNumbers(*feedback_packet), | 182 EXPECT_THAT(SequenceNumbers(*feedback_packet), |
182 ElementsAre(kBaseSeq + 1)); | 183 ElementsAre(kBaseSeq + 1)); |
183 EXPECT_THAT(TimestampsMs(*feedback_packet), | 184 EXPECT_THAT(TimestampsMs(*feedback_packet), |
184 ElementsAre(kBaseTimeMs + kTooLargeDelta)); | 185 ElementsAre(kBaseTimeMs + kTooLargeDelta)); |
185 return true; | 186 return true; |
186 })); | 187 })); |
187 | 188 |
188 Process(); | 189 Process(); |
189 } | 190 } |
190 | 191 |
191 TEST_F(RemoteEstimatorProxyTest, GracefullyHandlesReorderingAndWrap) { | 192 TEST_F(RemoteEstimatorProxyTest, GracefullyHandlesReorderingAndWrap) { |
192 const int64_t kDeltaMs = 1000; | 193 const int64_t kDeltaMs = 1000; |
193 const uint16_t kLargeSeq = 62762; | 194 const uint16_t kLargeSeq = 62762; |
194 IncomingPacket(kBaseSeq, kBaseTimeMs); | 195 IncomingPacket(kBaseSeq, kBaseTimeMs); |
195 IncomingPacket(kLargeSeq, kBaseTimeMs + kDeltaMs); | 196 IncomingPacket(kLargeSeq, kBaseTimeMs + kDeltaMs); |
196 | 197 |
197 EXPECT_CALL(router_, SendFeedback(_)) | 198 EXPECT_CALL(router_, SendTransportFeedback(_)) |
198 .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) { | 199 .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) { |
199 EXPECT_EQ(kBaseSeq, feedback_packet->GetBaseSequence()); | 200 EXPECT_EQ(kBaseSeq, feedback_packet->GetBaseSequence()); |
200 EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc()); | 201 EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc()); |
201 | 202 |
202 EXPECT_THAT(TimestampsMs(*feedback_packet), ElementsAre(kBaseTimeMs)); | 203 EXPECT_THAT(TimestampsMs(*feedback_packet), ElementsAre(kBaseTimeMs)); |
203 return true; | 204 return true; |
204 })); | 205 })); |
205 | 206 |
206 Process(); | 207 Process(); |
207 } | 208 } |
208 | 209 |
209 TEST_F(RemoteEstimatorProxyTest, ResendsTimestampsOnReordering) { | 210 TEST_F(RemoteEstimatorProxyTest, ResendsTimestampsOnReordering) { |
210 IncomingPacket(kBaseSeq, kBaseTimeMs); | 211 IncomingPacket(kBaseSeq, kBaseTimeMs); |
211 IncomingPacket(kBaseSeq + 2, kBaseTimeMs + 2); | 212 IncomingPacket(kBaseSeq + 2, kBaseTimeMs + 2); |
212 | 213 |
213 EXPECT_CALL(router_, SendFeedback(_)) | 214 EXPECT_CALL(router_, SendTransportFeedback(_)) |
214 .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) { | 215 .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) { |
215 EXPECT_EQ(kBaseSeq, feedback_packet->GetBaseSequence()); | 216 EXPECT_EQ(kBaseSeq, feedback_packet->GetBaseSequence()); |
216 EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc()); | 217 EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc()); |
217 | 218 |
218 EXPECT_THAT(SequenceNumbers(*feedback_packet), | 219 EXPECT_THAT(SequenceNumbers(*feedback_packet), |
219 ElementsAre(kBaseSeq, kBaseSeq + 2)); | 220 ElementsAre(kBaseSeq, kBaseSeq + 2)); |
220 EXPECT_THAT(TimestampsMs(*feedback_packet), | 221 EXPECT_THAT(TimestampsMs(*feedback_packet), |
221 ElementsAre(kBaseTimeMs, kBaseTimeMs + 2)); | 222 ElementsAre(kBaseTimeMs, kBaseTimeMs + 2)); |
222 return true; | 223 return true; |
223 })); | 224 })); |
224 | 225 |
225 Process(); | 226 Process(); |
226 | 227 |
227 IncomingPacket(kBaseSeq + 1, kBaseTimeMs + 1); | 228 IncomingPacket(kBaseSeq + 1, kBaseTimeMs + 1); |
228 | 229 |
229 EXPECT_CALL(router_, SendFeedback(_)) | 230 EXPECT_CALL(router_, SendTransportFeedback(_)) |
230 .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) { | 231 .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) { |
231 EXPECT_EQ(kBaseSeq + 1, feedback_packet->GetBaseSequence()); | 232 EXPECT_EQ(kBaseSeq + 1, feedback_packet->GetBaseSequence()); |
232 EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc()); | 233 EXPECT_EQ(kMediaSsrc, feedback_packet->media_ssrc()); |
233 | 234 |
234 EXPECT_THAT(SequenceNumbers(*feedback_packet), | 235 EXPECT_THAT(SequenceNumbers(*feedback_packet), |
235 ElementsAre(kBaseSeq + 1, kBaseSeq + 2)); | 236 ElementsAre(kBaseSeq + 1, kBaseSeq + 2)); |
236 EXPECT_THAT(TimestampsMs(*feedback_packet), | 237 EXPECT_THAT(TimestampsMs(*feedback_packet), |
237 ElementsAre(kBaseTimeMs + 1, kBaseTimeMs + 2)); | 238 ElementsAre(kBaseTimeMs + 1, kBaseTimeMs + 2)); |
238 return true; | 239 return true; |
239 })); | 240 })); |
240 | 241 |
241 Process(); | 242 Process(); |
242 } | 243 } |
243 | 244 |
244 TEST_F(RemoteEstimatorProxyTest, RemovesTimestampsOutOfScope) { | 245 TEST_F(RemoteEstimatorProxyTest, RemovesTimestampsOutOfScope) { |
245 const int64_t kTimeoutTimeMs = | 246 const int64_t kTimeoutTimeMs = |
246 kBaseTimeMs + RemoteEstimatorProxy::kBackWindowMs; | 247 kBaseTimeMs + RemoteEstimatorProxy::kBackWindowMs; |
247 | 248 |
248 IncomingPacket(kBaseSeq + 2, kBaseTimeMs); | 249 IncomingPacket(kBaseSeq + 2, kBaseTimeMs); |
249 | 250 |
250 EXPECT_CALL(router_, SendFeedback(_)) | 251 EXPECT_CALL(router_, SendTransportFeedback(_)) |
251 .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) { | 252 .WillOnce(Invoke([](rtcp::TransportFeedback* feedback_packet) { |
252 EXPECT_EQ(kBaseSeq + 2, feedback_packet->GetBaseSequence()); | 253 EXPECT_EQ(kBaseSeq + 2, feedback_packet->GetBaseSequence()); |
253 | 254 |
254 EXPECT_THAT(TimestampsMs(*feedback_packet), ElementsAre(kBaseTimeMs)); | 255 EXPECT_THAT(TimestampsMs(*feedback_packet), ElementsAre(kBaseTimeMs)); |
255 return true; | 256 return true; |
256 })); | 257 })); |
257 | 258 |
258 Process(); | 259 Process(); |
259 | 260 |
260 IncomingPacket(kBaseSeq + 3, kTimeoutTimeMs); // kBaseSeq + 2 times out here. | 261 IncomingPacket(kBaseSeq + 3, kTimeoutTimeMs); // kBaseSeq + 2 times out here. |
261 | 262 |
262 EXPECT_CALL(router_, SendFeedback(_)) | 263 EXPECT_CALL(router_, SendTransportFeedback(_)) |
263 .WillOnce( | 264 .WillOnce( |
264 Invoke([kTimeoutTimeMs](rtcp::TransportFeedback* feedback_packet) { | 265 Invoke([kTimeoutTimeMs](rtcp::TransportFeedback* feedback_packet) { |
265 EXPECT_EQ(kBaseSeq + 3, feedback_packet->GetBaseSequence()); | 266 EXPECT_EQ(kBaseSeq + 3, feedback_packet->GetBaseSequence()); |
266 | 267 |
267 EXPECT_THAT(TimestampsMs(*feedback_packet), | 268 EXPECT_THAT(TimestampsMs(*feedback_packet), |
268 ElementsAre(kTimeoutTimeMs)); | 269 ElementsAre(kTimeoutTimeMs)); |
269 return true; | 270 return true; |
270 })); | 271 })); |
271 | 272 |
272 Process(); | 273 Process(); |
273 | 274 |
274 // New group, with sequence starting below the first so that they may be | 275 // New group, with sequence starting below the first so that they may be |
275 // retransmitted. | 276 // retransmitted. |
276 IncomingPacket(kBaseSeq, kBaseTimeMs - 1); | 277 IncomingPacket(kBaseSeq, kBaseTimeMs - 1); |
277 IncomingPacket(kBaseSeq + 1, kTimeoutTimeMs - 1); | 278 IncomingPacket(kBaseSeq + 1, kTimeoutTimeMs - 1); |
278 | 279 |
279 EXPECT_CALL(router_, SendFeedback(_)) | 280 EXPECT_CALL(router_, SendTransportFeedback(_)) |
280 .WillOnce( | 281 .WillOnce( |
281 Invoke([kTimeoutTimeMs](rtcp::TransportFeedback* feedback_packet) { | 282 Invoke([kTimeoutTimeMs](rtcp::TransportFeedback* feedback_packet) { |
282 EXPECT_EQ(kBaseSeq, feedback_packet->GetBaseSequence()); | 283 EXPECT_EQ(kBaseSeq, feedback_packet->GetBaseSequence()); |
283 | 284 |
284 EXPECT_THAT(SequenceNumbers(*feedback_packet), | 285 EXPECT_THAT(SequenceNumbers(*feedback_packet), |
285 ElementsAre(kBaseSeq, kBaseSeq + 1, kBaseSeq + 3)); | 286 ElementsAre(kBaseSeq, kBaseSeq + 1, kBaseSeq + 3)); |
286 EXPECT_THAT(TimestampsMs(*feedback_packet), | 287 EXPECT_THAT(TimestampsMs(*feedback_packet), |
287 ElementsAre(kBaseTimeMs - 1, kTimeoutTimeMs - 1, | 288 ElementsAre(kBaseTimeMs - 1, kTimeoutTimeMs - 1, |
288 kTimeoutTimeMs)); | 289 kTimeoutTimeMs)); |
289 return true; | 290 return true; |
(...skipping 38 matching lines...) Loading... |
328 | 329 |
329 TEST_F(RemoteEstimatorProxyTest, TwccReportsUse5PercentOfAvailableBandwidth) { | 330 TEST_F(RemoteEstimatorProxyTest, TwccReportsUse5PercentOfAvailableBandwidth) { |
330 Process(); | 331 Process(); |
331 proxy_.OnBitrateChanged(80000); | 332 proxy_.OnBitrateChanged(80000); |
332 // 80kbps * 0.05 = TwccReportSize(68B * 8b/B) * 1000ms / SendInterval(136ms) | 333 // 80kbps * 0.05 = TwccReportSize(68B * 8b/B) * 1000ms / SendInterval(136ms) |
333 EXPECT_EQ(136, proxy_.TimeUntilNextProcess()); | 334 EXPECT_EQ(136, proxy_.TimeUntilNextProcess()); |
334 } | 335 } |
335 | 336 |
336 } // namespace | 337 } // namespace |
337 } // namespace webrtc | 338 } // namespace webrtc |
OLD | NEW |