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 30 matching lines...) Expand all Loading... |
41 proxy_.IncomingPacket(time_ms, kDefaultPacketSize, header); | 41 proxy_.IncomingPacket(time_ms, kDefaultPacketSize, header); |
42 } | 42 } |
43 | 43 |
44 void Process() { | 44 void Process() { |
45 clock_.AdvanceTimeMilliseconds( | 45 clock_.AdvanceTimeMilliseconds( |
46 RemoteEstimatorProxy::kDefaultProcessIntervalMs); | 46 RemoteEstimatorProxy::kDefaultProcessIntervalMs); |
47 proxy_.Process(); | 47 proxy_.Process(); |
48 } | 48 } |
49 | 49 |
50 SimulatedClock clock_; | 50 SimulatedClock clock_; |
51 MockPacketRouter router_; | 51 testing::StrictMock<MockPacketRouter> router_; |
52 RemoteEstimatorProxy proxy_; | 52 RemoteEstimatorProxy proxy_; |
53 | 53 |
54 const size_t kDefaultPacketSize = 100; | 54 const size_t kDefaultPacketSize = 100; |
55 const uint32_t kMediaSsrc = 456; | 55 const uint32_t kMediaSsrc = 456; |
56 const uint16_t kBaseSeq = 10; | 56 const uint16_t kBaseSeq = 10; |
57 const int64_t kBaseTimeMs = 123; | 57 const int64_t kBaseTimeMs = 123; |
58 const int64_t kMaxSmallDeltaMs = | 58 const int64_t kMaxSmallDeltaMs = |
59 (rtcp::TransportFeedback::kDeltaScaleFactor * 0xFF) / 1000; | 59 (rtcp::TransportFeedback::kDeltaScaleFactor * 0xFF) / 1000; |
60 }; | 60 }; |
61 | 61 |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 EXPECT_EQ(1u, delta_vec.size()); | 218 EXPECT_EQ(1u, delta_vec.size()); |
219 EXPECT_EQ(kBaseTimeMs + kTooLargeDelta, | 219 EXPECT_EQ(kBaseTimeMs + kTooLargeDelta, |
220 (packet->GetBaseTimeUs() + delta_vec[0]) / 1000); | 220 (packet->GetBaseTimeUs() + delta_vec[0]) / 1000); |
221 return true; | 221 return true; |
222 })) | 222 })) |
223 .RetiresOnSaturation(); | 223 .RetiresOnSaturation(); |
224 | 224 |
225 Process(); | 225 Process(); |
226 } | 226 } |
227 | 227 |
| 228 TEST_F(RemoteEstimatorProxyTest, GracefullyHandlesReorderingAndWrap) { |
| 229 const int64_t kDeltaMs = 1000; |
| 230 const uint16_t kLargeSeq = 62762; |
| 231 IncomingPacket(kBaseSeq, kBaseTimeMs); |
| 232 IncomingPacket(kLargeSeq, kBaseTimeMs + kDeltaMs); |
| 233 |
| 234 EXPECT_CALL(router_, SendFeedback(_)) |
| 235 .Times(1) |
| 236 .WillOnce(Invoke([this](rtcp::TransportFeedback* packet) { |
| 237 packet->Build(); |
| 238 EXPECT_EQ(kBaseSeq, packet->GetBaseSequence()); |
| 239 EXPECT_EQ(kMediaSsrc, packet->GetMediaSourceSsrc()); |
| 240 |
| 241 std::vector<int64_t> delta_vec = packet->GetReceiveDeltasUs(); |
| 242 EXPECT_EQ(1u, delta_vec.size()); |
| 243 EXPECT_EQ(kBaseTimeMs, (packet->GetBaseTimeUs() + delta_vec[0]) / 1000); |
| 244 return true; |
| 245 })); |
| 246 |
| 247 Process(); |
| 248 } |
| 249 |
228 TEST_F(RemoteEstimatorProxyTest, ResendsTimestampsOnReordering) { | 250 TEST_F(RemoteEstimatorProxyTest, ResendsTimestampsOnReordering) { |
229 IncomingPacket(kBaseSeq, kBaseTimeMs); | 251 IncomingPacket(kBaseSeq, kBaseTimeMs); |
230 IncomingPacket(kBaseSeq + 2, kBaseTimeMs + 2); | 252 IncomingPacket(kBaseSeq + 2, kBaseTimeMs + 2); |
231 | 253 |
232 EXPECT_CALL(router_, SendFeedback(_)) | 254 EXPECT_CALL(router_, SendFeedback(_)) |
233 .Times(1) | 255 .Times(1) |
234 .WillOnce(Invoke([this](rtcp::TransportFeedback* packet) { | 256 .WillOnce(Invoke([this](rtcp::TransportFeedback* packet) { |
235 packet->Build(); | 257 packet->Build(); |
236 EXPECT_EQ(kBaseSeq, packet->GetBaseSequence()); | 258 EXPECT_EQ(kBaseSeq, packet->GetBaseSequence()); |
237 EXPECT_EQ(kMediaSsrc, packet->GetMediaSourceSsrc()); | 259 EXPECT_EQ(kMediaSsrc, packet->GetMediaSourceSsrc()); |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
323 (packet->GetBaseTimeUs() + delta_vec[0]) / 1000); | 345 (packet->GetBaseTimeUs() + delta_vec[0]) / 1000); |
324 EXPECT_EQ(kTimeoutTimeMs - kBaseTimeMs, delta_vec[1] / 1000); | 346 EXPECT_EQ(kTimeoutTimeMs - kBaseTimeMs, delta_vec[1] / 1000); |
325 EXPECT_EQ(1, delta_vec[2] / 1000); | 347 EXPECT_EQ(1, delta_vec[2] / 1000); |
326 return true; | 348 return true; |
327 })); | 349 })); |
328 | 350 |
329 Process(); | 351 Process(); |
330 } | 352 } |
331 | 353 |
332 } // namespace webrtc | 354 } // namespace webrtc |
OLD | NEW |