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

Side by Side Diff: media/cast/net/rtcp/rtcp_builder_unittest.cc

Issue 765643006: Cast: Make receiver use cast_transport (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix end2end test Created 6 years 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 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/memory/scoped_ptr.h" 5 #include "base/memory/scoped_ptr.h"
6 #include "base/test/simple_test_tick_clock.h" 6 #include "base/test/simple_test_tick_clock.h"
7 #include "media/cast/cast_defines.h" 7 #include "media/cast/cast_defines.h"
8 #include "media/cast/cast_environment.h" 8 #include "media/cast/cast_environment.h"
9 #include "media/cast/net/cast_transport_defines.h" 9 #include "media/cast/net/cast_transport_defines.h"
10 #include "media/cast/net/pacing/paced_sender.h" 10 #include "media/cast/net/pacing/paced_sender.h"
(...skipping 29 matching lines...) Expand all
40 } // namespace 40 } // namespace
41 41
42 42
43 class RtcpBuilderTest : public ::testing::Test { 43 class RtcpBuilderTest : public ::testing::Test {
44 protected: 44 protected:
45 RtcpBuilderTest() 45 RtcpBuilderTest()
46 : rtcp_builder_(new RtcpBuilder(kSendingSsrc)) {} 46 : rtcp_builder_(new RtcpBuilder(kSendingSsrc)) {}
47 47
48 void ExpectPacketEQ(scoped_ptr<Packet> golden_packet, 48 void ExpectPacketEQ(scoped_ptr<Packet> golden_packet,
49 PacketRef packet) { 49 PacketRef packet) {
50 int diffs = 0;
50 EXPECT_EQ(golden_packet->size(), packet->data.size()); 51 EXPECT_EQ(golden_packet->size(), packet->data.size());
51 if (golden_packet->size() == packet->data.size()) { 52 if (golden_packet->size() == packet->data.size()) {
52 for (size_t x = 0; x < golden_packet->size(); x++) { 53 for (size_t x = 0; x < golden_packet->size(); x++) {
53 EXPECT_EQ((*golden_packet)[x], packet->data[x]); 54 EXPECT_EQ((*golden_packet)[x], packet->data[x]) <<
54 if ((*golden_packet)[x] != packet->data[x]) 55 "x = " << x << " / " << golden_packet->size();
55 break; 56 if ((*golden_packet)[x] != packet->data[x]) {
57 if (++diffs > 5)
58 break;
59 }
56 } 60 }
57 } 61 }
58 } 62 }
59 63
60 scoped_ptr<RtcpBuilder> rtcp_builder_; 64 scoped_ptr<RtcpBuilder> rtcp_builder_;
61 65
62 DISALLOW_COPY_AND_ASSIGN(RtcpBuilderTest); 66 DISALLOW_COPY_AND_ASSIGN(RtcpBuilderTest);
63 }; 67 };
64 68
65 TEST_F(RtcpBuilderTest, RtcpReceiverReport) { 69 TEST_F(RtcpBuilderTest, RtcpReceiverReport) {
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 PacketIdSet missing_packets; 188 PacketIdSet missing_packets;
185 cast_message.missing_frames_and_packets[kLostFrameId] = missing_packets; 189 cast_message.missing_frames_and_packets[kLostFrameId] = missing_packets;
186 190
187 missing_packets.insert(kLostPacketId1); 191 missing_packets.insert(kLostPacketId1);
188 missing_packets.insert(kLostPacketId2); 192 missing_packets.insert(kLostPacketId2);
189 missing_packets.insert(kLostPacketId3); 193 missing_packets.insert(kLostPacketId3);
190 cast_message.missing_frames_and_packets[kFrameIdWithLostPackets] = 194 cast_message.missing_frames_and_packets[kFrameIdWithLostPackets] =
191 missing_packets; 195 missing_packets;
192 196
193 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); 197 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT);
194 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; 198 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events;
195 199
196 ExpectPacketEQ(p.GetPacket().Pass(), 200 ExpectPacketEQ(p.GetPacket().Pass(),
197 rtcp_builder_->BuildRtcpFromReceiver( 201 rtcp_builder_->BuildRtcpFromReceiver(
198 &report_block, 202 &report_block,
199 &rrtr, 203 &rrtr,
200 &cast_message, 204 &cast_message,
201 &rtcp_events, 205 &rtcp_events,
202 kDefaultDelay)); 206 kDefaultDelay));
203 207
204 base::SimpleTestTickClock testing_clock; 208 base::SimpleTestTickClock testing_clock;
(...skipping 12 matching lines...) Expand all
217 event_subscriber.OnReceiveFrameEvent(frame_event); 221 event_subscriber.OnReceiveFrameEvent(frame_event);
218 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); 222 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs));
219 223
220 PacketEvent packet_event; 224 PacketEvent packet_event;
221 packet_event.rtp_timestamp = kRtpTimestamp; 225 packet_event.rtp_timestamp = kRtpTimestamp;
222 packet_event.type = PACKET_RECEIVED; 226 packet_event.type = PACKET_RECEIVED;
223 packet_event.media_type = VIDEO_EVENT; 227 packet_event.media_type = VIDEO_EVENT;
224 packet_event.timestamp = testing_clock.NowTicks(); 228 packet_event.timestamp = testing_clock.NowTicks();
225 packet_event.packet_id = kLostPacketId1; 229 packet_event.packet_id = kLostPacketId1;
226 event_subscriber.OnReceivePacketEvent(packet_event); 230 event_subscriber.OnReceivePacketEvent(packet_event);
227 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); 231 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events);
228 EXPECT_EQ(2u, rtcp_events.size()); 232 EXPECT_EQ(2u, rtcp_events.size());
229 233
230 ExpectPacketEQ( 234 ExpectPacketEQ(
231 p.GetPacket().Pass(), 235 p.GetPacket().Pass(),
232 rtcp_builder_->BuildRtcpFromReceiver( 236 rtcp_builder_->BuildRtcpFromReceiver(
233 &report_block, 237 &report_block,
234 &rrtr, 238 &rrtr,
235 &cast_message, 239 &cast_message,
236 &rtcp_events, 240 &rtcp_events,
237 kDefaultDelay)); 241 kDefaultDelay));
238 } 242 }
239 243
240 TEST_F(RtcpBuilderTest, RtcpReceiverReportWithOversizedFrameLog) { 244 TEST_F(RtcpBuilderTest, RtcpReceiverReportWithOversizedFrameLog) {
241 static const uint32 kTimeBaseMs = 12345678; 245 static const uint32 kTimeBaseMs = 12345678;
242 static const uint32 kTimeDelayMs = 10; 246 static const uint32 kTimeDelayMs = 10;
243 247
244 TestRtcpPacketBuilder p; 248 TestRtcpPacketBuilder p;
245 p.AddRr(kSendingSsrc, 1); 249 p.AddRr(kSendingSsrc, 1);
246 p.AddRb(kMediaSsrc); 250 p.AddRb(kMediaSsrc);
247 251
248 RtcpReportBlock report_block = GetReportBlock(); 252 RtcpReportBlock report_block = GetReportBlock();
249 253
250 base::SimpleTestTickClock testing_clock; 254 base::SimpleTestTickClock testing_clock;
251 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); 255 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
252 256
253 p.AddReceiverLog(kSendingSsrc); 257 p.AddReceiverLog(kSendingSsrc);
254 258
255 int remaining_bytes = kMaxReceiverLogBytes; 259 int num_events = kMaxEventsPerRTCP;
256 remaining_bytes -= kRtcpCastLogHeaderSize;
257 260
258 remaining_bytes -= kRtcpReceiverFrameLogSize;
259 int num_events = remaining_bytes / kRtcpReceiverEventLogSize;
260 EXPECT_LE(num_events, static_cast<int>(kRtcpMaxReceiverLogMessages)); 261 EXPECT_LE(num_events, static_cast<int>(kRtcpMaxReceiverLogMessages));
261 // Only the last |num_events| events are sent due to receiver log size cap.
262 p.AddReceiverFrameLog( 262 p.AddReceiverFrameLog(
263 kRtpTimestamp + 2345, 263 kRtpTimestamp + 2345,
264 num_events, 264 num_events,
265 kTimeBaseMs + (kRtcpMaxReceiverLogMessages - num_events) * kTimeDelayMs); 265 kTimeBaseMs);
266 for (int i = 0; i < num_events; i++) { 266 for (int i = 0; i < num_events; i++) {
267 p.AddReceiverEventLog( 267 p.AddReceiverEventLog(
268 kLostPacketId1, PACKET_RECEIVED, 268 kLostPacketId1,
269 PACKET_RECEIVED,
269 static_cast<uint16>(kTimeDelayMs * i)); 270 static_cast<uint16>(kTimeDelayMs * i));
270 } 271 }
271 272
272 273
273 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); 274 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT);
274 FrameEvent frame_event;
275 frame_event.rtp_timestamp = kRtpTimestamp;
276 frame_event.type = FRAME_ACK_SENT;
277 frame_event.media_type = VIDEO_EVENT;
278 frame_event.timestamp = testing_clock.NowTicks();
279 event_subscriber.OnReceiveFrameEvent(frame_event);
280 275
281 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) { 276 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) {
282 PacketEvent packet_event; 277 PacketEvent packet_event;
283 packet_event.rtp_timestamp = kRtpTimestamp + 2345; 278 packet_event.rtp_timestamp = kRtpTimestamp + 2345;
284 packet_event.type = PACKET_RECEIVED; 279 packet_event.type = PACKET_RECEIVED;
285 packet_event.media_type = VIDEO_EVENT; 280 packet_event.media_type = VIDEO_EVENT;
286 packet_event.timestamp = testing_clock.NowTicks(); 281 packet_event.timestamp = testing_clock.NowTicks();
287 packet_event.packet_id = kLostPacketId1; 282 packet_event.packet_id = kLostPacketId1;
288 event_subscriber.OnReceivePacketEvent(packet_event); 283 event_subscriber.OnReceivePacketEvent(packet_event);
289 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); 284 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs));
290 } 285 }
291 286
292 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; 287 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events;
293 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); 288 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events);
294 289
295 ExpectPacketEQ(p.GetPacket().Pass(), 290 ExpectPacketEQ(p.GetPacket().Pass(),
296 rtcp_builder_->BuildRtcpFromReceiver( 291 rtcp_builder_->BuildRtcpFromReceiver(
297 &report_block, 292 &report_block,
298 NULL, 293 NULL,
299 NULL, 294 NULL,
300 &rtcp_events, 295 &rtcp_events,
301 kDefaultDelay)); 296 kDefaultDelay));
302 } 297 }
303 298
304 TEST_F(RtcpBuilderTest, RtcpReceiverReportWithTooManyLogFrames) { 299 TEST_F(RtcpBuilderTest, RtcpReceiverReportWithTooManyLogFrames) {
305 static const uint32 kTimeBaseMs = 12345678; 300 static const uint32 kTimeBaseMs = 12345678;
306 static const uint32 kTimeDelayMs = 10; 301 static const uint32 kTimeDelayMs = 10;
307 302
308 TestRtcpPacketBuilder p; 303 TestRtcpPacketBuilder p;
309 p.AddRr(kSendingSsrc, 1); 304 p.AddRr(kSendingSsrc, 1);
310 p.AddRb(kMediaSsrc); 305 p.AddRb(kMediaSsrc);
311 306
312 RtcpReportBlock report_block = GetReportBlock(); 307 RtcpReportBlock report_block = GetReportBlock();
313 308
314 base::SimpleTestTickClock testing_clock; 309 base::SimpleTestTickClock testing_clock;
315 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); 310 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
316 311
317 p.AddReceiverLog(kSendingSsrc); 312 p.AddReceiverLog(kSendingSsrc);
318 313
319 int remaining_bytes = kMaxReceiverLogBytes; 314 int num_events = kMaxEventsPerRTCP;
320 remaining_bytes -= kRtcpCastLogHeaderSize;
321 315
322 int num_events = 316 for (int i = 0; i < num_events; i++) {
323 remaining_bytes / (kRtcpReceiverFrameLogSize + kRtcpReceiverEventLogSize);
324
325 // The last |num_events| events are sent due to receiver log size cap.
326 for (size_t i = kRtcpMaxReceiverLogMessages - num_events;
327 i < kRtcpMaxReceiverLogMessages;
328 ++i) {
329 p.AddReceiverFrameLog(kRtpTimestamp + i, 1, kTimeBaseMs + i * kTimeDelayMs); 317 p.AddReceiverFrameLog(kRtpTimestamp + i, 1, kTimeBaseMs + i * kTimeDelayMs);
330 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0); 318 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0);
331 } 319 }
332 320
333 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); 321 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT);
334 322
335 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) { 323 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) {
336 FrameEvent frame_event; 324 FrameEvent frame_event;
337 frame_event.rtp_timestamp = kRtpTimestamp + static_cast<int>(i); 325 frame_event.rtp_timestamp = kRtpTimestamp + static_cast<int>(i);
338 frame_event.type = FRAME_ACK_SENT; 326 frame_event.type = FRAME_ACK_SENT;
339 frame_event.media_type = VIDEO_EVENT; 327 frame_event.media_type = VIDEO_EVENT;
340 frame_event.timestamp = testing_clock.NowTicks(); 328 frame_event.timestamp = testing_clock.NowTicks();
341 event_subscriber.OnReceiveFrameEvent(frame_event); 329 event_subscriber.OnReceiveFrameEvent(frame_event);
342 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); 330 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs));
343 } 331 }
344 332
345 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; 333 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events;
346 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); 334 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events);
347 335
348 ExpectPacketEQ(p.GetPacket().Pass(), 336 ExpectPacketEQ(p.GetPacket().Pass(),
349 rtcp_builder_->BuildRtcpFromReceiver( 337 rtcp_builder_->BuildRtcpFromReceiver(
350 &report_block, 338 &report_block,
351 NULL, 339 NULL,
352 NULL, 340 NULL,
353 &rtcp_events, 341 &rtcp_events,
354 kDefaultDelay)); 342 kDefaultDelay));
355 } 343 }
356 344
(...skipping 25 matching lines...) Expand all
382 FrameEvent frame_event; 370 FrameEvent frame_event;
383 frame_event.rtp_timestamp = kRtpTimestamp; 371 frame_event.rtp_timestamp = kRtpTimestamp;
384 frame_event.type = FRAME_ACK_SENT; 372 frame_event.type = FRAME_ACK_SENT;
385 frame_event.media_type = VIDEO_EVENT; 373 frame_event.media_type = VIDEO_EVENT;
386 frame_event.timestamp = testing_clock.NowTicks(); 374 frame_event.timestamp = testing_clock.NowTicks();
387 event_subscriber.OnReceiveFrameEvent(frame_event); 375 event_subscriber.OnReceiveFrameEvent(frame_event);
388 testing_clock.Advance( 376 testing_clock.Advance(
389 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs)); 377 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs));
390 } 378 }
391 379
392 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; 380 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events;
393 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); 381 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events);
394 382
395 ExpectPacketEQ(p.GetPacket().Pass(), 383 ExpectPacketEQ(p.GetPacket().Pass(),
396 rtcp_builder_->BuildRtcpFromReceiver( 384 rtcp_builder_->BuildRtcpFromReceiver(
397 &report_block, 385 &report_block,
398 NULL, 386 NULL,
399 NULL, 387 NULL,
400 &rtcp_events, 388 &rtcp_events,
401 kDefaultDelay)); 389 kDefaultDelay));
402 } 390 }
403 391
404 TEST_F(RtcpBuilderTest, RtcpReceiverReportRedundancy) { 392 TEST_F(RtcpBuilderTest, RtcpReceiverReportRedundancy) {
405 uint32 time_base_ms = 12345678; 393 uint32 time_base_ms = 12345678;
406 int kTimeBetweenEventsMs = 10; 394 int kTimeBetweenEventsMs = 10;
407 395
408 RtcpReportBlock report_block = GetReportBlock(); 396 RtcpReportBlock report_block = GetReportBlock();
409 397
410 base::SimpleTestTickClock testing_clock; 398 base::SimpleTestTickClock testing_clock;
411 testing_clock.Advance(base::TimeDelta::FromMilliseconds(time_base_ms)); 399 testing_clock.Advance(base::TimeDelta::FromMilliseconds(time_base_ms));
412 400
413 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); 401 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT);
414 size_t packet_count = kReceiveLogMessageHistorySize + 10; 402 size_t packet_count = kNumResends * kResendDelay + 10;
415 for (size_t i = 0; i < packet_count; i++) { 403 for (size_t i = 0; i < packet_count; i++) {
416 TestRtcpPacketBuilder p; 404 TestRtcpPacketBuilder p;
417 p.AddRr(kSendingSsrc, 1); 405 p.AddRr(kSendingSsrc, 1);
418 p.AddRb(kMediaSsrc); 406 p.AddRb(kMediaSsrc);
419 407
420 p.AddReceiverLog(kSendingSsrc); 408 p.AddReceiverLog(kSendingSsrc);
421 409
422 if (i >= kSecondRedundancyOffset) { 410 int num_events = (i + kResendDelay) / kResendDelay;
423 p.AddReceiverFrameLog( 411 num_events = std::min<int>(num_events, kNumResends);
424 kRtpTimestamp, 412 p.AddReceiverFrameLog(kRtpTimestamp, num_events,
425 1, 413 time_base_ms - (num_events - 1) * kResendDelay *
426 time_base_ms - kSecondRedundancyOffset * kTimeBetweenEventsMs); 414 kTimeBetweenEventsMs);
427 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0); 415 for (int i = 0; i < num_events; i++) {
416 p.AddReceiverEventLog(0, FRAME_ACK_SENT,
417 i * kResendDelay * kTimeBetweenEventsMs);
428 } 418 }
429 if (i >= kFirstRedundancyOffset) {
430 p.AddReceiverFrameLog(
431 kRtpTimestamp,
432 1,
433 time_base_ms - kFirstRedundancyOffset * kTimeBetweenEventsMs);
434 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0);
435 }
436 p.AddReceiverFrameLog(kRtpTimestamp, 1, time_base_ms);
437 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0);
438 419
439 FrameEvent frame_event; 420 FrameEvent frame_event;
440 frame_event.rtp_timestamp = kRtpTimestamp; 421 frame_event.rtp_timestamp = kRtpTimestamp;
441 frame_event.type = FRAME_ACK_SENT; 422 frame_event.type = FRAME_ACK_SENT;
442 frame_event.media_type = VIDEO_EVENT; 423 frame_event.media_type = VIDEO_EVENT;
443 frame_event.timestamp = testing_clock.NowTicks(); 424 frame_event.timestamp = testing_clock.NowTicks();
444 event_subscriber.OnReceiveFrameEvent(frame_event); 425 event_subscriber.OnReceiveFrameEvent(frame_event);
445 426
446 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; 427 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events;
447 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); 428 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events);
448 429
449 ExpectPacketEQ(p.GetPacket().Pass(), 430 ExpectPacketEQ(p.GetPacket().Pass(),
450 rtcp_builder_->BuildRtcpFromReceiver( 431 rtcp_builder_->BuildRtcpFromReceiver(
451 &report_block, 432 &report_block,
452 NULL, 433 NULL,
453 NULL, 434 NULL,
454 &rtcp_events, 435 &rtcp_events,
455 kDefaultDelay)); 436 kDefaultDelay));
456 437
457 testing_clock.Advance( 438 testing_clock.Advance(
(...skipping 13 matching lines...) Expand all
471 // Sender report. 452 // Sender report.
472 TestRtcpPacketBuilder p; 453 TestRtcpPacketBuilder p;
473 p.AddSr(kSendingSsrc, 0); 454 p.AddSr(kSendingSsrc, 0);
474 455
475 ExpectPacketEQ(p.GetPacket().Pass(), 456 ExpectPacketEQ(p.GetPacket().Pass(),
476 rtcp_builder_->BuildRtcpFromSender(sender_info)); 457 rtcp_builder_->BuildRtcpFromSender(sender_info));
477 } 458 }
478 459
479 } // namespace cast 460 } // namespace cast
480 } // namespace media 461 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698