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 |