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

Side by Side Diff: media/cast/rtcp/rtcp_sender_unittest.cc

Issue 162333002: Cast: Rtcp and RtcpSender don't take event logs (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: cast Created 6 years, 10 months 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 | Annotate | Revision Log
« no previous file with comments | « media/cast/rtcp/rtcp_sender.cc ('k') | media/cast/video_receiver/video_receiver.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/rtcp/receiver_rtcp_event_subscriber.h"
9 #include "media/cast/rtcp/rtcp_sender.h" 10 #include "media/cast/rtcp/rtcp_sender.h"
10 #include "media/cast/rtcp/rtcp_utility.h" 11 #include "media/cast/rtcp/rtcp_utility.h"
11 #include "media/cast/rtcp/test_rtcp_packet_builder.h" 12 #include "media/cast/rtcp/test_rtcp_packet_builder.h"
12 #include "media/cast/test/fake_single_thread_task_runner.h" 13 #include "media/cast/test/fake_single_thread_task_runner.h"
13 #include "media/cast/transport/cast_transport_defines.h" 14 #include "media/cast/transport/cast_transport_defines.h"
14 #include "media/cast/transport/pacing/paced_sender.h" 15 #include "media/cast/transport/pacing/paced_sender.h"
15 #include "testing/gmock/include/gmock/gmock.h" 16 #include "testing/gmock/include/gmock/gmock.h"
16 17
17 namespace media { 18 namespace media {
18 namespace cast { 19 namespace cast {
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 &rrtr, 236 &rrtr,
236 &cast_message, 237 &cast_message,
237 NULL); 238 NULL);
238 239
239 EXPECT_EQ(1, test_transport_.packet_count()); 240 EXPECT_EQ(1, test_transport_.packet_count());
240 } 241 }
241 242
242 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtrCastMessageAndLog) { 243 TEST_F(RtcpSenderTest, RtcpReceiverReportWithRrtrCastMessageAndLog) {
243 static const uint32 kTimeBaseMs = 12345678; 244 static const uint32 kTimeBaseMs = 12345678;
244 static const uint32 kTimeDelayMs = 10; 245 static const uint32 kTimeDelayMs = 10;
245 static const uint32 kDelayDeltaMs = 123;
246 246
247 TestRtcpPacketBuilder p; 247 TestRtcpPacketBuilder p;
248 p.AddRr(kSendingSsrc, 1); 248 p.AddRr(kSendingSsrc, 1);
249 p.AddRb(kMediaSsrc); 249 p.AddRb(kMediaSsrc);
250 p.AddSdesCname(kSendingSsrc, kCName); 250 p.AddSdesCname(kSendingSsrc, kCName);
251 p.AddXrHeader(kSendingSsrc); 251 p.AddXrHeader(kSendingSsrc);
252 p.AddXrRrtrBlock(); 252 p.AddXrRrtrBlock();
253 p.AddCast(kSendingSsrc, kMediaSsrc); 253 p.AddCast(kSendingSsrc, kMediaSsrc);
254 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); 254 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass());
255 255
(...skipping 16 matching lines...) Expand all
272 cast_message.ack_frame_id_ = kAckFrameId; 272 cast_message.ack_frame_id_ = kAckFrameId;
273 PacketIdSet missing_packets; 273 PacketIdSet missing_packets;
274 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets; 274 cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets;
275 275
276 missing_packets.insert(kLostPacketId1); 276 missing_packets.insert(kLostPacketId1);
277 missing_packets.insert(kLostPacketId2); 277 missing_packets.insert(kLostPacketId2);
278 missing_packets.insert(kLostPacketId3); 278 missing_packets.insert(kLostPacketId3);
279 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = 279 cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] =
280 missing_packets; 280 missing_packets;
281 281
282 // Test empty Log message. 282 ReceiverRtcpEventSubscriber event_subscriber(
283 RtcpReceiverLogMessage receiver_log; 283 500, ReceiverRtcpEventSubscriber::kVideoEventSubscriber);
284 284
285 rtcp_sender_->SendRtcpFromRtpReceiver( 285 rtcp_sender_->SendRtcpFromRtpReceiver(
286 RtcpSender::kRtcpRr | RtcpSender::kRtcpRrtr | RtcpSender::kRtcpCast | 286 RtcpSender::kRtcpRr | RtcpSender::kRtcpRrtr | RtcpSender::kRtcpCast |
287 RtcpSender::kRtcpReceiverLog, 287 RtcpSender::kRtcpReceiverLog,
288 &report_block, 288 &report_block,
289 &rrtr, 289 &rrtr,
290 &cast_message, 290 &cast_message,
291 &receiver_log); 291 &event_subscriber);
292 292
293 base::SimpleTestTickClock testing_clock; 293 base::SimpleTestTickClock testing_clock;
294 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); 294 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
295 295
296 p.AddReceiverLog(kSendingSsrc); 296 p.AddReceiverLog(kSendingSsrc);
297 p.AddReceiverFrameLog(kRtpTimestamp, 2, kTimeBaseMs); 297 p.AddReceiverFrameLog(kRtpTimestamp, 2, kTimeBaseMs);
298 p.AddReceiverEventLog(kDelayDeltaMs, 5, 0); 298 p.AddReceiverEventLog(0, 5, 0);
299 p.AddReceiverEventLog(kLostPacketId1, 8, kTimeDelayMs); 299 p.AddReceiverEventLog(kLostPacketId1, 8, kTimeDelayMs);
300 300
301 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); 301 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass());
302 302
303 RtcpReceiverFrameLogMessage frame_log(kRtpTimestamp); 303 FrameEvent frame_event;
304 RtcpReceiverEventLogMessage event_log; 304 frame_event.rtp_timestamp = kRtpTimestamp;
305 frame_event.type = kVideoAckSent;
306 frame_event.timestamp = testing_clock.NowTicks();
307 event_subscriber.OnReceiveFrameEvent(frame_event);
308 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs));
305 309
306 event_log.type = kVideoAckSent; 310 PacketEvent packet_event;
307 event_log.event_timestamp = testing_clock.NowTicks(); 311 packet_event.rtp_timestamp = kRtpTimestamp;
308 event_log.delay_delta = base::TimeDelta::FromMilliseconds(kDelayDeltaMs); 312 packet_event.type = kVideoPacketReceived;
309 frame_log.event_log_messages_.push_back(event_log); 313 packet_event.timestamp = testing_clock.NowTicks();
310 314 packet_event.packet_id = kLostPacketId1;
311 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); 315 event_subscriber.OnReceivePacketEvent(packet_event);
312 event_log.type = kVideoPacketReceived;
313 event_log.event_timestamp = testing_clock.NowTicks();
314 event_log.packet_id = kLostPacketId1;
315 frame_log.event_log_messages_.push_back(event_log);
316
317 receiver_log.push_back(frame_log);
318 316
319 rtcp_sender_->SendRtcpFromRtpReceiver( 317 rtcp_sender_->SendRtcpFromRtpReceiver(
320 RtcpSender::kRtcpRr | RtcpSender::kRtcpRrtr | RtcpSender::kRtcpCast | 318 RtcpSender::kRtcpRr | RtcpSender::kRtcpRrtr | RtcpSender::kRtcpCast |
321 RtcpSender::kRtcpReceiverLog, 319 RtcpSender::kRtcpReceiverLog,
322 &report_block, 320 &report_block,
323 &rrtr, 321 &rrtr,
324 &cast_message, 322 &cast_message,
325 &receiver_log); 323 &event_subscriber);
326 324
327 EXPECT_TRUE(receiver_log.empty());
328 EXPECT_EQ(2, test_transport_.packet_count()); 325 EXPECT_EQ(2, test_transport_.packet_count());
329 } 326 }
330 327
331 TEST_F(RtcpSenderTest, RtcpReceiverReportWithOversizedFrameLog) { 328 TEST_F(RtcpSenderTest, RtcpReceiverReportWithOversizedFrameLog) {
332 static const uint32 kTimeBaseMs = 12345678; 329 static const uint32 kTimeBaseMs = 12345678;
333 static const uint32 kTimeDelayMs = 10; 330 static const uint32 kTimeDelayMs = 10;
334 static const uint32 kDelayDeltaMs = 123;
335 331
336 TestRtcpPacketBuilder p; 332 TestRtcpPacketBuilder p;
337 p.AddRr(kSendingSsrc, 1); 333 p.AddRr(kSendingSsrc, 1);
338 p.AddRb(kMediaSsrc); 334 p.AddRb(kMediaSsrc);
339 p.AddSdesCname(kSendingSsrc, kCName); 335 p.AddSdesCname(kSendingSsrc, kCName);
340 336
341 transport::RtcpReportBlock report_block; 337 transport::RtcpReportBlock report_block;
342 // Initialize remote_ssrc to a "clearly illegal" value. 338 // Initialize remote_ssrc to a "clearly illegal" value.
343 report_block.remote_ssrc = 0xDEAD; 339 report_block.remote_ssrc = 0xDEAD;
344 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. 340 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender.
345 report_block.fraction_lost = kLoss >> 24; 341 report_block.fraction_lost = kLoss >> 24;
346 report_block.cumulative_lost = kLoss; // 24 bits valid. 342 report_block.cumulative_lost = kLoss; // 24 bits valid.
347 report_block.extended_high_sequence_number = kExtendedMax; 343 report_block.extended_high_sequence_number = kExtendedMax;
348 report_block.jitter = kTestJitter; 344 report_block.jitter = kTestJitter;
349 report_block.last_sr = kLastSr; 345 report_block.last_sr = kLastSr;
350 report_block.delay_since_last_sr = kDelayLastSr; 346 report_block.delay_since_last_sr = kDelayLastSr;
351 347
352 base::SimpleTestTickClock testing_clock; 348 base::SimpleTestTickClock testing_clock;
353 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); 349 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
354 350
355 p.AddReceiverLog(kSendingSsrc); 351 p.AddReceiverLog(kSendingSsrc);
356 352
357 p.AddReceiverFrameLog(kRtpTimestamp, 1, kTimeBaseMs); 353 p.AddReceiverFrameLog(kRtpTimestamp, 1, kTimeBaseMs);
358 p.AddReceiverEventLog(kDelayDeltaMs, 5, 0); 354 p.AddReceiverEventLog(0, 5, 0);
359 p.AddReceiverFrameLog( 355 p.AddReceiverFrameLog(
360 kRtpTimestamp + 2345, kRtcpMaxReceiverLogMessages, kTimeBaseMs); 356 kRtpTimestamp + 2345, kRtcpMaxReceiverLogMessages, kTimeBaseMs);
361 357
362 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) { 358 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) {
363 p.AddReceiverEventLog( 359 p.AddReceiverEventLog(
364 kLostPacketId1, 8, static_cast<uint16>(kTimeDelayMs * i)); 360 kLostPacketId1, 8, static_cast<uint16>(kTimeDelayMs * i));
365 } 361 }
366 362
367 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); 363 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass());
368 364
369 RtcpReceiverFrameLogMessage frame_1_log(kRtpTimestamp); 365 ReceiverRtcpEventSubscriber event_subscriber(
370 RtcpReceiverEventLogMessage event_log; 366 500, ReceiverRtcpEventSubscriber::kVideoEventSubscriber);
367 FrameEvent frame_event;
368 frame_event.rtp_timestamp = kRtpTimestamp;
369 frame_event.type = media::cast::kVideoAckSent;
370 frame_event.timestamp = testing_clock.NowTicks();
371 event_subscriber.OnReceiveFrameEvent(frame_event);
371 372
372 event_log.type = kVideoAckSent; 373 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) {
373 event_log.event_timestamp = testing_clock.NowTicks(); 374 PacketEvent packet_event;
374 event_log.delay_delta = base::TimeDelta::FromMilliseconds(kDelayDeltaMs); 375 packet_event.rtp_timestamp = kRtpTimestamp + 2345;
375 frame_1_log.event_log_messages_.push_back(event_log); 376 packet_event.type = kVideoPacketReceived;
376 377 packet_event.timestamp = testing_clock.NowTicks();
377 RtcpReceiverLogMessage receiver_log; 378 packet_event.packet_id = kLostPacketId1;
378 receiver_log.push_back(frame_1_log); 379 event_subscriber.OnReceivePacketEvent(packet_event);
379
380 RtcpReceiverFrameLogMessage frame_2_log(kRtpTimestamp + 2345);
381
382 for (int j = 0; j < 300; ++j) {
383 event_log.type = kVideoPacketReceived;
384 event_log.event_timestamp = testing_clock.NowTicks();
385 event_log.packet_id = kLostPacketId1;
386 frame_2_log.event_log_messages_.push_back(event_log);
387 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); 380 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs));
388 } 381 }
389 receiver_log.push_back(frame_2_log);
390 382
391 rtcp_sender_->SendRtcpFromRtpReceiver( 383 rtcp_sender_->SendRtcpFromRtpReceiver(
392 RtcpSender::kRtcpRr | RtcpSender::kRtcpReceiverLog, 384 RtcpSender::kRtcpRr | RtcpSender::kRtcpReceiverLog,
393 &report_block, 385 &report_block,
394 NULL, 386 NULL,
395 NULL, 387 NULL,
396 &receiver_log); 388 &event_subscriber);
397 389
398 EXPECT_EQ(1, test_transport_.packet_count()); 390 EXPECT_EQ(1, test_transport_.packet_count());
399 EXPECT_EQ(1u, receiver_log.size());
400 EXPECT_EQ(300u - kRtcpMaxReceiverLogMessages,
401 receiver_log.front().event_log_messages_.size());
402 } 391 }
403 392
404 TEST_F(RtcpSenderTest, RtcpReceiverReportWithTooManyLogFrames) { 393 TEST_F(RtcpSenderTest, RtcpReceiverReportWithTooManyLogFrames) {
405 static const uint32 kTimeBaseMs = 12345678; 394 static const uint32 kTimeBaseMs = 12345678;
406 static const uint32 kTimeDelayMs = 10; 395 static const uint32 kTimeDelayMs = 10;
407 static const uint32 kDelayDeltaMs = 123;
408 396
409 TestRtcpPacketBuilder p; 397 TestRtcpPacketBuilder p;
410 p.AddRr(kSendingSsrc, 1); 398 p.AddRr(kSendingSsrc, 1);
411 p.AddRb(kMediaSsrc); 399 p.AddRb(kMediaSsrc);
412 p.AddSdesCname(kSendingSsrc, kCName); 400 p.AddSdesCname(kSendingSsrc, kCName);
413 401
414 transport::RtcpReportBlock report_block; 402 transport::RtcpReportBlock report_block;
415 // Initialize remote_ssrc to a "clearly illegal" value. 403 // Initialize remote_ssrc to a "clearly illegal" value.
416 report_block.remote_ssrc = 0xDEAD; 404 report_block.remote_ssrc = 0xDEAD;
417 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender. 405 report_block.media_ssrc = kMediaSsrc; // SSRC of the RTP packet sender.
418 report_block.fraction_lost = kLoss >> 24; 406 report_block.fraction_lost = kLoss >> 24;
419 report_block.cumulative_lost = kLoss; // 24 bits valid. 407 report_block.cumulative_lost = kLoss; // 24 bits valid.
420 report_block.extended_high_sequence_number = kExtendedMax; 408 report_block.extended_high_sequence_number = kExtendedMax;
421 report_block.jitter = kTestJitter; 409 report_block.jitter = kTestJitter;
422 report_block.last_sr = kLastSr; 410 report_block.last_sr = kLastSr;
423 report_block.delay_since_last_sr = kDelayLastSr; 411 report_block.delay_since_last_sr = kDelayLastSr;
424 412
425 base::SimpleTestTickClock testing_clock; 413 base::SimpleTestTickClock testing_clock;
426 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs)); 414 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeBaseMs));
427 415
428 p.AddReceiverLog(kSendingSsrc); 416 p.AddReceiverLog(kSendingSsrc);
429 417
430 for (int i = 0; i < 119; ++i) { 418 for (int i = 0; i < 119; ++i) {
431 p.AddReceiverFrameLog(kRtpTimestamp, 1, kTimeBaseMs + i * kTimeDelayMs); 419 p.AddReceiverFrameLog(kRtpTimestamp + i, 1, kTimeBaseMs + i * kTimeDelayMs);
432 p.AddReceiverEventLog(kDelayDeltaMs, 5, 0); 420 p.AddReceiverEventLog(0, 5, 0);
433 } 421 }
434 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); 422 test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass());
435 423
436 RtcpReceiverLogMessage receiver_log; 424 ReceiverRtcpEventSubscriber event_subscriber(
437 425 500, ReceiverRtcpEventSubscriber::kVideoEventSubscriber);
438 for (int j = 0; j < 200; ++j) { 426 for (size_t i = 0; i < kRtcpMaxReceiverLogMessages; ++i) {
439 RtcpReceiverFrameLogMessage frame_log(kRtpTimestamp); 427 FrameEvent frame_event;
440 RtcpReceiverEventLogMessage event_log; 428 frame_event.rtp_timestamp = kRtpTimestamp + static_cast<int>(i);
441 429 frame_event.type = media::cast::kVideoAckSent;
442 event_log.type = kVideoAckSent; 430 frame_event.timestamp = testing_clock.NowTicks();
443 event_log.event_timestamp = testing_clock.NowTicks(); 431 event_subscriber.OnReceiveFrameEvent(frame_event);
444 event_log.delay_delta = base::TimeDelta::FromMilliseconds(kDelayDeltaMs);
445 frame_log.event_log_messages_.push_back(event_log);
446 receiver_log.push_back(frame_log);
447 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs)); 432 testing_clock.Advance(base::TimeDelta::FromMilliseconds(kTimeDelayMs));
448 } 433 }
434
449 rtcp_sender_->SendRtcpFromRtpReceiver( 435 rtcp_sender_->SendRtcpFromRtpReceiver(
450 RtcpSender::kRtcpRr | RtcpSender::kRtcpReceiverLog, 436 RtcpSender::kRtcpRr | RtcpSender::kRtcpReceiverLog,
451 &report_block, 437 &report_block,
452 NULL, 438 NULL,
453 NULL, 439 NULL,
454 &receiver_log); 440 &event_subscriber);
455 441
456 EXPECT_EQ(1, test_transport_.packet_count()); 442 EXPECT_EQ(1, test_transport_.packet_count());
457 EXPECT_EQ(81u, receiver_log.size());
458 } 443 }
459 444
460 } // namespace cast 445 } // namespace cast
461 } // namespace media 446 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/rtcp/rtcp_sender.cc ('k') | media/cast/video_receiver/video_receiver.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698