| OLD | NEW | 
|    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 74 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   85 class RtcpSenderTest : public ::testing::Test { |   85 class RtcpSenderTest : public ::testing::Test { | 
|   86  protected: |   86  protected: | 
|   87   RtcpSenderTest() |   87   RtcpSenderTest() | 
|   88       : testing_clock_(new base::SimpleTestTickClock()), |   88       : testing_clock_(new base::SimpleTestTickClock()), | 
|   89         task_runner_(new test::FakeSingleThreadTaskRunner(testing_clock_)), |   89         task_runner_(new test::FakeSingleThreadTaskRunner(testing_clock_)), | 
|   90         cast_environment_(new CastEnvironment( |   90         cast_environment_(new CastEnvironment( | 
|   91             scoped_ptr<base::TickClock>(testing_clock_).Pass(), |   91             scoped_ptr<base::TickClock>(testing_clock_).Pass(), | 
|   92             task_runner_, |   92             task_runner_, | 
|   93             task_runner_, |   93             task_runner_, | 
|   94             task_runner_)), |   94             task_runner_)), | 
|   95         rtcp_sender_(new RtcpSender(cast_environment_, |   95         rtcp_sender_(new RtcpSender(&test_transport_, kSendingSsrc, kCName)) {} | 
|   96                                     &test_transport_, |  | 
|   97                                     kSendingSsrc, |  | 
|   98                                     kCName)) {} |  | 
|   99  |   96  | 
|  100   base::SimpleTestTickClock* testing_clock_;  // Owned by CastEnvironment. |   97   base::SimpleTestTickClock* testing_clock_;  // Owned by CastEnvironment. | 
|  101   TestRtcpTransport test_transport_; |   98   TestRtcpTransport test_transport_; | 
|  102   scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; |   99   scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; | 
|  103   scoped_refptr<CastEnvironment> cast_environment_; |  100   scoped_refptr<CastEnvironment> cast_environment_; | 
|  104   scoped_ptr<RtcpSender> rtcp_sender_; |  101   scoped_ptr<RtcpSender> rtcp_sender_; | 
|  105  |  102  | 
|  106   DISALLOW_COPY_AND_ASSIGN(RtcpSenderTest); |  103   DISALLOW_COPY_AND_ASSIGN(RtcpSenderTest); | 
|  107 }; |  104 }; | 
|  108  |  105  | 
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  165   TestRtcpPacketBuilder p; |  162   TestRtcpPacketBuilder p; | 
|  166   p.AddRr(kSendingSsrc, 1); |  163   p.AddRr(kSendingSsrc, 1); | 
|  167   p.AddRb(kMediaSsrc); |  164   p.AddRb(kMediaSsrc); | 
|  168   p.AddSdesCname(kSendingSsrc, kCName); |  165   p.AddSdesCname(kSendingSsrc, kCName); | 
|  169   p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay); |  166   p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay); | 
|  170   test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); |  167   test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); | 
|  171  |  168  | 
|  172   RtcpReportBlock report_block = GetReportBlock(); |  169   RtcpReportBlock report_block = GetReportBlock(); | 
|  173  |  170  | 
|  174   RtcpCastMessage cast_message(kMediaSsrc); |  171   RtcpCastMessage cast_message(kMediaSsrc); | 
|  175   cast_message.ack_frame_id_ = kAckFrameId; |  172   cast_message.ack_frame_id = kAckFrameId; | 
|  176   PacketIdSet missing_packets; |  173   PacketIdSet missing_packets; | 
|  177   cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets; |  174   cast_message.missing_frames_and_packets[kLostFrameId] = missing_packets; | 
|  178  |  175  | 
|  179   missing_packets.insert(kLostPacketId1); |  176   missing_packets.insert(kLostPacketId1); | 
|  180   missing_packets.insert(kLostPacketId2); |  177   missing_packets.insert(kLostPacketId2); | 
|  181   missing_packets.insert(kLostPacketId3); |  178   missing_packets.insert(kLostPacketId3); | 
|  182   cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = |  179   cast_message.missing_frames_and_packets[kFrameIdWithLostPackets] = | 
|  183       missing_packets; |  180       missing_packets; | 
|  184  |  181  | 
|  185   rtcp_sender_->SendRtcpFromRtpReceiver( |  182   rtcp_sender_->SendRtcpFromRtpReceiver( | 
|  186       kRtcpRr | kRtcpCast, |  183       kRtcpRr | kRtcpCast, | 
|  187       &report_block, |  184       &report_block, | 
|  188       NULL, |  185       NULL, | 
|  189       &cast_message, |  186       &cast_message, | 
|  190       NULL, |  187       NULL, | 
|  191       kDefaultDelay); |  188       kDefaultDelay); | 
|  192  |  189  | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
|  203   p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay); |  200   p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay); | 
|  204   test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); |  201   test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); | 
|  205  |  202  | 
|  206   RtcpReportBlock report_block = GetReportBlock(); |  203   RtcpReportBlock report_block = GetReportBlock(); | 
|  207  |  204  | 
|  208   RtcpReceiverReferenceTimeReport rrtr; |  205   RtcpReceiverReferenceTimeReport rrtr; | 
|  209   rrtr.ntp_seconds = kNtpHigh; |  206   rrtr.ntp_seconds = kNtpHigh; | 
|  210   rrtr.ntp_fraction = kNtpLow; |  207   rrtr.ntp_fraction = kNtpLow; | 
|  211  |  208  | 
|  212   RtcpCastMessage cast_message(kMediaSsrc); |  209   RtcpCastMessage cast_message(kMediaSsrc); | 
|  213   cast_message.ack_frame_id_ = kAckFrameId; |  210   cast_message.ack_frame_id = kAckFrameId; | 
|  214   PacketIdSet missing_packets; |  211   PacketIdSet missing_packets; | 
|  215   cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets; |  212   cast_message.missing_frames_and_packets[kLostFrameId] = missing_packets; | 
|  216  |  213  | 
|  217   missing_packets.insert(kLostPacketId1); |  214   missing_packets.insert(kLostPacketId1); | 
|  218   missing_packets.insert(kLostPacketId2); |  215   missing_packets.insert(kLostPacketId2); | 
|  219   missing_packets.insert(kLostPacketId3); |  216   missing_packets.insert(kLostPacketId3); | 
|  220   cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = |  217   cast_message.missing_frames_and_packets[kFrameIdWithLostPackets] = | 
|  221       missing_packets; |  218       missing_packets; | 
|  222  |  219  | 
|  223   rtcp_sender_->SendRtcpFromRtpReceiver( |  220   rtcp_sender_->SendRtcpFromRtpReceiver( | 
|  224       kRtcpRr | kRtcpRrtr | kRtcpCast, |  221       kRtcpRr | kRtcpRrtr | kRtcpCast, | 
|  225       &report_block, |  222       &report_block, | 
|  226       &rrtr, |  223       &rrtr, | 
|  227       &cast_message, |  224       &cast_message, | 
|  228       NULL, |  225       NULL, | 
|  229       kDefaultDelay); |  226       kDefaultDelay); | 
|  230  |  227  | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
|  244   p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay); |  241   p.AddCast(kSendingSsrc, kMediaSsrc, kDefaultDelay); | 
|  245   test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); |  242   test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); | 
|  246  |  243  | 
|  247   RtcpReportBlock report_block = GetReportBlock(); |  244   RtcpReportBlock report_block = GetReportBlock(); | 
|  248  |  245  | 
|  249   RtcpReceiverReferenceTimeReport rrtr; |  246   RtcpReceiverReferenceTimeReport rrtr; | 
|  250   rrtr.ntp_seconds = kNtpHigh; |  247   rrtr.ntp_seconds = kNtpHigh; | 
|  251   rrtr.ntp_fraction = kNtpLow; |  248   rrtr.ntp_fraction = kNtpLow; | 
|  252  |  249  | 
|  253   RtcpCastMessage cast_message(kMediaSsrc); |  250   RtcpCastMessage cast_message(kMediaSsrc); | 
|  254   cast_message.ack_frame_id_ = kAckFrameId; |  251   cast_message.ack_frame_id = kAckFrameId; | 
|  255   PacketIdSet missing_packets; |  252   PacketIdSet missing_packets; | 
|  256   cast_message.missing_frames_and_packets_[kLostFrameId] = missing_packets; |  253   cast_message.missing_frames_and_packets[kLostFrameId] = missing_packets; | 
|  257  |  254  | 
|  258   missing_packets.insert(kLostPacketId1); |  255   missing_packets.insert(kLostPacketId1); | 
|  259   missing_packets.insert(kLostPacketId2); |  256   missing_packets.insert(kLostPacketId2); | 
|  260   missing_packets.insert(kLostPacketId3); |  257   missing_packets.insert(kLostPacketId3); | 
|  261   cast_message.missing_frames_and_packets_[kFrameIdWithLostPackets] = |  258   cast_message.missing_frames_and_packets[kFrameIdWithLostPackets] = | 
|  262       missing_packets; |  259       missing_packets; | 
|  263  |  260  | 
|  264   ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); |  261   ReceiverRtcpEventSubscriber event_subscriber(500, VIDEO_EVENT); | 
|  265   ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; |  262   ReceiverRtcpEventSubscriber::RtcpEventMultiMap rtcp_events; | 
|  266  |  263  | 
|  267   rtcp_sender_->SendRtcpFromRtpReceiver( |  264   rtcp_sender_->SendRtcpFromRtpReceiver( | 
|  268       kRtcpRr | kRtcpRrtr | kRtcpCast | |  265       kRtcpRr | kRtcpRrtr | kRtcpCast | | 
|  269           kRtcpReceiverLog, |  266           kRtcpReceiverLog, | 
|  270       &report_block, |  267       &report_block, | 
|  271       &rrtr, |  268       &rrtr, | 
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  546         kDefaultDelay); |  543         kDefaultDelay); | 
|  547  |  544  | 
|  548     testing_clock.Advance( |  545     testing_clock.Advance( | 
|  549         base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs)); |  546         base::TimeDelta::FromMilliseconds(kTimeBetweenEventsMs)); | 
|  550     time_base_ms += kTimeBetweenEventsMs; |  547     time_base_ms += kTimeBetweenEventsMs; | 
|  551   } |  548   } | 
|  552  |  549  | 
|  553   EXPECT_EQ(static_cast<int>(packet_count), test_transport_.packet_count()); |  550   EXPECT_EQ(static_cast<int>(packet_count), test_transport_.packet_count()); | 
|  554 } |  551 } | 
|  555  |  552  | 
 |  553 TEST_F(RtcpSenderTest, RtcpSenderReport) { | 
 |  554   RtcpSenderInfo sender_info; | 
 |  555   sender_info.ntp_seconds = kNtpHigh; | 
 |  556   sender_info.ntp_fraction = kNtpLow; | 
 |  557   sender_info.rtp_timestamp = kRtpTimestamp; | 
 |  558   sender_info.send_packet_count = kSendPacketCount; | 
 |  559   sender_info.send_octet_count = kSendOctetCount; | 
 |  560  | 
 |  561   RtcpDlrrReportBlock dlrr_rb; | 
 |  562   dlrr_rb.last_rr = kLastRr; | 
 |  563   dlrr_rb.delay_since_last_rr = kDelayLastRr; | 
 |  564  | 
 |  565   // Sender report + c_name. | 
 |  566   TestRtcpPacketBuilder p; | 
 |  567   p.AddSr(kSendingSsrc, 0); | 
 |  568   p.AddSdesCname(kSendingSsrc, kCName); | 
 |  569   test_transport_.SetExpectedRtcpPacket(p.GetPacket().Pass()); | 
 |  570  | 
 |  571   rtcp_sender_->SendRtcpFromRtpSender(kRtcpSr, | 
 |  572                                       sender_info, | 
 |  573                                       dlrr_rb); | 
 |  574  | 
 |  575   EXPECT_EQ(1, test_transport_.packet_count()); | 
 |  576 } | 
 |  577  | 
 |  578 TEST_F(RtcpSenderTest, RtcpSenderReportWithDlrr) { | 
 |  579   RtcpSenderInfo sender_info; | 
 |  580   sender_info.ntp_seconds = kNtpHigh; | 
 |  581   sender_info.ntp_fraction = kNtpLow; | 
 |  582   sender_info.rtp_timestamp = kRtpTimestamp; | 
 |  583   sender_info.send_packet_count = kSendPacketCount; | 
 |  584   sender_info.send_octet_count = kSendOctetCount; | 
 |  585  | 
 |  586   // Sender report + c_name + dlrr. | 
 |  587   TestRtcpPacketBuilder p1; | 
 |  588   p1.AddSr(kSendingSsrc, 0); | 
 |  589   p1.AddSdesCname(kSendingSsrc, kCName); | 
 |  590   p1.AddXrHeader(kSendingSsrc); | 
 |  591   p1.AddXrDlrrBlock(kSendingSsrc); | 
 |  592   test_transport_.SetExpectedRtcpPacket(p1.GetPacket().Pass()); | 
 |  593  | 
 |  594   RtcpDlrrReportBlock dlrr_rb; | 
 |  595   dlrr_rb.last_rr = kLastRr; | 
 |  596   dlrr_rb.delay_since_last_rr = kDelayLastRr; | 
 |  597  | 
 |  598   rtcp_sender_->SendRtcpFromRtpSender( | 
 |  599       kRtcpSr | kRtcpDlrr, | 
 |  600       sender_info, | 
 |  601       dlrr_rb); | 
 |  602  | 
 |  603   EXPECT_EQ(1, test_transport_.packet_count()); | 
 |  604 } | 
 |  605  | 
|  556 }  // namespace cast |  606 }  // namespace cast | 
|  557 }  // namespace media |  607 }  // namespace media | 
| OLD | NEW |