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

Unified Diff: webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter_unittest.cc

Issue 2378103005: Reland: Fix race / crash in OnNetworkRouteChanged(). (Closed)
Patch Set: . Created 4 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter.cc ('k') | webrtc/tools/DEPS » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter_unittest.cc
diff --git a/webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter_unittest.cc b/webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter_unittest.cc
deleted file mode 100644
index b312f96f107277fc63a9b722d2af2af4ee674cbf..0000000000000000000000000000000000000000
--- a/webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter_unittest.cc
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
- * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
-
-#include <limits>
-#include <memory>
-#include <vector>
-
-#include "webrtc/test/gmock.h"
-#include "webrtc/test/gtest.h"
-
-#include "webrtc/base/checks.h"
-#include "webrtc/modules/bitrate_controller/include/mock/mock_bitrate_controller.h"
-#include "webrtc/modules/remote_bitrate_estimator/include/mock/mock_remote_bitrate_estimator.h"
-#include "webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter.h"
-#include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
-#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h"
-#include "webrtc/system_wrappers/include/clock.h"
-
-using ::testing::_;
-using ::testing::Invoke;
-
-namespace webrtc {
-namespace test {
-
-class TransportFeedbackAdapterTest : public ::testing::Test {
- public:
- TransportFeedbackAdapterTest()
- : clock_(0),
- bitrate_estimator_(nullptr),
- bitrate_controller_(this),
- receiver_estimated_bitrate_(0) {}
-
- virtual ~TransportFeedbackAdapterTest() {}
-
- virtual void SetUp() {
- adapter_.reset(new TransportFeedbackAdapter(&clock_));
-
- bitrate_estimator_ = new MockRemoteBitrateEstimator();
- adapter_->SetBitrateEstimator(bitrate_estimator_);
- }
-
- virtual void TearDown() {
- adapter_.reset();
- }
-
- protected:
- // Proxy class used since TransportFeedbackAdapter will own the instance
- // passed at construction.
- class MockBitrateControllerAdapter : public MockBitrateController {
- public:
- explicit MockBitrateControllerAdapter(TransportFeedbackAdapterTest* owner)
- : MockBitrateController(), owner_(owner) {}
-
- ~MockBitrateControllerAdapter() override {}
-
- void OnReceiveBitrateChanged(const std::vector<uint32_t>& ssrcs,
- uint32_t bitrate_bps) override {
- owner_->receiver_estimated_bitrate_ = bitrate_bps;
- }
-
- TransportFeedbackAdapterTest* const owner_;
- };
-
- void OnReceivedEstimatedBitrate(uint32_t bitrate) {}
-
- void OnReceivedRtcpReceiverReport(const ReportBlockList& report_blocks,
- int64_t rtt,
- int64_t now_ms) {}
-
- void ComparePacketVectors(const std::vector<PacketInfo>& truth,
- const std::vector<PacketInfo>& input) {
- ASSERT_EQ(truth.size(), input.size());
- size_t len = truth.size();
- // truth contains the input data for the test, and input is what will be
- // sent to the bandwidth estimator. truth.arrival_tims_ms is used to
- // populate the transport feedback messages. As these times may be changed
- // (because of resolution limits in the packets, and because of the time
- // base adjustment performed by the TransportFeedbackAdapter at the first
- // packet, the truth[x].arrival_time and input[x].arrival_time may not be
- // equal. However, the difference must be the same for all x.
- int64_t arrival_time_delta =
- truth[0].arrival_time_ms - input[0].arrival_time_ms;
- for (size_t i = 0; i < len; ++i) {
- EXPECT_EQ(truth[i].arrival_time_ms,
- input[i].arrival_time_ms + arrival_time_delta);
- EXPECT_EQ(truth[i].send_time_ms, input[i].send_time_ms);
- EXPECT_EQ(truth[i].sequence_number, input[i].sequence_number);
- EXPECT_EQ(truth[i].payload_size, input[i].payload_size);
- EXPECT_EQ(truth[i].probe_cluster_id, input[i].probe_cluster_id);
- }
- }
-
- // Utility method, to reset arrival_time_ms before adding send time.
- void OnSentPacket(PacketInfo info) {
- info.arrival_time_ms = 0;
- adapter_->AddPacket(info.sequence_number, info.payload_size,
- info.probe_cluster_id);
- adapter_->OnSentPacket(info.sequence_number, info.send_time_ms);
- }
-
- SimulatedClock clock_;
- MockRemoteBitrateEstimator* bitrate_estimator_;
- MockBitrateControllerAdapter bitrate_controller_;
- std::unique_ptr<TransportFeedbackAdapter> adapter_;
-
- uint32_t receiver_estimated_bitrate_;
-};
-
-TEST_F(TransportFeedbackAdapterTest, AdaptsFeedbackAndPopulatesSendTimes) {
- std::vector<PacketInfo> packets;
- packets.push_back(PacketInfo(100, 200, 0, 1500, 0));
- packets.push_back(PacketInfo(110, 210, 1, 1500, 0));
- packets.push_back(PacketInfo(120, 220, 2, 1500, 0));
- packets.push_back(PacketInfo(130, 230, 3, 1500, 1));
- packets.push_back(PacketInfo(140, 240, 4, 1500, 1));
-
- for (const PacketInfo& packet : packets)
- OnSentPacket(packet);
-
- rtcp::TransportFeedback feedback;
- feedback.SetBase(packets[0].sequence_number,
- packets[0].arrival_time_ms * 1000);
-
- for (const PacketInfo& packet : packets) {
- EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number,
- packet.arrival_time_ms * 1000));
- }
-
- feedback.Build();
-
- EXPECT_CALL(*bitrate_estimator_, IncomingPacketFeedbackVector(_))
- .Times(1)
- .WillOnce(Invoke(
- [packets, this](const std::vector<PacketInfo>& feedback_vector) {
- ComparePacketVectors(packets, feedback_vector);
- }));
- adapter_->OnTransportFeedback(feedback);
-}
-
-TEST_F(TransportFeedbackAdapterTest, HandlesDroppedPackets) {
- std::vector<PacketInfo> packets;
- packets.push_back(PacketInfo(100, 200, 0, 1500, 1));
- packets.push_back(PacketInfo(110, 210, 1, 1500, 2));
- packets.push_back(PacketInfo(120, 220, 2, 1500, 3));
- packets.push_back(PacketInfo(130, 230, 3, 1500, 4));
- packets.push_back(PacketInfo(140, 240, 4, 1500, 5));
-
- const uint16_t kSendSideDropBefore = 1;
- const uint16_t kReceiveSideDropAfter = 3;
-
- for (const PacketInfo& packet : packets) {
- if (packet.sequence_number >= kSendSideDropBefore)
- OnSentPacket(packet);
- }
-
- rtcp::TransportFeedback feedback;
- feedback.SetBase(packets[0].sequence_number,
- packets[0].arrival_time_ms * 1000);
-
- for (const PacketInfo& packet : packets) {
- if (packet.sequence_number <= kReceiveSideDropAfter) {
- EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number,
- packet.arrival_time_ms * 1000));
- }
- }
-
- feedback.Build();
-
- std::vector<PacketInfo> expected_packets(
- packets.begin() + kSendSideDropBefore,
- packets.begin() + kReceiveSideDropAfter + 1);
-
- EXPECT_CALL(*bitrate_estimator_, IncomingPacketFeedbackVector(_))
- .Times(1)
- .WillOnce(Invoke([expected_packets,
- this](const std::vector<PacketInfo>& feedback_vector) {
- ComparePacketVectors(expected_packets, feedback_vector);
- }));
- adapter_->OnTransportFeedback(feedback);
-}
-
-TEST_F(TransportFeedbackAdapterTest, SendTimeWrapsBothWays) {
- int64_t kHighArrivalTimeMs = rtcp::TransportFeedback::kDeltaScaleFactor *
- static_cast<int64_t>(1 << 8) *
- static_cast<int64_t>((1 << 23) - 1) / 1000;
- std::vector<PacketInfo> packets;
- packets.push_back(PacketInfo(kHighArrivalTimeMs - 64, 200, 0, 1500,
- PacketInfo::kNotAProbe));
- packets.push_back(PacketInfo(kHighArrivalTimeMs + 64, 210, 1, 1500,
- PacketInfo::kNotAProbe));
- packets.push_back(
- PacketInfo(kHighArrivalTimeMs, 220, 2, 1500, PacketInfo::kNotAProbe));
-
- for (const PacketInfo& packet : packets)
- OnSentPacket(packet);
-
- for (size_t i = 0; i < packets.size(); ++i) {
- std::unique_ptr<rtcp::TransportFeedback> feedback(
- new rtcp::TransportFeedback());
- feedback->SetBase(packets[i].sequence_number,
- packets[i].arrival_time_ms * 1000);
-
- EXPECT_TRUE(feedback->AddReceivedPacket(packets[i].sequence_number,
- packets[i].arrival_time_ms * 1000));
-
- rtc::Buffer raw_packet = feedback->Build();
- feedback = rtcp::TransportFeedback::ParseFrom(raw_packet.data(),
- raw_packet.size());
-
- std::vector<PacketInfo> expected_packets;
- expected_packets.push_back(packets[i]);
-
- EXPECT_CALL(*bitrate_estimator_, IncomingPacketFeedbackVector(_))
- .Times(1)
- .WillOnce(Invoke([expected_packets, this](
- const std::vector<PacketInfo>& feedback_vector) {
- ComparePacketVectors(expected_packets, feedback_vector);
- }));
- adapter_->OnTransportFeedback(*feedback.get());
- }
-}
-
-TEST_F(TransportFeedbackAdapterTest, HandlesReordering) {
- std::vector<PacketInfo> packets;
- packets.push_back(PacketInfo(120, 200, 0, 1500, 0));
- packets.push_back(PacketInfo(110, 210, 1, 1500, 0));
- packets.push_back(PacketInfo(100, 220, 2, 1500, 0));
- std::vector<PacketInfo> expected_packets;
- expected_packets.push_back(packets[2]);
- expected_packets.push_back(packets[1]);
- expected_packets.push_back(packets[0]);
-
- for (const PacketInfo& packet : packets)
- OnSentPacket(packet);
-
- rtcp::TransportFeedback feedback;
- feedback.SetBase(packets[0].sequence_number,
- packets[0].arrival_time_ms * 1000);
-
- for (const PacketInfo& packet : packets) {
- EXPECT_TRUE(feedback.AddReceivedPacket(packet.sequence_number,
- packet.arrival_time_ms * 1000));
- }
-
- feedback.Build();
-
- EXPECT_CALL(*bitrate_estimator_, IncomingPacketFeedbackVector(_))
- .Times(1)
- .WillOnce(Invoke([expected_packets,
- this](const std::vector<PacketInfo>& feedback_vector) {
- ComparePacketVectors(expected_packets, feedback_vector);
- }));
- adapter_->OnTransportFeedback(feedback);
-}
-
-TEST_F(TransportFeedbackAdapterTest, TimestampDeltas) {
- std::vector<PacketInfo> sent_packets;
- const int64_t kSmallDeltaUs =
- rtcp::TransportFeedback::kDeltaScaleFactor * ((1 << 8) - 1);
- const int64_t kLargePositiveDeltaUs =
- rtcp::TransportFeedback::kDeltaScaleFactor *
- std::numeric_limits<int16_t>::max();
- const int64_t kLargeNegativeDeltaUs =
- rtcp::TransportFeedback::kDeltaScaleFactor *
- std::numeric_limits<int16_t>::min();
-
- PacketInfo info(100, 200, 0, 1500, true, PacketInfo::kNotAProbe);
- sent_packets.push_back(info);
-
- info.send_time_ms += kSmallDeltaUs / 1000;
- info.arrival_time_ms += kSmallDeltaUs / 1000;
- ++info.sequence_number;
- sent_packets.push_back(info);
-
- info.send_time_ms += kLargePositiveDeltaUs / 1000;
- info.arrival_time_ms += kLargePositiveDeltaUs / 1000;
- ++info.sequence_number;
- sent_packets.push_back(info);
-
- info.send_time_ms += kLargeNegativeDeltaUs / 1000;
- info.arrival_time_ms += kLargeNegativeDeltaUs / 1000;
- ++info.sequence_number;
- sent_packets.push_back(info);
-
- // Too large, delta - will need two feedback messages.
- info.send_time_ms += (kLargePositiveDeltaUs + 1000) / 1000;
- info.arrival_time_ms += (kLargePositiveDeltaUs + 1000) / 1000;
- ++info.sequence_number;
-
- // Expected to be ordered on arrival time when the feedback message has been
- // parsed.
- std::vector<PacketInfo> expected_packets;
- expected_packets.push_back(sent_packets[0]);
- expected_packets.push_back(sent_packets[3]);
- expected_packets.push_back(sent_packets[1]);
- expected_packets.push_back(sent_packets[2]);
-
- // Packets will be added to send history.
- for (const PacketInfo& packet : sent_packets)
- OnSentPacket(packet);
- OnSentPacket(info);
-
- // Create expected feedback and send into adapter.
- std::unique_ptr<rtcp::TransportFeedback> feedback(
- new rtcp::TransportFeedback());
- feedback->SetBase(sent_packets[0].sequence_number,
- sent_packets[0].arrival_time_ms * 1000);
-
- for (const PacketInfo& packet : sent_packets) {
- EXPECT_TRUE(feedback->AddReceivedPacket(packet.sequence_number,
- packet.arrival_time_ms * 1000));
- }
- EXPECT_FALSE(feedback->AddReceivedPacket(info.sequence_number,
- info.arrival_time_ms * 1000));
-
- rtc::Buffer raw_packet = feedback->Build();
- feedback =
- rtcp::TransportFeedback::ParseFrom(raw_packet.data(), raw_packet.size());
-
- std::vector<PacketInfo> received_feedback;
-
- EXPECT_TRUE(feedback.get() != nullptr);
- EXPECT_CALL(*bitrate_estimator_, IncomingPacketFeedbackVector(_))
- .Times(1)
- .WillOnce(Invoke([expected_packets, &received_feedback](
- const std::vector<PacketInfo>& feedback_vector) {
- EXPECT_EQ(expected_packets.size(), feedback_vector.size());
- received_feedback = feedback_vector;
- }));
- adapter_->OnTransportFeedback(*feedback.get());
-
- // Create a new feedback message and add the trailing item.
- feedback.reset(new rtcp::TransportFeedback());
- feedback->SetBase(info.sequence_number, info.arrival_time_ms * 1000);
- EXPECT_TRUE(feedback->AddReceivedPacket(info.sequence_number,
- info.arrival_time_ms * 1000));
- raw_packet = feedback->Build();
- feedback =
- rtcp::TransportFeedback::ParseFrom(raw_packet.data(), raw_packet.size());
-
- EXPECT_TRUE(feedback.get() != nullptr);
- EXPECT_CALL(*bitrate_estimator_, IncomingPacketFeedbackVector(_))
- .Times(1)
- .WillOnce(Invoke(
- [&received_feedback](const std::vector<PacketInfo>& feedback_vector) {
- EXPECT_EQ(1u, feedback_vector.size());
- received_feedback.push_back(feedback_vector[0]);
- }));
- adapter_->OnTransportFeedback(*feedback.get());
-
- expected_packets.push_back(info);
-
- ComparePacketVectors(expected_packets, received_feedback);
-}
-
-} // namespace test
-} // namespace webrtc
« no previous file with comments | « webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter.cc ('k') | webrtc/tools/DEPS » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698