| 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 <stddef.h> | 5 #include <stddef.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 | 24 |
| 25 namespace { | 25 namespace { |
| 26 | 26 |
| 27 media::cast::RtcpTimeData CreateRtcpTimeData(base::TimeTicks now) { | 27 media::cast::RtcpTimeData CreateRtcpTimeData(base::TimeTicks now) { |
| 28 media::cast::RtcpTimeData ret; | 28 media::cast::RtcpTimeData ret; |
| 29 ret.timestamp = now; | 29 ret.timestamp = now; |
| 30 media::cast::ConvertTimeTicksToNtp(now, &ret.ntp_seconds, &ret.ntp_fraction); | 30 media::cast::ConvertTimeTicksToNtp(now, &ret.ntp_seconds, &ret.ntp_fraction); |
| 31 return ret; | 31 return ret; |
| 32 } | 32 } |
| 33 | 33 |
| 34 } // namespace | |
| 35 | |
| 36 using testing::_; | 34 using testing::_; |
| 37 | 35 |
| 38 static const uint32_t kSenderSsrc = 0x10203; | 36 static const uint32_t kSenderSsrc = 0x10203; |
| 39 static const uint32_t kReceiverSsrc = 0x40506; | 37 static const uint32_t kReceiverSsrc = 0x40506; |
| 40 static const int kInitialReceiverClockOffsetSeconds = -5; | 38 static const int kInitialReceiverClockOffsetSeconds = -5; |
| 41 static const uint16_t kTargetDelayMs = 100; | 39 static const uint16_t kTargetDelayMs = 100; |
| 42 | 40 |
| 43 class FakeRtcpTransport : public PacedPacketSender { | 41 class FakeRtcpTransport : public PacedPacketSender { |
| 44 public: | 42 public: |
| 45 explicit FakeRtcpTransport(base::SimpleTestTickClock* clock) | 43 explicit FakeRtcpTransport(base::SimpleTestTickClock* clock) |
| (...skipping 22 matching lines...) Expand all Loading... |
| 68 void CancelSendingPacket(const PacketKey& packet_key) final {} | 66 void CancelSendingPacket(const PacketKey& packet_key) final {} |
| 69 | 67 |
| 70 private: | 68 private: |
| 71 base::SimpleTestTickClock* const clock_; | 69 base::SimpleTestTickClock* const clock_; |
| 72 base::TimeDelta packet_delay_; | 70 base::TimeDelta packet_delay_; |
| 73 RtcpSession* rtcp_session_; // RTCP destination. | 71 RtcpSession* rtcp_session_; // RTCP destination. |
| 74 | 72 |
| 75 DISALLOW_COPY_AND_ASSIGN(FakeRtcpTransport); | 73 DISALLOW_COPY_AND_ASSIGN(FakeRtcpTransport); |
| 76 }; | 74 }; |
| 77 | 75 |
| 78 class RtcpTest : public ::testing::Test { | 76 } // namespace |
| 77 |
| 78 class RtcpTest : public ::testing::Test, public RtcpObserver { |
| 79 protected: | 79 protected: |
| 80 RtcpTest() | 80 RtcpTest() |
| 81 : sender_clock_(new base::SimpleTestTickClock()), | 81 : sender_clock_(new base::SimpleTestTickClock()), |
| 82 receiver_clock_(new test::SkewedTickClock(sender_clock_.get())), | 82 receiver_clock_(new test::SkewedTickClock(sender_clock_.get())), |
| 83 rtp_sender_pacer_(sender_clock_.get()), | 83 rtp_sender_pacer_(sender_clock_.get()), |
| 84 rtp_receiver_pacer_(sender_clock_.get()), | 84 rtp_receiver_pacer_(sender_clock_.get()), |
| 85 rtcp_at_rtp_sender_( | 85 rtcp_at_rtp_sender_(sender_clock_.get(), |
| 86 base::Bind(&RtcpTest::OnReceivedCastFeedback, | 86 &rtp_sender_pacer_, |
| 87 base::Unretained(this)), | 87 this, |
| 88 base::Bind(&RtcpTest::OnMeasuredRoundTripTime, | 88 kSenderSsrc, |
| 89 base::Unretained(this)), | 89 kReceiverSsrc), |
| 90 base::Bind(&RtcpTest::OnReceivedLogs, base::Unretained(this)), | |
| 91 base::Bind(&RtcpTest::OnReceivedPli, base::Unretained(this)), | |
| 92 sender_clock_.get(), | |
| 93 &rtp_sender_pacer_, | |
| 94 kSenderSsrc, | |
| 95 kReceiverSsrc), | |
| 96 rtcp_at_rtp_receiver_(receiver_clock_.get(), | 90 rtcp_at_rtp_receiver_(receiver_clock_.get(), |
| 97 kReceiverSsrc, | 91 kReceiverSsrc, |
| 98 kSenderSsrc), | 92 kSenderSsrc), |
| 99 received_pli_(false) { | 93 received_pli_(false) { |
| 100 sender_clock_->Advance(base::TimeTicks::Now() - base::TimeTicks()); | 94 sender_clock_->Advance(base::TimeTicks::Now() - base::TimeTicks()); |
| 101 receiver_clock_->SetSkew( | 95 receiver_clock_->SetSkew( |
| 102 1.0, // No skew. | 96 1.0, // No skew. |
| 103 base::TimeDelta::FromSeconds(kInitialReceiverClockOffsetSeconds)); | 97 base::TimeDelta::FromSeconds(kInitialReceiverClockOffsetSeconds)); |
| 104 | 98 |
| 105 rtp_sender_pacer_.set_rtcp_destination(&rtcp_at_rtp_receiver_); | 99 rtp_sender_pacer_.set_rtcp_destination(&rtcp_at_rtp_receiver_); |
| 106 rtp_receiver_pacer_.set_rtcp_destination(&rtcp_at_rtp_sender_); | 100 rtp_receiver_pacer_.set_rtcp_destination(&rtcp_at_rtp_sender_); |
| 107 } | 101 } |
| 108 | 102 |
| 109 ~RtcpTest() override {} | 103 ~RtcpTest() override {} |
| 110 | 104 |
| 111 void OnReceivedCastFeedback(const RtcpCastMessage& cast_message) { | 105 // RtcpObserver implementation. |
| 106 void OnReceivedCastMessage(const RtcpCastMessage& cast_message) override { |
| 112 last_cast_message_ = cast_message; | 107 last_cast_message_ = cast_message; |
| 113 } | 108 } |
| 114 | 109 void OnReceivedRtt(base::TimeDelta round_trip_time) override { |
| 115 void OnMeasuredRoundTripTime(base::TimeDelta rtt) { | 110 current_round_trip_time_ = round_trip_time; |
| 116 current_round_trip_time_ = rtt; | |
| 117 } | 111 } |
| 118 | 112 void OnReceivedReceiverLog(const RtcpReceiverLogMessage& logs) override { |
| 119 void OnReceivedLogs(const RtcpReceiverLogMessage& receiver_logs) { | |
| 120 RtcpReceiverLogMessage().swap(last_logs_); | 113 RtcpReceiverLogMessage().swap(last_logs_); |
| 121 | 114 |
| 122 // Make a copy of the logs. | 115 // Make a copy of the logs. |
| 123 for (const RtcpReceiverFrameLogMessage& frame_log_msg : receiver_logs) { | 116 for (const RtcpReceiverFrameLogMessage& frame_log_msg : logs) { |
| 124 last_logs_.push_back( | 117 last_logs_.push_back( |
| 125 RtcpReceiverFrameLogMessage(frame_log_msg.rtp_timestamp_)); | 118 RtcpReceiverFrameLogMessage(frame_log_msg.rtp_timestamp_)); |
| 126 for (const RtcpReceiverEventLogMessage& event_log_msg : | 119 for (const RtcpReceiverEventLogMessage& event_log_msg : |
| 127 frame_log_msg.event_log_messages_) { | 120 frame_log_msg.event_log_messages_) { |
| 128 RtcpReceiverEventLogMessage event_log; | 121 RtcpReceiverEventLogMessage event_log; |
| 129 event_log.type = event_log_msg.type; | 122 event_log.type = event_log_msg.type; |
| 130 event_log.event_timestamp = event_log_msg.event_timestamp; | 123 event_log.event_timestamp = event_log_msg.event_timestamp; |
| 131 event_log.delay_delta = event_log_msg.delay_delta; | 124 event_log.delay_delta = event_log_msg.delay_delta; |
| 132 event_log.packet_id = event_log_msg.packet_id; | 125 event_log.packet_id = event_log_msg.packet_id; |
| 133 last_logs_.back().event_log_messages_.push_back(event_log); | 126 last_logs_.back().event_log_messages_.push_back(event_log); |
| 134 } | 127 } |
| 135 } | 128 } |
| 136 } | 129 } |
| 137 | 130 |
| 131 void OnReceivedPli() override { received_pli_ = true; } |
| 132 |
| 138 PacketRef BuildRtcpPacketFromRtpReceiver( | 133 PacketRef BuildRtcpPacketFromRtpReceiver( |
| 139 const RtcpTimeData& time_data, | 134 const RtcpTimeData& time_data, |
| 140 const RtcpCastMessage* cast_message, | 135 const RtcpCastMessage* cast_message, |
| 141 const RtcpPliMessage* pli_message, | 136 const RtcpPliMessage* pli_message, |
| 142 base::TimeDelta target_delay, | 137 base::TimeDelta target_delay, |
| 143 const ReceiverRtcpEventSubscriber::RtcpEvents* rtcp_events, | 138 const ReceiverRtcpEventSubscriber::RtcpEvents* rtcp_events, |
| 144 const RtpReceiverStatistics* rtp_receiver_statistics) { | 139 const RtpReceiverStatistics* rtp_receiver_statistics) { |
| 145 RtcpBuilder builder(rtcp_at_rtp_receiver_.local_ssrc()); | 140 RtcpBuilder builder(rtcp_at_rtp_receiver_.local_ssrc()); |
| 146 builder.Start(); | 141 builder.Start(); |
| 147 RtcpReceiverReferenceTimeReport rrtr; | 142 RtcpReceiverReferenceTimeReport rrtr; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 175 } | 170 } |
| 176 if (cast_message) | 171 if (cast_message) |
| 177 builder.AddCast(*cast_message, target_delay); | 172 builder.AddCast(*cast_message, target_delay); |
| 178 if (pli_message) | 173 if (pli_message) |
| 179 builder.AddPli(*pli_message); | 174 builder.AddPli(*pli_message); |
| 180 if (rtcp_events) | 175 if (rtcp_events) |
| 181 builder.AddReceiverLog(*rtcp_events); | 176 builder.AddReceiverLog(*rtcp_events); |
| 182 return builder.Finish(); | 177 return builder.Finish(); |
| 183 } | 178 } |
| 184 | 179 |
| 185 void OnReceivedPli() { received_pli_ = true; } | |
| 186 | |
| 187 std::unique_ptr<base::SimpleTestTickClock> sender_clock_; | 180 std::unique_ptr<base::SimpleTestTickClock> sender_clock_; |
| 188 std::unique_ptr<test::SkewedTickClock> receiver_clock_; | 181 std::unique_ptr<test::SkewedTickClock> receiver_clock_; |
| 189 FakeRtcpTransport rtp_sender_pacer_; | 182 FakeRtcpTransport rtp_sender_pacer_; |
| 190 FakeRtcpTransport rtp_receiver_pacer_; | 183 FakeRtcpTransport rtp_receiver_pacer_; |
| 191 SenderRtcpSession rtcp_at_rtp_sender_; | 184 SenderRtcpSession rtcp_at_rtp_sender_; |
| 192 ReceiverRtcpSession rtcp_at_rtp_receiver_; | 185 ReceiverRtcpSession rtcp_at_rtp_receiver_; |
| 193 | 186 |
| 194 base::TimeDelta current_round_trip_time_; | 187 base::TimeDelta current_round_trip_time_; |
| 195 RtcpCastMessage last_cast_message_; | 188 RtcpCastMessage last_cast_message_; |
| 196 RtcpReceiverLogMessage last_logs_; | 189 RtcpReceiverLogMessage last_logs_; |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 380 // Only 24 bits of event timestamp sent on wire. | 373 // Only 24 bits of event timestamp sent on wire. |
| 381 uint32_t event_ts = | 374 uint32_t event_ts = |
| 382 (event.timestamp - base::TimeTicks()).InMilliseconds() & 0xffffff; | 375 (event.timestamp - base::TimeTicks()).InMilliseconds() & 0xffffff; |
| 383 uint32_t log_msg_ts = | 376 uint32_t log_msg_ts = |
| 384 (log_msg.event_timestamp - base::TimeTicks()).InMilliseconds() & 0xffffff; | 377 (log_msg.event_timestamp - base::TimeTicks()).InMilliseconds() & 0xffffff; |
| 385 EXPECT_EQ(log_msg_ts, event_ts); | 378 EXPECT_EQ(log_msg_ts, event_ts); |
| 386 } | 379 } |
| 387 | 380 |
| 388 } // namespace cast | 381 } // namespace cast |
| 389 } // namespace media | 382 } // namespace media |
| OLD | NEW |