| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| 11 #include <limits> | 11 #include <limits> |
| 12 #include <memory> |
| 12 #include <vector> | 13 #include <vector> |
| 13 | 14 |
| 14 #include "testing/gmock/include/gmock/gmock.h" | 15 #include "testing/gmock/include/gmock/gmock.h" |
| 15 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
| 16 | 17 |
| 17 #include "webrtc/base/checks.h" | 18 #include "webrtc/base/checks.h" |
| 18 #include "webrtc/base/scoped_ptr.h" | |
| 19 #include "webrtc/modules/bitrate_controller/include/mock/mock_bitrate_controller
.h" | 19 #include "webrtc/modules/bitrate_controller/include/mock/mock_bitrate_controller
.h" |
| 20 #include "webrtc/modules/remote_bitrate_estimator/include/mock/mock_remote_bitra
te_estimator.h" | 20 #include "webrtc/modules/remote_bitrate_estimator/include/mock/mock_remote_bitra
te_estimator.h" |
| 21 #include "webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter.h" | 21 #include "webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter.h" |
| 22 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h" | 22 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h" |
| 23 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h" | 23 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h" |
| 24 #include "webrtc/system_wrappers/include/clock.h" | 24 #include "webrtc/system_wrappers/include/clock.h" |
| 25 | 25 |
| 26 using ::testing::_; | 26 using ::testing::_; |
| 27 using ::testing::Invoke; | 27 using ::testing::Invoke; |
| 28 | 28 |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 void OnSentPacket(PacketInfo info) { | 100 void OnSentPacket(PacketInfo info) { |
| 101 info.arrival_time_ms = 0; | 101 info.arrival_time_ms = 0; |
| 102 adapter_->AddPacket(info.sequence_number, info.payload_size, | 102 adapter_->AddPacket(info.sequence_number, info.payload_size, |
| 103 info.was_paced); | 103 info.was_paced); |
| 104 adapter_->OnSentPacket(info.sequence_number, info.send_time_ms); | 104 adapter_->OnSentPacket(info.sequence_number, info.send_time_ms); |
| 105 } | 105 } |
| 106 | 106 |
| 107 SimulatedClock clock_; | 107 SimulatedClock clock_; |
| 108 MockRemoteBitrateEstimator* bitrate_estimator_; | 108 MockRemoteBitrateEstimator* bitrate_estimator_; |
| 109 MockBitrateControllerAdapter bitrate_controller_; | 109 MockBitrateControllerAdapter bitrate_controller_; |
| 110 rtc::scoped_ptr<TransportFeedbackAdapter> adapter_; | 110 std::unique_ptr<TransportFeedbackAdapter> adapter_; |
| 111 | 111 |
| 112 uint32_t receiver_estimated_bitrate_; | 112 uint32_t receiver_estimated_bitrate_; |
| 113 }; | 113 }; |
| 114 | 114 |
| 115 TEST_F(TransportFeedbackAdapterTest, AdaptsFeedbackAndPopulatesSendTimes) { | 115 TEST_F(TransportFeedbackAdapterTest, AdaptsFeedbackAndPopulatesSendTimes) { |
| 116 std::vector<PacketInfo> packets; | 116 std::vector<PacketInfo> packets; |
| 117 packets.push_back(PacketInfo(100, 200, 0, 1500, true)); | 117 packets.push_back(PacketInfo(100, 200, 0, 1500, true)); |
| 118 packets.push_back(PacketInfo(110, 210, 1, 1500, true)); | 118 packets.push_back(PacketInfo(110, 210, 1, 1500, true)); |
| 119 packets.push_back(PacketInfo(120, 220, 2, 1500, true)); | 119 packets.push_back(PacketInfo(120, 220, 2, 1500, true)); |
| 120 packets.push_back(PacketInfo(130, 230, 3, 1500, true)); | 120 packets.push_back(PacketInfo(130, 230, 3, 1500, true)); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 191 static_cast<int64_t>((1 << 23) - 1) / 1000; | 191 static_cast<int64_t>((1 << 23) - 1) / 1000; |
| 192 std::vector<PacketInfo> packets; | 192 std::vector<PacketInfo> packets; |
| 193 packets.push_back(PacketInfo(kHighArrivalTimeMs - 64, 200, 0, 1500, true)); | 193 packets.push_back(PacketInfo(kHighArrivalTimeMs - 64, 200, 0, 1500, true)); |
| 194 packets.push_back(PacketInfo(kHighArrivalTimeMs + 64, 210, 1, 1500, true)); | 194 packets.push_back(PacketInfo(kHighArrivalTimeMs + 64, 210, 1, 1500, true)); |
| 195 packets.push_back(PacketInfo(kHighArrivalTimeMs, 220, 2, 1500, true)); | 195 packets.push_back(PacketInfo(kHighArrivalTimeMs, 220, 2, 1500, true)); |
| 196 | 196 |
| 197 for (const PacketInfo& packet : packets) | 197 for (const PacketInfo& packet : packets) |
| 198 OnSentPacket(packet); | 198 OnSentPacket(packet); |
| 199 | 199 |
| 200 for (size_t i = 0; i < packets.size(); ++i) { | 200 for (size_t i = 0; i < packets.size(); ++i) { |
| 201 rtc::scoped_ptr<rtcp::TransportFeedback> feedback( | 201 std::unique_ptr<rtcp::TransportFeedback> feedback( |
| 202 new rtcp::TransportFeedback()); | 202 new rtcp::TransportFeedback()); |
| 203 feedback->WithBase(packets[i].sequence_number, | 203 feedback->WithBase(packets[i].sequence_number, |
| 204 packets[i].arrival_time_ms * 1000); | 204 packets[i].arrival_time_ms * 1000); |
| 205 | 205 |
| 206 EXPECT_TRUE(feedback->WithReceivedPacket( | 206 EXPECT_TRUE(feedback->WithReceivedPacket( |
| 207 packets[i].sequence_number, packets[i].arrival_time_ms * 1000)); | 207 packets[i].sequence_number, packets[i].arrival_time_ms * 1000)); |
| 208 | 208 |
| 209 rtc::Buffer raw_packet = feedback->Build(); | 209 rtc::Buffer raw_packet = feedback->Build(); |
| 210 feedback = rtcp::TransportFeedback::ParseFrom(raw_packet.data(), | 210 feedback = rtc::ScopedToUnique(rtcp::TransportFeedback::ParseFrom( |
| 211 raw_packet.size()); | 211 raw_packet.data(), raw_packet.size())); |
| 212 | 212 |
| 213 std::vector<PacketInfo> expected_packets; | 213 std::vector<PacketInfo> expected_packets; |
| 214 expected_packets.push_back(packets[i]); | 214 expected_packets.push_back(packets[i]); |
| 215 | 215 |
| 216 EXPECT_CALL(*bitrate_estimator_, IncomingPacketFeedbackVector(_)) | 216 EXPECT_CALL(*bitrate_estimator_, IncomingPacketFeedbackVector(_)) |
| 217 .Times(1) | 217 .Times(1) |
| 218 .WillOnce(Invoke([expected_packets, this]( | 218 .WillOnce(Invoke([expected_packets, this]( |
| 219 const std::vector<PacketInfo>& feedback_vector) { | 219 const std::vector<PacketInfo>& feedback_vector) { |
| 220 ComparePacketVectors(expected_packets, feedback_vector); | 220 ComparePacketVectors(expected_packets, feedback_vector); |
| 221 })); | 221 })); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 256 info.send_time_ms += (kLargePositiveDeltaUs + 1000) / 1000; | 256 info.send_time_ms += (kLargePositiveDeltaUs + 1000) / 1000; |
| 257 info.arrival_time_ms += (kLargePositiveDeltaUs + 1000) / 1000; | 257 info.arrival_time_ms += (kLargePositiveDeltaUs + 1000) / 1000; |
| 258 ++info.sequence_number; | 258 ++info.sequence_number; |
| 259 | 259 |
| 260 // Packets will be added to send history. | 260 // Packets will be added to send history. |
| 261 for (const PacketInfo& packet : sent_packets) | 261 for (const PacketInfo& packet : sent_packets) |
| 262 OnSentPacket(packet); | 262 OnSentPacket(packet); |
| 263 OnSentPacket(info); | 263 OnSentPacket(info); |
| 264 | 264 |
| 265 // Create expected feedback and send into adapter. | 265 // Create expected feedback and send into adapter. |
| 266 rtc::scoped_ptr<rtcp::TransportFeedback> feedback( | 266 std::unique_ptr<rtcp::TransportFeedback> feedback( |
| 267 new rtcp::TransportFeedback()); | 267 new rtcp::TransportFeedback()); |
| 268 feedback->WithBase(sent_packets[0].sequence_number, | 268 feedback->WithBase(sent_packets[0].sequence_number, |
| 269 sent_packets[0].arrival_time_ms * 1000); | 269 sent_packets[0].arrival_time_ms * 1000); |
| 270 | 270 |
| 271 for (const PacketInfo& packet : sent_packets) { | 271 for (const PacketInfo& packet : sent_packets) { |
| 272 EXPECT_TRUE(feedback->WithReceivedPacket(packet.sequence_number, | 272 EXPECT_TRUE(feedback->WithReceivedPacket(packet.sequence_number, |
| 273 packet.arrival_time_ms * 1000)); | 273 packet.arrival_time_ms * 1000)); |
| 274 } | 274 } |
| 275 EXPECT_FALSE(feedback->WithReceivedPacket(info.sequence_number, | 275 EXPECT_FALSE(feedback->WithReceivedPacket(info.sequence_number, |
| 276 info.arrival_time_ms * 1000)); | 276 info.arrival_time_ms * 1000)); |
| 277 | 277 |
| 278 rtc::Buffer raw_packet = feedback->Build(); | 278 rtc::Buffer raw_packet = feedback->Build(); |
| 279 feedback = rtcp::TransportFeedback::ParseFrom(raw_packet.data(), | 279 feedback = rtc::ScopedToUnique( |
| 280 raw_packet.size()); | 280 rtcp::TransportFeedback::ParseFrom(raw_packet.data(), raw_packet.size())); |
| 281 | 281 |
| 282 std::vector<PacketInfo> received_feedback; | 282 std::vector<PacketInfo> received_feedback; |
| 283 | 283 |
| 284 EXPECT_TRUE(feedback.get() != nullptr); | 284 EXPECT_TRUE(feedback.get() != nullptr); |
| 285 EXPECT_CALL(*bitrate_estimator_, IncomingPacketFeedbackVector(_)) | 285 EXPECT_CALL(*bitrate_estimator_, IncomingPacketFeedbackVector(_)) |
| 286 .Times(1) | 286 .Times(1) |
| 287 .WillOnce(Invoke([sent_packets, &received_feedback]( | 287 .WillOnce(Invoke([sent_packets, &received_feedback]( |
| 288 const std::vector<PacketInfo>& feedback_vector) { | 288 const std::vector<PacketInfo>& feedback_vector) { |
| 289 EXPECT_EQ(sent_packets.size(), feedback_vector.size()); | 289 EXPECT_EQ(sent_packets.size(), feedback_vector.size()); |
| 290 received_feedback = feedback_vector; | 290 received_feedback = feedback_vector; |
| 291 })); | 291 })); |
| 292 adapter_->OnTransportFeedback(*feedback.get()); | 292 adapter_->OnTransportFeedback(*feedback.get()); |
| 293 | 293 |
| 294 // Create a new feedback message and add the trailing item. | 294 // Create a new feedback message and add the trailing item. |
| 295 feedback.reset(new rtcp::TransportFeedback()); | 295 feedback.reset(new rtcp::TransportFeedback()); |
| 296 feedback->WithBase(info.sequence_number, info.arrival_time_ms * 1000); | 296 feedback->WithBase(info.sequence_number, info.arrival_time_ms * 1000); |
| 297 EXPECT_TRUE(feedback->WithReceivedPacket(info.sequence_number, | 297 EXPECT_TRUE(feedback->WithReceivedPacket(info.sequence_number, |
| 298 info.arrival_time_ms * 1000)); | 298 info.arrival_time_ms * 1000)); |
| 299 raw_packet = feedback->Build(); | 299 raw_packet = feedback->Build(); |
| 300 feedback = rtcp::TransportFeedback::ParseFrom(raw_packet.data(), | 300 feedback = rtc::ScopedToUnique( |
| 301 raw_packet.size()); | 301 rtcp::TransportFeedback::ParseFrom(raw_packet.data(), raw_packet.size())); |
| 302 | 302 |
| 303 EXPECT_TRUE(feedback.get() != nullptr); | 303 EXPECT_TRUE(feedback.get() != nullptr); |
| 304 EXPECT_CALL(*bitrate_estimator_, IncomingPacketFeedbackVector(_)) | 304 EXPECT_CALL(*bitrate_estimator_, IncomingPacketFeedbackVector(_)) |
| 305 .Times(1) | 305 .Times(1) |
| 306 .WillOnce(Invoke( | 306 .WillOnce(Invoke( |
| 307 [&received_feedback](const std::vector<PacketInfo>& feedback_vector) { | 307 [&received_feedback](const std::vector<PacketInfo>& feedback_vector) { |
| 308 EXPECT_EQ(1u, feedback_vector.size()); | 308 EXPECT_EQ(1u, feedback_vector.size()); |
| 309 received_feedback.push_back(feedback_vector[0]); | 309 received_feedback.push_back(feedback_vector[0]); |
| 310 })); | 310 })); |
| 311 adapter_->OnTransportFeedback(*feedback.get()); | 311 adapter_->OnTransportFeedback(*feedback.get()); |
| 312 | 312 |
| 313 sent_packets.push_back(info); | 313 sent_packets.push_back(info); |
| 314 | 314 |
| 315 ComparePacketVectors(sent_packets, received_feedback); | 315 ComparePacketVectors(sent_packets, received_feedback); |
| 316 } | 316 } |
| 317 | 317 |
| 318 } // namespace test | 318 } // namespace test |
| 319 } // namespace webrtc | 319 } // namespace webrtc |
| OLD | NEW |