Index: media/cast/framer/cast_message_builder_unittest.cc |
diff --git a/media/cast/framer/cast_message_builder_unittest.cc b/media/cast/framer/cast_message_builder_unittest.cc |
deleted file mode 100644 |
index ef75162a086e1d3ade41513cdde6f53e9c04d3b5..0000000000000000000000000000000000000000 |
--- a/media/cast/framer/cast_message_builder_unittest.cc |
+++ /dev/null |
@@ -1,429 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include <stdint.h> |
- |
-#include "base/memory/scoped_ptr.h" |
-#include "base/test/simple_test_tick_clock.h" |
-#include "media/cast/framer/cast_message_builder.h" |
-#include "media/cast/rtcp/rtcp.h" |
-#include "media/cast/rtp_receiver/rtp_receiver_defines.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-namespace media { |
-namespace cast { |
- |
-namespace { |
-static const uint32 kSsrc = 0x1234; |
-static const uint32 kShortTimeIncrementMs = 10; |
-static const uint32 kLongTimeIncrementMs = 40; |
-static const int64 kStartMillisecond = INT64_C(12345678900000); |
- |
-typedef std::map<uint32, size_t> MissingPacketsMap; |
- |
-class NackFeedbackVerification : public RtpPayloadFeedback { |
- public: |
- NackFeedbackVerification() |
- : triggered_(false), missing_packets_(), last_frame_acked_(0) {} |
- |
- virtual void CastFeedback(const RtcpCastMessage& cast_feedback) OVERRIDE { |
- EXPECT_EQ(kSsrc, cast_feedback.media_ssrc_); |
- |
- last_frame_acked_ = cast_feedback.ack_frame_id_; |
- |
- MissingFramesAndPacketsMap::const_iterator frame_it = |
- cast_feedback.missing_frames_and_packets_.begin(); |
- |
- // Keep track of the number of missing packets per frame. |
- missing_packets_.clear(); |
- while (frame_it != cast_feedback.missing_frames_and_packets_.end()) { |
- // Check for complete frame lost. |
- if ((frame_it->second.size() == 1) && |
- (*frame_it->second.begin() == kRtcpCastAllPacketsLost)) { |
- missing_packets_.insert( |
- std::make_pair(frame_it->first, kRtcpCastAllPacketsLost)); |
- } else { |
- missing_packets_.insert( |
- std::make_pair(frame_it->first, frame_it->second.size())); |
- } |
- ++frame_it; |
- } |
- triggered_ = true; |
- } |
- |
- size_t num_missing_packets(uint32 frame_id) { |
- MissingPacketsMap::iterator it; |
- it = missing_packets_.find(frame_id); |
- if (it == missing_packets_.end()) |
- return 0; |
- |
- return it->second; |
- } |
- |
- // Holds value for one call. |
- bool triggered() { |
- bool ret_val = triggered_; |
- triggered_ = false; |
- return ret_val; |
- } |
- |
- uint32 last_frame_acked() { return last_frame_acked_; } |
- |
- private: |
- bool triggered_; |
- MissingPacketsMap missing_packets_; // Missing packets per frame. |
- uint32 last_frame_acked_; |
- |
- DISALLOW_COPY_AND_ASSIGN(NackFeedbackVerification); |
-}; |
-} // namespace |
- |
-class CastMessageBuilderTest : public ::testing::Test { |
- protected: |
- CastMessageBuilderTest() |
- : cast_msg_builder_(new CastMessageBuilder(&testing_clock_, |
- &feedback_, |
- &frame_id_map_, |
- kSsrc, |
- true, |
- 0)) { |
- rtp_header_.sender_ssrc = kSsrc; |
- rtp_header_.is_key_frame = false; |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kStartMillisecond)); |
- } |
- |
- virtual ~CastMessageBuilderTest() {} |
- |
- void SetFrameIds(uint32 frame_id, uint32 reference_frame_id) { |
- rtp_header_.frame_id = frame_id; |
- rtp_header_.reference_frame_id = reference_frame_id; |
- } |
- |
- void SetPacketId(uint16 packet_id) { rtp_header_.packet_id = packet_id; } |
- |
- void SetMaxPacketId(uint16 max_packet_id) { |
- rtp_header_.max_packet_id = max_packet_id; |
- } |
- |
- void SetKeyFrame(bool is_key) { rtp_header_.is_key_frame = is_key; } |
- |
- void InsertPacket() { |
- PacketType packet_type = frame_id_map_.InsertPacket(rtp_header_); |
- if (packet_type == kNewPacketCompletingFrame) { |
- cast_msg_builder_->CompleteFrameReceived(rtp_header_.frame_id); |
- } |
- cast_msg_builder_->UpdateCastMessage(); |
- } |
- |
- void SetDecoderSlowerThanMaxFrameRate(int max_unacked_frames) { |
- cast_msg_builder_.reset(new CastMessageBuilder(&testing_clock_, |
- &feedback_, |
- &frame_id_map_, |
- kSsrc, |
- false, |
- max_unacked_frames)); |
- } |
- |
- NackFeedbackVerification feedback_; |
- scoped_ptr<CastMessageBuilder> cast_msg_builder_; |
- RtpCastHeader rtp_header_; |
- FrameIdMap frame_id_map_; |
- base::SimpleTestTickClock testing_clock_; |
- |
- DISALLOW_COPY_AND_ASSIGN(CastMessageBuilderTest); |
-}; |
- |
-TEST_F(CastMessageBuilderTest, OneFrameNackList) { |
- SetFrameIds(0, 0); |
- SetPacketId(4); |
- SetMaxPacketId(10); |
- InsertPacket(); |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); |
- EXPECT_FALSE(feedback_.triggered()); |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); |
- SetPacketId(5); |
- InsertPacket(); |
- EXPECT_TRUE(feedback_.triggered()); |
- EXPECT_EQ(4u, feedback_.num_missing_packets(0)); |
-} |
- |
-TEST_F(CastMessageBuilderTest, CompleteFrameMissing) { |
- SetFrameIds(0, 0); |
- SetPacketId(2); |
- SetMaxPacketId(5); |
- InsertPacket(); |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); |
- SetFrameIds(2, 1); |
- SetPacketId(2); |
- SetMaxPacketId(5); |
- InsertPacket(); |
- EXPECT_TRUE(feedback_.triggered()); |
- EXPECT_EQ(kRtcpCastAllPacketsLost, feedback_.num_missing_packets(1)); |
-} |
- |
-TEST_F(CastMessageBuilderTest, RemoveOldFrames) { |
- SetFrameIds(1, 0); |
- SetPacketId(0); |
- SetMaxPacketId(1); |
- InsertPacket(); |
- EXPECT_FALSE(feedback_.triggered()); |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); |
- SetFrameIds(2, 1); |
- SetPacketId(0); |
- SetMaxPacketId(0); |
- InsertPacket(); |
- EXPECT_TRUE(feedback_.triggered()); |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); |
- SetFrameIds(3, 2); |
- SetPacketId(0); |
- SetMaxPacketId(5); |
- InsertPacket(); |
- EXPECT_TRUE(feedback_.triggered()); |
- EXPECT_EQ(2u, feedback_.last_frame_acked()); |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); |
- SetFrameIds(5, 5); |
- SetPacketId(0); |
- SetMaxPacketId(0); |
- SetKeyFrame(true); |
- InsertPacket(); |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); |
- frame_id_map_.RemoveOldFrames(5); // Simulate 5 being pulled for rendering. |
- cast_msg_builder_->UpdateCastMessage(); |
- EXPECT_TRUE(feedback_.triggered()); |
- EXPECT_EQ(5u, feedback_.last_frame_acked()); |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); |
- SetFrameIds(1, 0); |
- SetPacketId(1); |
- SetMaxPacketId(1); |
- InsertPacket(); |
- EXPECT_FALSE(feedback_.triggered()); |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); |
- InsertPacket(); |
- EXPECT_TRUE(feedback_.triggered()); |
- EXPECT_EQ(5u, feedback_.last_frame_acked()); |
-} |
- |
-TEST_F(CastMessageBuilderTest, NackUntilMaxReceivedPacket) { |
- SetFrameIds(0, 0); |
- SetPacketId(0); |
- SetMaxPacketId(20); |
- SetKeyFrame(true); |
- InsertPacket(); |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); |
- SetPacketId(5); |
- InsertPacket(); |
- EXPECT_TRUE(feedback_.triggered()); |
- EXPECT_EQ(4u, feedback_.num_missing_packets(0)); |
-} |
- |
-TEST_F(CastMessageBuilderTest, NackUntilMaxReceivedPacketNextFrame) { |
- SetFrameIds(0, 0); |
- SetPacketId(0); |
- SetMaxPacketId(20); |
- SetKeyFrame(true); |
- InsertPacket(); |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); |
- SetPacketId(5); |
- InsertPacket(); |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); |
- EXPECT_TRUE(feedback_.triggered()); |
- EXPECT_EQ(4u, feedback_.num_missing_packets(0)); |
- SetFrameIds(1, 0); |
- SetMaxPacketId(2); |
- SetPacketId(0); |
- SetKeyFrame(false); |
- InsertPacket(); |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); |
- EXPECT_TRUE(feedback_.triggered()); |
- EXPECT_EQ(19u, feedback_.num_missing_packets(0)); |
-} |
- |
-TEST_F(CastMessageBuilderTest, NackUntilMaxReceivedPacketNextKey) { |
- SetFrameIds(0, 0); |
- SetPacketId(0); |
- SetMaxPacketId(20); |
- SetKeyFrame(true); |
- InsertPacket(); |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); |
- SetPacketId(5); |
- InsertPacket(); |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); |
- EXPECT_TRUE(feedback_.triggered()); |
- EXPECT_EQ(4u, feedback_.num_missing_packets(0)); |
- SetFrameIds(1, 1); |
- SetMaxPacketId(0); |
- SetPacketId(0); |
- SetKeyFrame(true); |
- InsertPacket(); |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); |
- EXPECT_TRUE(feedback_.triggered()); |
- EXPECT_EQ(0u, feedback_.num_missing_packets(0)); |
-} |
- |
-TEST_F(CastMessageBuilderTest, Reset) { |
- InsertPacket(); |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); |
- cast_msg_builder_->Reset(); |
- frame_id_map_.Clear(); |
- // Should reset nack list state and request a key frame. |
- cast_msg_builder_->UpdateCastMessage(); |
- EXPECT_TRUE(feedback_.triggered()); |
- EXPECT_EQ(0u, feedback_.num_missing_packets(0)); |
-} |
- |
-TEST_F(CastMessageBuilderTest, DeltaAfterReset) { |
- SetFrameIds(0, 0); |
- SetPacketId(0); |
- SetMaxPacketId(0); |
- SetKeyFrame(true); |
- InsertPacket(); |
- EXPECT_TRUE(feedback_.triggered()); |
- EXPECT_EQ(0u, feedback_.num_missing_packets(0)); |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); |
- cast_msg_builder_->Reset(); |
- SetFrameIds(1, 0); |
- SetPacketId(0); |
- SetMaxPacketId(0); |
- SetKeyFrame(true); |
- EXPECT_FALSE(feedback_.triggered()); |
-} |
- |
-TEST_F(CastMessageBuilderTest, BasicRps) { |
- SetFrameIds(0, 0); |
- SetPacketId(0); |
- SetMaxPacketId(0); |
- SetKeyFrame(true); |
- InsertPacket(); |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); |
- EXPECT_TRUE(feedback_.triggered()); |
- EXPECT_EQ(0u, feedback_.last_frame_acked()); |
- SetFrameIds(3, 0); |
- SetKeyFrame(false); |
- InsertPacket(); |
- EXPECT_TRUE(feedback_.triggered()); |
- EXPECT_EQ(3u, feedback_.last_frame_acked()); |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); |
- frame_id_map_.RemoveOldFrames(3); // Simulate 3 being pulled for rendering. |
- cast_msg_builder_->UpdateCastMessage(); |
- EXPECT_TRUE(feedback_.triggered()); |
- EXPECT_EQ(3u, feedback_.last_frame_acked()); |
-} |
- |
-TEST_F(CastMessageBuilderTest, InOrderRps) { |
- // Create a pattern - skip to rps, and don't look back. |
- SetFrameIds(0, 0); |
- SetPacketId(0); |
- SetMaxPacketId(0); |
- SetKeyFrame(true); |
- InsertPacket(); |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); |
- EXPECT_TRUE(feedback_.triggered()); |
- EXPECT_EQ(0u, feedback_.last_frame_acked()); |
- SetFrameIds(1, 0); |
- SetPacketId(0); |
- SetMaxPacketId(1); |
- SetKeyFrame(false); |
- InsertPacket(); |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); |
- EXPECT_FALSE(feedback_.triggered()); |
- SetFrameIds(3, 0); |
- SetPacketId(0); |
- SetMaxPacketId(0); |
- SetKeyFrame(false); |
- InsertPacket(); |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); |
- frame_id_map_.RemoveOldFrames(3); // Simulate 3 being pulled for rendering. |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); |
- cast_msg_builder_->UpdateCastMessage(); |
- EXPECT_TRUE(feedback_.triggered()); |
- EXPECT_EQ(3u, feedback_.last_frame_acked()); |
- // Make an old frame complete - should not trigger an ack. |
- SetFrameIds(1, 0); |
- SetPacketId(1); |
- SetMaxPacketId(1); |
- SetKeyFrame(false); |
- InsertPacket(); |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); |
- EXPECT_FALSE(feedback_.triggered()); |
- EXPECT_EQ(3u, feedback_.last_frame_acked()); |
-} |
- |
-TEST_F(CastMessageBuilderTest, SlowDownAck) { |
- SetDecoderSlowerThanMaxFrameRate(3); |
- SetFrameIds(0, 0); |
- SetPacketId(0); |
- SetMaxPacketId(0); |
- SetKeyFrame(true); |
- InsertPacket(); |
- |
- uint32 frame_id; |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); |
- SetKeyFrame(false); |
- for (frame_id = 1; frame_id < 3; ++frame_id) { |
- EXPECT_TRUE(feedback_.triggered()); |
- EXPECT_EQ(frame_id - 1, feedback_.last_frame_acked()); |
- SetFrameIds(frame_id, frame_id - 1); |
- InsertPacket(); |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); |
- } |
- // We should now have entered the slowdown ACK state. |
- uint32 expected_frame_id = 1; |
- for (; frame_id < 10; ++frame_id) { |
- if (frame_id % 2) { |
- ++expected_frame_id; |
- EXPECT_TRUE(feedback_.triggered()); |
- } else { |
- EXPECT_FALSE(feedback_.triggered()); |
- } |
- EXPECT_EQ(expected_frame_id, feedback_.last_frame_acked()); |
- SetFrameIds(frame_id, frame_id - 1); |
- InsertPacket(); |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); |
- } |
- EXPECT_FALSE(feedback_.triggered()); |
- EXPECT_EQ(expected_frame_id, feedback_.last_frame_acked()); |
- |
- // Simulate frame_id being pulled for rendering. |
- frame_id_map_.RemoveOldFrames(frame_id); |
- // We should now leave the slowdown ACK state. |
- ++frame_id; |
- SetFrameIds(frame_id, frame_id - 1); |
- InsertPacket(); |
- testing_clock_.Advance( |
- base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); |
- EXPECT_TRUE(feedback_.triggered()); |
- EXPECT_EQ(frame_id, feedback_.last_frame_acked()); |
-} |
- |
-} // namespace cast |
-} // namespace media |