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

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: 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]) <<
55 "x = " << x << " / " << golden_packet->size();
54 if ((*golden_packet)[x] != packet->data[x]) 56 if ((*golden_packet)[x] != packet->data[x])
miu 2014/12/04 04:18:54 nit: braces around then-clause
hubbe 2014/12/05 23:57:20 Done.
55 break; 57 if (++diffs > 5)
58 break;
56 } 59 }
57 } 60 }
58 } 61 }
59 62
60 scoped_ptr<RtcpBuilder> rtcp_builder_; 63 scoped_ptr<RtcpBuilder> rtcp_builder_;
61 64
62 DISALLOW_COPY_AND_ASSIGN(RtcpBuilderTest); 65 DISALLOW_COPY_AND_ASSIGN(RtcpBuilderTest);
63 }; 66 };
64 67
65 TEST_F(RtcpBuilderTest, RtcpReceiverReport) { 68 TEST_F(RtcpBuilderTest, RtcpReceiverReport) {
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 PacketIdSet missing_packets; 187 PacketIdSet missing_packets;
185 cast_message.missing_frames_and_packets[kLostFrameId] = missing_packets; 188 cast_message.missing_frames_and_packets[kLostFrameId] = missing_packets;
186 189
187 missing_packets.insert(kLostPacketId1); 190 missing_packets.insert(kLostPacketId1);
188 missing_packets.insert(kLostPacketId2); 191 missing_packets.insert(kLostPacketId2);
189 missing_packets.insert(kLostPacketId3); 192 missing_packets.insert(kLostPacketId3);
190 cast_message.missing_frames_and_packets[kFrameIdWithLostPackets] = 193 cast_message.missing_frames_and_packets[kFrameIdWithLostPackets] =
191 missing_packets; 194 missing_packets;
192 195
193 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); 196 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT);
194 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; 197 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events;
195 198
196 ExpectPacketEQ(p.GetPacket().Pass(), 199 ExpectPacketEQ(p.GetPacket().Pass(),
197 rtcp_builder_->BuildRtcpFromReceiver( 200 rtcp_builder_->BuildRtcpFromReceiver(
198 &report_block, 201 &report_block,
199 &rrtr, 202 &rrtr,
200 &cast_message, 203 &cast_message,
201 &rtcp_events, 204 &rtcp_events,
202 kDefaultDelay)); 205 kDefaultDelay));
203 206
204 base::SimpleTestTickClock testing_clock; 207 base::SimpleTestTickClock testing_clock;
(...skipping 12 matching lines...) Expand all
217 event_subscriber.OnReceiveFrameEvent(frame_event); 220 event_subscriber.OnReceiveFrameEvent(frame_event);
218 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); 221 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs));
219 222
220 PacketEvent packet_event; 223 PacketEvent packet_event;
221 packet_event.rtp_timestamp = kRtpTimestamp; 224 packet_event.rtp_timestamp = kRtpTimestamp;
222 packet_event.type = PACKET_RECEIVED; 225 packet_event.type = PACKET_RECEIVED;
223 packet_event.media_type = VIDEO_EVENT; 226 packet_event.media_type = VIDEO_EVENT;
224 packet_event.timestamp = testing_clock.NowTicks(); 227 packet_event.timestamp = testing_clock.NowTicks();
225 packet_event.packet_id = kLostPacketId1; 228 packet_event.packet_id = kLostPacketId1;
226 event_subscriber.OnReceivePacketEvent(packet_event); 229 event_subscriber.OnReceivePacketEvent(packet_event);
227 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); 230 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events);
228 EXPECT_EQ(2u, rtcp_events.size()); 231 EXPECT_EQ(2u, rtcp_events.size());
229 232
230 ExpectPacketEQ( 233 ExpectPacketEQ(
231 p.GetPacket().Pass(), 234 p.GetPacket().Pass(),
232 rtcp_builder_->BuildRtcpFromReceiver( 235 rtcp_builder_->BuildRtcpFromReceiver(
233 &report_block, 236 &report_block,
234 &rrtr, 237 &rrtr,
235 &cast_message, 238 &cast_message,
236 &rtcp_events, 239 &rtcp_events,
237 kDefaultDelay)); 240 kDefaultDelay));
238 } 241 }
239 242
240 TEST_F(RtcpBuilderTest, RtcpReceiverReportWithOversizedFrameLog) { 243 TEST_F(RtcpBuilderTest, RtcpReceiverReportWithOversizedFrameLog) {
241 static const uint32 kTimeBaseMs = 12345678; 244 static const uint32 kTimeBaseMs = 12345678;
242 static const uint32 kTimeDelayMs = 10; 245 static const uint32 kTimeDelayMs = 10;
243 246
244 TestRtcpPacketBuilder p; 247 TestRtcpPacketBuilder p;
245 p.AddRr(kSendingSsrc, 1); 248 p.AddRr(kSendingSsrc, 1);
246 p.AddRb(kMediaSsrc); 249 p.AddRb(kMediaSsrc);
247 250
248 RtcpReportBlock report_block = GetReportBlock(); 251 RtcpReportBlock report_block = GetReportBlock();
249 252
250 base::SimpleTestTickClock testing_clock; 253 base::SimpleTestTickClock testing_clock;
251 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); 254 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
252 255
253 p.AddReceiverLog(kSendingSsrc); 256 p.AddReceiverLog(kSendingSsrc);
254 257
255 int remaining_bytes = kMaxReceiverLogBytes; 258 int num_events = kMaxEventsPerRTCP;
256 remaining_bytes -= kRtcpCastLogHeaderSize;
257 259
258 remaining_bytes -= kRtcpReceiverFrameLogSize;
259 int num_events = remaining_bytes / kRtcpReceiverEventLogSize;
260 EXPECT_LE(num_events, static_cast<int>(kRtcpMaxReceiverLogMessages)); 260 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( 261 p.AddReceiverFrameLog(
263 kRtpTimestamp + 2345, 262 kRtpTimestamp + 2345,
264 num_events, 263 num_events,
265 kTimeBaseMs + (kRtcpMaxReceiverLogMessages - num_events) * kTimeDelayMs); 264 kTimeBaseMs);
266 for (int i = 0; i < num_events; i++) { 265 for (int i = 0; i < num_events; i++) {
267 p.AddReceiverEventLog( 266 p.AddReceiverEventLog(
268 kLostPacketId1, PACKET_RECEIVED, 267 kLostPacketId1,
268 PACKET_RECEIVED,
269 static_cast<uint16>(kTimeDelayMs * i)); 269 static_cast<uint16>(kTimeDelayMs * i));
270 } 270 }
271 271
272 272
273 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); 273 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 274
281 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) { 275 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) {
282 PacketEvent packet_event; 276 PacketEvent packet_event;
283 packet_event.rtp_timestamp = kRtpTimestamp + 2345; 277 packet_event.rtp_timestamp = kRtpTimestamp + 2345;
284 packet_event.type = PACKET_RECEIVED; 278 packet_event.type = PACKET_RECEIVED;
285 packet_event.media_type = VIDEO_EVENT; 279 packet_event.media_type = VIDEO_EVENT;
286 packet_event.timestamp = testing_clock.NowTicks(); 280 packet_event.timestamp = testing_clock.NowTicks();
287 packet_event.packet_id = kLostPacketId1; 281 packet_event.packet_id = kLostPacketId1;
288 event_subscriber.OnReceivePacketEvent(packet_event); 282 event_subscriber.OnReceivePacketEvent(packet_event);
289 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); 283 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs));
290 } 284 }
291 285
292 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; 286 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events;
293 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); 287 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events);
294 288
295 ExpectPacketEQ(p.GetPacket().Pass(), 289 ExpectPacketEQ(p.GetPacket().Pass(),
296 rtcp_builder_->BuildRtcpFromReceiver( 290 rtcp_builder_->BuildRtcpFromReceiver(
297 &report_block, 291 &report_block,
298 NULL, 292 NULL,
299 NULL, 293 NULL,
300 &rtcp_events, 294 &rtcp_events,
301 kDefaultDelay)); 295 kDefaultDelay));
302 } 296 }
303 297
304 TEST_F(RtcpBuilderTest, RtcpReceiverReportWithTooManyLogFrames) { 298 TEST_F(RtcpBuilderTest, RtcpReceiverReportWithTooManyLogFrames) {
305 static const uint32 kTimeBaseMs = 12345678; 299 static const uint32 kTimeBaseMs = 12345678;
306 static const uint32 kTimeDelayMs = 10; 300 static const uint32 kTimeDelayMs = 10;
307 301
308 TestRtcpPacketBuilder p; 302 TestRtcpPacketBuilder p;
309 p.AddRr(kSendingSsrc, 1); 303 p.AddRr(kSendingSsrc, 1);
310 p.AddRb(kMediaSsrc); 304 p.AddRb(kMediaSsrc);
311 305
312 RtcpReportBlock report_block = GetReportBlock(); 306 RtcpReportBlock report_block = GetReportBlock();
313 307
314 base::SimpleTestTickClock testing_clock; 308 base::SimpleTestTickClock testing_clock;
315 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); 309 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
316 310
317 p.AddReceiverLog(kSendingSsrc); 311 p.AddReceiverLog(kSendingSsrc);
318 312
319 int remaining_bytes = kMaxReceiverLogBytes; 313 int num_events = kMaxEventsPerRTCP;
320 remaining_bytes -= kRtcpCastLogHeaderSize;
321 314
322 int num_events = 315 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); 316 p.AddReceiverFrameLog(kRtpTimestamp + i, 1, kTimeBaseMs + i * kTimeDelayMs);
330 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0); 317 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0);
331 } 318 }
332 319
333 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); 320 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT);
334 321
335 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) { 322 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) {
336 FrameEvent frame_event; 323 FrameEvent frame_event;
337 frame_event.rtp_timestamp = kRtpTimestamp + static_cast<int>(i); 324 frame_event.rtp_timestamp = kRtpTimestamp + static_cast<int>(i);
338 frame_event.type = FRAME_ACK_SENT; 325 frame_event.type = FRAME_ACK_SENT;
339 frame_event.media_type = VIDEO_EVENT; 326 frame_event.media_type = VIDEO_EVENT;
340 frame_event.timestamp = testing_clock.NowTicks(); 327 frame_event.timestamp = testing_clock.NowTicks();
341 event_subscriber.OnReceiveFrameEvent(frame_event); 328 event_subscriber.OnReceiveFrameEvent(frame_event);
342 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); 329 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs));
343 } 330 }
344 331
345 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; 332 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events;
346 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); 333 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events);
347 334
348 ExpectPacketEQ(p.GetPacket().Pass(), 335 ExpectPacketEQ(p.GetPacket().Pass(),
349 rtcp_builder_->BuildRtcpFromReceiver( 336 rtcp_builder_->BuildRtcpFromReceiver(
350 &report_block, 337 &report_block,
351 NULL, 338 NULL,
352 NULL, 339 NULL,
353 &rtcp_events, 340 &rtcp_events,
354 kDefaultDelay)); 341 kDefaultDelay));
355 } 342 }
356 343
(...skipping 25 matching lines...) Expand all
382 FrameEvent frame_event; 369 FrameEvent frame_event;
383 frame_event.rtp_timestamp = kRtpTimestamp; 370 frame_event.rtp_timestamp = kRtpTimestamp;
384 frame_event.type = FRAME_ACK_SENT; 371 frame_event.type = FRAME_ACK_SENT;
385 frame_event.media_type = VIDEO_EVENT; 372 frame_event.media_type = VIDEO_EVENT;
386 frame_event.timestamp = testing_clock.NowTicks(); 373 frame_event.timestamp = testing_clock.NowTicks();
387 event_subscriber.OnReceiveFrameEvent(frame_event); 374 event_subscriber.OnReceiveFrameEvent(frame_event);
388 testing_clock.Advance( 375 testing_clock.Advance(
389 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs)); 376 base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs));
390 } 377 }
391 378
392 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; 379 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events;
393 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); 380 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events);
394 381
395 ExpectPacketEQ(p.GetPacket().Pass(), 382 ExpectPacketEQ(p.GetPacket().Pass(),
396 rtcp_builder_->BuildRtcpFromReceiver( 383 rtcp_builder_->BuildRtcpFromReceiver(
397 &report_block, 384 &report_block,
398 NULL, 385 NULL,
399 NULL, 386 NULL,
400 &rtcp_events, 387 &rtcp_events,
401 kDefaultDelay)); 388 kDefaultDelay));
402 } 389 }
403 390
404 TEST_F(RtcpBuilderTest, RtcpReceiverReportRedundancy) { 391 TEST_F(RtcpBuilderTest, RtcpReceiverReportRedundancy) {
405 uint32 time_base_ms = 12345678; 392 uint32 time_base_ms = 12345678;
406 int kTimeBetweenEventsMs = 10; 393 int kTimeBetweenEventsMs = 10;
407 394
408 RtcpReportBlock report_block = GetReportBlock(); 395 RtcpReportBlock report_block = GetReportBlock();
409 396
410 base::SimpleTestTickClock testing_clock; 397 base::SimpleTestTickClock testing_clock;
411 testing_clock.Advance(base::TimeDelta::FromMilliseconds(time_base_ms)); 398 testing_clock.Advance(base::TimeDelta::FromMilliseconds(time_base_ms));
412 399
413 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); 400 ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT);
414 size_t packet_count = kReceiveLogMessageHistorySize + 10; 401 size_t packet_count = kNumResends * kResendDelay + 10;
415 for (size_t i = 0; i < packet_count; i++) { 402 for (size_t i = 0; i < packet_count; i++) {
416 TestRtcpPacketBuilder p; 403 TestRtcpPacketBuilder p;
417 p.AddRr(kSendingSsrc, 1); 404 p.AddRr(kSendingSsrc, 1);
418 p.AddRb(kMediaSsrc); 405 p.AddRb(kMediaSsrc);
419 406
420 p.AddReceiverLog(kSendingSsrc); 407 p.AddReceiverLog(kSendingSsrc);
421 408
422 if (i >= kSecondRedundancyOffset) { 409 int num_events = (i + kResendDelay) / kResendDelay;
423 p.AddReceiverFrameLog( 410 num_events = std::min<int>(num_events, kNumResends);
424 kRtpTimestamp, 411 p.AddReceiverFrameLog(kRtpTimestamp, num_events,
425 1, 412 time_base_ms - (num_events - 1) * kResendDelay *
426 time_base_ms - kSecondRedundancyOffset * kTimeBetweenEventsMs); 413 kTimeBetweenEventsMs);
427 p.AddReceiverEventLog(0, FRAME_ACK_SENT, 0); 414 for (int i = 0; i < num_events; i++) {
415 p.AddReceiverEventLog(0, FRAME_ACK_SENT,
416 i * kResendDelay * kTimeBetweenEventsMs);
428 } 417 }
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 418
439 FrameEvent frame_event; 419 FrameEvent frame_event;
440 frame_event.rtp_timestamp = kRtpTimestamp; 420 frame_event.rtp_timestamp = kRtpTimestamp;
441 frame_event.type = FRAME_ACK_SENT; 421 frame_event.type = FRAME_ACK_SENT;
442 frame_event.media_type = VIDEO_EVENT; 422 frame_event.media_type = VIDEO_EVENT;
443 frame_event.timestamp = testing_clock.NowTicks(); 423 frame_event.timestamp = testing_clock.NowTicks();
444 event_subscriber.OnReceiveFrameEvent(frame_event); 424 event_subscriber.OnReceiveFrameEvent(frame_event);
445 425
446 ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; 426 ReceiverRtcpEventSubscriber::RtcpEvents rtcp_events;
447 event_subscriber.GetRtcpEventsAndReset(&rtcp_events); 427 event_subscriber.GetRtcpEventsWithRedundancy(&rtcp_events);
448 428
449 ExpectPacketEQ(p.GetPacket().Pass(), 429 ExpectPacketEQ(p.GetPacket().Pass(),
450 rtcp_builder_->BuildRtcpFromReceiver( 430 rtcp_builder_->BuildRtcpFromReceiver(
451 &report_block, 431 &report_block,
452 NULL, 432 NULL,
453 NULL, 433 NULL,
454 &rtcp_events, 434 &rtcp_events,
455 kDefaultDelay)); 435 kDefaultDelay));
456 436
457 testing_clock.Advance( 437 testing_clock.Advance(
(...skipping 13 matching lines...) Expand all
471 // Sender report. 451 // Sender report.
472 TestRtcpPacketBuilder p; 452 TestRtcpPacketBuilder p;
473 p.AddSr(kSendingSsrc, 0); 453 p.AddSr(kSendingSsrc, 0);
474 454
475 ExpectPacketEQ(p.GetPacket().Pass(), 455 ExpectPacketEQ(p.GetPacket().Pass(),
476 rtcp_builder_->BuildRtcpFromSender(sender_info)); 456 rtcp_builder_->BuildRtcpFromSender(sender_info));
477 } 457 }
478 458
479 } // namespace cast 459 } // namespace cast
480 } // namespace media 460 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698