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

Side by Side Diff: media/cast/video_sender/video_sender_unittest.cc

Issue 317243007: Cast: reduce the amount of retransmission packets (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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
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 <stdint.h> 5 #include <stdint.h>
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 EXPECT_EQ(VIDEO_EVENT, frame_events.rbegin()->media_type); 310 EXPECT_EQ(VIDEO_EVENT, frame_events.rbegin()->media_type);
311 EXPECT_EQ(num_frames - 1u, frame_events.rbegin()->frame_id); 311 EXPECT_EQ(num_frames - 1u, frame_events.rbegin()->frame_id);
312 312
313 cast_environment_->Logging()->RemoveRawEventSubscriber(&event_subscriber); 313 cast_environment_->Logging()->RemoveRawEventSubscriber(&event_subscriber);
314 } 314 }
315 315
316 TEST_F(VideoSenderTest, StopSendingInTheAbsenceOfAck) { 316 TEST_F(VideoSenderTest, StopSendingInTheAbsenceOfAck) {
317 InitEncoder(false); 317 InitEncoder(false);
318 // Send a stream of frames and don't ACK; by default we shouldn't have more 318 // Send a stream of frames and don't ACK; by default we shouldn't have more
319 // than 4 frames in flight. 319 // than 4 frames in flight.
320 // Store size in packets of frame 0, as it should be resent sue to timeout.
321 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 320 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
322 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 321 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
323 RunTasks(33); 322 RunTasks(33);
324 const int size_of_frame0 = transport_.number_of_rtp_packets();
325 323
326 for (int i = 1; i < 4; ++i) { 324 // Send 3 more frames and record the number of packets sent.
325 for (int i = 0; i < 3; ++i) {
327 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 326 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
328 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 327 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
329 RunTasks(33); 328 RunTasks(33);
330 } 329 }
330 const int number_of_packets_sent = transport_.number_of_rtp_packets();
331 331
332 const int number_of_packets_sent = transport_.number_of_rtp_packets(); 332 // Send 3 more frames - they should not be encoded, as we have not received
333 // Send 4 more frames - they should not be sent to the transport, as we have 333 // any acks.
334 // received any acks.
335 for (int i = 0; i < 3; ++i) { 334 for (int i = 0; i < 3; ++i) {
336 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 335 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
337 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 336 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
338 RunTasks(33); 337 RunTasks(33);
339 } 338 }
340 339
341 EXPECT_EQ(number_of_packets_sent + size_of_frame0, 340 // We expect a frame to be retransmitted because of duplicated ACKs.
341 // Only one packet of the frame is re-transmitted.
342 EXPECT_EQ(number_of_packets_sent + 1,
342 transport_.number_of_rtp_packets()); 343 transport_.number_of_rtp_packets());
343 344
344 // Start acking and make sure we're back to steady-state. 345 // Start acking and make sure we're back to steady-state.
345 RtcpCastMessage cast_feedback(1); 346 RtcpCastMessage cast_feedback(1);
346 cast_feedback.media_ssrc_ = 2; 347 cast_feedback.media_ssrc_ = 2;
347 cast_feedback.ack_frame_id_ = 0; 348 cast_feedback.ack_frame_id_ = 0;
348 video_sender_->OnReceivedCastFeedback(cast_feedback); 349 video_sender_->OnReceivedCastFeedback(cast_feedback);
349 EXPECT_LE( 350 EXPECT_LE(
350 4, 351 4,
351 transport_.number_of_rtp_packets() + transport_.number_of_rtcp_packets()); 352 transport_.number_of_rtp_packets() + transport_.number_of_rtcp_packets());
352 353
353 // Empty the pipeline. 354 // Empty the pipeline.
354 RunTasks(100); 355 RunTasks(100);
355 // Should have sent at least 7 packets. 356 // Should have sent at least 7 packets.
356 EXPECT_LE( 357 EXPECT_LE(
357 7, 358 7,
358 transport_.number_of_rtp_packets() + transport_.number_of_rtcp_packets()); 359 transport_.number_of_rtp_packets() + transport_.number_of_rtcp_packets());
359 } 360 }
360 361
362 TEST_F(VideoSenderTest, DuplicateAckRetransmit) {
363 InitEncoder(false);
364 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
365 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
366 RunTasks(33);
367 RtcpCastMessage cast_feedback(1);
368 cast_feedback.media_ssrc_ = 2;
369 cast_feedback.ack_frame_id_ = 0;
370
371 // Send 3 more frames but don't ACK.
372 for (int i = 0; i < 3; ++i) {
373 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
374 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
375 RunTasks(33);
376 }
377 const int number_of_packets_sent = transport_.number_of_rtp_packets();
378
379 // Send duplicated ACKs and mix some invalid NACKs.
380 for (int i = 0; i < 10; ++i) {
381 RtcpCastMessage ack_feedback(1);
382 ack_feedback.media_ssrc_ = 2;
383 ack_feedback.ack_frame_id_ = 0;
384 RtcpCastMessage nack_feedback(1);
385 nack_feedback.media_ssrc_ = 2;
386 nack_feedback.missing_frames_and_packets_[255] = PacketIdSet();
387 video_sender_->OnReceivedCastFeedback(ack_feedback);
388 video_sender_->OnReceivedCastFeedback(nack_feedback);
389 }
390 EXPECT_EQ(number_of_packets_sent, transport_.number_of_rtp_packets());
391
392 // Re-transmit one packet because of duplicated ACKs.
393 for (int i = 0; i < 3; ++i) {
394 RtcpCastMessage ack_feedback(1);
395 ack_feedback.media_ssrc_ = 2;
396 ack_feedback.ack_frame_id_ = 0;
397 video_sender_->OnReceivedCastFeedback(ack_feedback);
398 }
399 EXPECT_EQ(number_of_packets_sent + 1, transport_.number_of_rtp_packets());
400 }
401
361 } // namespace cast 402 } // namespace cast
362 } // namespace media 403 } // namespace media
OLDNEW
« media/cast/video_sender/video_sender.cc ('K') | « media/cast/video_sender/video_sender.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698