| 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 |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 }; | 45 }; |
| 46 | 46 |
| 47 // Help class extended so we can do EXPECT_EQ and collections. | 47 // Help class extended so we can do EXPECT_EQ and collections. |
| 48 class PacketInfo : public webrtc::PacketInfo { | 48 class PacketInfo : public webrtc::PacketInfo { |
| 49 public: | 49 public: |
| 50 PacketInfo(int64_t arrival_time_ms, uint16_t sequence_number) | 50 PacketInfo(int64_t arrival_time_ms, uint16_t sequence_number) |
| 51 : PacketInfo(arrival_time_ms, | 51 : PacketInfo(arrival_time_ms, |
| 52 0, | 52 0, |
| 53 sequence_number, | 53 sequence_number, |
| 54 0, | 54 0, |
| 55 PacketInfo::kNotAProbe) {} | 55 PacedPacketInfo::kNotAProbe) {} |
| 56 PacketInfo(int64_t arrival_time_ms, | 56 PacketInfo(int64_t arrival_time_ms, |
| 57 int64_t send_time_ms, | 57 int64_t send_time_ms, |
| 58 uint16_t sequence_number, | 58 uint16_t sequence_number, |
| 59 size_t payload_size, | 59 size_t payload_size, |
| 60 int probe_cluster_id) | 60 int probe_cluster_id) |
| 61 : webrtc::PacketInfo(-1, | 61 : webrtc::PacketInfo(-1, |
| 62 arrival_time_ms, | 62 arrival_time_ms, |
| 63 send_time_ms, | 63 send_time_ms, |
| 64 sequence_number, | 64 sequence_number, |
| 65 payload_size, | 65 payload_size, |
| (...skipping 25 matching lines...) Expand all Loading... |
| 91 EXPECT_FALSE(history_.GetInfo(&received_packet3, true)); | 91 EXPECT_FALSE(history_.GetInfo(&received_packet3, true)); |
| 92 } | 92 } |
| 93 | 93 |
| 94 TEST_F(SendTimeHistoryTest, PopulatesExpectedFields) { | 94 TEST_F(SendTimeHistoryTest, PopulatesExpectedFields) { |
| 95 const uint16_t kSeqNo = 10; | 95 const uint16_t kSeqNo = 10; |
| 96 const int64_t kSendTime = 1000; | 96 const int64_t kSendTime = 1000; |
| 97 const int64_t kReceiveTime = 2000; | 97 const int64_t kReceiveTime = 2000; |
| 98 const size_t kPayloadSize = 42; | 98 const size_t kPayloadSize = 42; |
| 99 | 99 |
| 100 AddPacketWithSendTime(kSeqNo, kPayloadSize, kSendTime, | 100 AddPacketWithSendTime(kSeqNo, kPayloadSize, kSendTime, |
| 101 PacketInfo::kNotAProbe); | 101 PacedPacketInfo::kNotAProbe); |
| 102 | 102 |
| 103 PacketInfo info(kReceiveTime, kSeqNo); | 103 PacketInfo info(kReceiveTime, kSeqNo); |
| 104 EXPECT_TRUE(history_.GetInfo(&info, true)); | 104 EXPECT_TRUE(history_.GetInfo(&info, true)); |
| 105 EXPECT_EQ(kReceiveTime, info.arrival_time_ms); | 105 EXPECT_EQ(kReceiveTime, info.arrival_time_ms); |
| 106 EXPECT_EQ(kSendTime, info.send_time_ms); | 106 EXPECT_EQ(kSendTime, info.send_time_ms); |
| 107 EXPECT_EQ(kSeqNo, info.sequence_number); | 107 EXPECT_EQ(kSeqNo, info.sequence_number); |
| 108 EXPECT_EQ(kPayloadSize, info.payload_size); | 108 EXPECT_EQ(kPayloadSize, info.payload_size); |
| 109 } | 109 } |
| 110 | 110 |
| 111 TEST_F(SendTimeHistoryTest, AddThenRemoveOutOfOrder) { | 111 TEST_F(SendTimeHistoryTest, AddThenRemoveOutOfOrder) { |
| 112 std::vector<PacketInfo> sent_packets; | 112 std::vector<PacketInfo> sent_packets; |
| 113 std::vector<PacketInfo> received_packets; | 113 std::vector<PacketInfo> received_packets; |
| 114 const size_t num_items = 100; | 114 const size_t num_items = 100; |
| 115 const size_t kPacketSize = 400; | 115 const size_t kPacketSize = 400; |
| 116 const size_t kTransmissionTime = 1234; | 116 const size_t kTransmissionTime = 1234; |
| 117 const int kProbeClusterId = 1; | 117 const int kProbeClusterId = 1; |
| 118 for (size_t i = 0; i < num_items; ++i) { | 118 for (size_t i = 0; i < num_items; ++i) { |
| 119 sent_packets.push_back(PacketInfo(0, static_cast<int64_t>(i), | 119 sent_packets.push_back(PacketInfo(0, static_cast<int64_t>(i), |
| 120 static_cast<uint16_t>(i), kPacketSize, | 120 static_cast<uint16_t>(i), kPacketSize, |
| 121 kProbeClusterId)); | 121 kProbeClusterId)); |
| 122 received_packets.push_back(PacketInfo( | 122 received_packets.push_back(PacketInfo( |
| 123 static_cast<int64_t>(i) + kTransmissionTime, 0, | 123 static_cast<int64_t>(i) + kTransmissionTime, 0, |
| 124 static_cast<uint16_t>(i), kPacketSize, PacketInfo::kNotAProbe)); | 124 static_cast<uint16_t>(i), kPacketSize, PacedPacketInfo::kNotAProbe)); |
| 125 } | 125 } |
| 126 for (size_t i = 0; i < num_items; ++i) { | 126 for (size_t i = 0; i < num_items; ++i) { |
| 127 history_.AddAndRemoveOld(sent_packets[i].sequence_number, | 127 history_.AddAndRemoveOld(sent_packets[i].sequence_number, |
| 128 sent_packets[i].payload_size, | 128 sent_packets[i].payload_size, |
| 129 sent_packets[i].probe_cluster_id); | 129 sent_packets[i].probe_cluster_id); |
| 130 } | 130 } |
| 131 for (size_t i = 0; i < num_items; ++i) | 131 for (size_t i = 0; i < num_items; ++i) |
| 132 history_.OnSentPacket(sent_packets[i].sequence_number, | 132 history_.OnSentPacket(sent_packets[i].sequence_number, |
| 133 sent_packets[i].send_time_ms); | 133 sent_packets[i].send_time_ms); |
| 134 std::random_shuffle(received_packets.begin(), received_packets.end()); | 134 std::random_shuffle(received_packets.begin(), received_packets.end()); |
| 135 for (size_t i = 0; i < num_items; ++i) { | 135 for (size_t i = 0; i < num_items; ++i) { |
| 136 PacketInfo packet = received_packets[i]; | 136 PacketInfo packet = received_packets[i]; |
| 137 EXPECT_TRUE(history_.GetInfo(&packet, false)); | 137 EXPECT_TRUE(history_.GetInfo(&packet, false)); |
| 138 PacketInfo sent_packet = sent_packets[packet.sequence_number]; | 138 PacketInfo sent_packet = sent_packets[packet.sequence_number]; |
| 139 sent_packet.arrival_time_ms = packet.arrival_time_ms; | 139 sent_packet.arrival_time_ms = packet.arrival_time_ms; |
| 140 EXPECT_EQ(sent_packet, packet); | 140 EXPECT_EQ(sent_packet, packet); |
| 141 EXPECT_TRUE(history_.GetInfo(&packet, true)); | 141 EXPECT_TRUE(history_.GetInfo(&packet, true)); |
| 142 } | 142 } |
| 143 for (PacketInfo packet : sent_packets) | 143 for (PacketInfo packet : sent_packets) |
| 144 EXPECT_FALSE(history_.GetInfo(&packet, false)); | 144 EXPECT_FALSE(history_.GetInfo(&packet, false)); |
| 145 } | 145 } |
| 146 | 146 |
| 147 TEST_F(SendTimeHistoryTest, HistorySize) { | 147 TEST_F(SendTimeHistoryTest, HistorySize) { |
| 148 const int kItems = kDefaultHistoryLengthMs / 100; | 148 const int kItems = kDefaultHistoryLengthMs / 100; |
| 149 for (int i = 0; i < kItems; ++i) { | 149 for (int i = 0; i < kItems; ++i) { |
| 150 clock_.AdvanceTimeMilliseconds(100); | 150 clock_.AdvanceTimeMilliseconds(100); |
| 151 AddPacketWithSendTime(i, 0, i * 100, PacketInfo::kNotAProbe); | 151 AddPacketWithSendTime(i, 0, i * 100, PacedPacketInfo::kNotAProbe); |
| 152 } | 152 } |
| 153 for (int i = 0; i < kItems; ++i) { | 153 for (int i = 0; i < kItems; ++i) { |
| 154 PacketInfo info(0, 0, static_cast<uint16_t>(i), 0, PacketInfo::kNotAProbe); | 154 PacketInfo info(0, 0, static_cast<uint16_t>(i), 0, |
| 155 PacedPacketInfo::kNotAProbe); |
| 155 EXPECT_TRUE(history_.GetInfo(&info, false)); | 156 EXPECT_TRUE(history_.GetInfo(&info, false)); |
| 156 EXPECT_EQ(i * 100, info.send_time_ms); | 157 EXPECT_EQ(i * 100, info.send_time_ms); |
| 157 } | 158 } |
| 158 clock_.AdvanceTimeMilliseconds(101); | 159 clock_.AdvanceTimeMilliseconds(101); |
| 159 AddPacketWithSendTime(kItems, 0, kItems * 101, PacketInfo::kNotAProbe); | 160 AddPacketWithSendTime(kItems, 0, kItems * 101, PacedPacketInfo::kNotAProbe); |
| 160 PacketInfo info(0, 0, 0, 0, PacketInfo::kNotAProbe); | 161 PacketInfo info(0, 0, 0, 0, PacedPacketInfo::kNotAProbe); |
| 161 EXPECT_FALSE(history_.GetInfo(&info, false)); | 162 EXPECT_FALSE(history_.GetInfo(&info, false)); |
| 162 for (int i = 1; i < (kItems + 1); ++i) { | 163 for (int i = 1; i < (kItems + 1); ++i) { |
| 163 PacketInfo info2(0, 0, static_cast<uint16_t>(i), 0, PacketInfo::kNotAProbe); | 164 PacketInfo info2(0, 0, static_cast<uint16_t>(i), 0, |
| 165 PacedPacketInfo::kNotAProbe); |
| 164 EXPECT_TRUE(history_.GetInfo(&info2, false)); | 166 EXPECT_TRUE(history_.GetInfo(&info2, false)); |
| 165 int64_t expected_time_ms = (i == kItems) ? i * 101 : i * 100; | 167 int64_t expected_time_ms = (i == kItems) ? i * 101 : i * 100; |
| 166 EXPECT_EQ(expected_time_ms, info2.send_time_ms); | 168 EXPECT_EQ(expected_time_ms, info2.send_time_ms); |
| 167 } | 169 } |
| 168 } | 170 } |
| 169 | 171 |
| 170 TEST_F(SendTimeHistoryTest, HistorySizeWithWraparound) { | 172 TEST_F(SendTimeHistoryTest, HistorySizeWithWraparound) { |
| 171 const uint16_t kMaxSeqNo = std::numeric_limits<uint16_t>::max(); | 173 const uint16_t kMaxSeqNo = std::numeric_limits<uint16_t>::max(); |
| 172 AddPacketWithSendTime(kMaxSeqNo - 2, 0, 0, PacketInfo::kNotAProbe); | 174 AddPacketWithSendTime(kMaxSeqNo - 2, 0, 0, PacedPacketInfo::kNotAProbe); |
| 173 | 175 |
| 174 clock_.AdvanceTimeMilliseconds(100); | 176 clock_.AdvanceTimeMilliseconds(100); |
| 175 AddPacketWithSendTime(kMaxSeqNo - 1, 1, 100, PacketInfo::kNotAProbe); | 177 AddPacketWithSendTime(kMaxSeqNo - 1, 1, 100, PacedPacketInfo::kNotAProbe); |
| 176 | 178 |
| 177 clock_.AdvanceTimeMilliseconds(100); | 179 clock_.AdvanceTimeMilliseconds(100); |
| 178 AddPacketWithSendTime(kMaxSeqNo, 0, 200, PacketInfo::kNotAProbe); | 180 AddPacketWithSendTime(kMaxSeqNo, 0, 200, PacedPacketInfo::kNotAProbe); |
| 179 | 181 |
| 180 clock_.AdvanceTimeMilliseconds(kDefaultHistoryLengthMs - 200 + 1); | 182 clock_.AdvanceTimeMilliseconds(kDefaultHistoryLengthMs - 200 + 1); |
| 181 AddPacketWithSendTime(0, 0, kDefaultHistoryLengthMs, PacketInfo::kNotAProbe); | 183 AddPacketWithSendTime(0, 0, kDefaultHistoryLengthMs, |
| 184 PacedPacketInfo::kNotAProbe); |
| 182 | 185 |
| 183 PacketInfo info(0, static_cast<uint16_t>(kMaxSeqNo - 2)); | 186 PacketInfo info(0, static_cast<uint16_t>(kMaxSeqNo - 2)); |
| 184 EXPECT_FALSE(history_.GetInfo(&info, false)); | 187 EXPECT_FALSE(history_.GetInfo(&info, false)); |
| 185 PacketInfo info2(0, static_cast<uint16_t>(kMaxSeqNo - 1)); | 188 PacketInfo info2(0, static_cast<uint16_t>(kMaxSeqNo - 1)); |
| 186 EXPECT_TRUE(history_.GetInfo(&info2, false)); | 189 EXPECT_TRUE(history_.GetInfo(&info2, false)); |
| 187 PacketInfo info3(0, static_cast<uint16_t>(kMaxSeqNo)); | 190 PacketInfo info3(0, static_cast<uint16_t>(kMaxSeqNo)); |
| 188 EXPECT_TRUE(history_.GetInfo(&info3, false)); | 191 EXPECT_TRUE(history_.GetInfo(&info3, false)); |
| 189 PacketInfo info4(0, 0); | 192 PacketInfo info4(0, 0); |
| 190 EXPECT_TRUE(history_.GetInfo(&info4, false)); | 193 EXPECT_TRUE(history_.GetInfo(&info4, false)); |
| 191 | 194 |
| 192 // Create a gap (kMaxSeqNo - 1) -> 0. | 195 // Create a gap (kMaxSeqNo - 1) -> 0. |
| 193 PacketInfo info5(0, kMaxSeqNo); | 196 PacketInfo info5(0, kMaxSeqNo); |
| 194 EXPECT_TRUE(history_.GetInfo(&info5, true)); | 197 EXPECT_TRUE(history_.GetInfo(&info5, true)); |
| 195 | 198 |
| 196 clock_.AdvanceTimeMilliseconds(100); | 199 clock_.AdvanceTimeMilliseconds(100); |
| 197 AddPacketWithSendTime(1, 0, 1100, PacketInfo::kNotAProbe); | 200 AddPacketWithSendTime(1, 0, 1100, PacedPacketInfo::kNotAProbe); |
| 198 | 201 |
| 199 PacketInfo info6(0, static_cast<uint16_t>(kMaxSeqNo - 2)); | 202 PacketInfo info6(0, static_cast<uint16_t>(kMaxSeqNo - 2)); |
| 200 EXPECT_FALSE(history_.GetInfo(&info6, false)); | 203 EXPECT_FALSE(history_.GetInfo(&info6, false)); |
| 201 PacketInfo info7(0, static_cast<uint16_t>(kMaxSeqNo - 1)); | 204 PacketInfo info7(0, static_cast<uint16_t>(kMaxSeqNo - 1)); |
| 202 EXPECT_FALSE(history_.GetInfo(&info7, false)); | 205 EXPECT_FALSE(history_.GetInfo(&info7, false)); |
| 203 PacketInfo info8(0, kMaxSeqNo); | 206 PacketInfo info8(0, kMaxSeqNo); |
| 204 EXPECT_FALSE(history_.GetInfo(&info8, false)); | 207 EXPECT_FALSE(history_.GetInfo(&info8, false)); |
| 205 PacketInfo info9(0, 0); | 208 PacketInfo info9(0, 0); |
| 206 EXPECT_TRUE(history_.GetInfo(&info9, false)); | 209 EXPECT_TRUE(history_.GetInfo(&info9, false)); |
| 207 PacketInfo info10(0, 1); | 210 PacketInfo info10(0, 1); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 230 EXPECT_TRUE(history_.GetInfo(&info2, true)); | 233 EXPECT_TRUE(history_.GetInfo(&info2, true)); |
| 231 EXPECT_EQ(packets[1], info2); | 234 EXPECT_EQ(packets[1], info2); |
| 232 | 235 |
| 233 PacketInfo info3(0, 0, packets[2].sequence_number, 0, 2); | 236 PacketInfo info3(0, 0, packets[2].sequence_number, 0, 2); |
| 234 EXPECT_TRUE(history_.GetInfo(&info3, true)); | 237 EXPECT_TRUE(history_.GetInfo(&info3, true)); |
| 235 EXPECT_EQ(packets[2], info3); | 238 EXPECT_EQ(packets[2], info3); |
| 236 } | 239 } |
| 237 | 240 |
| 238 } // namespace test | 241 } // namespace test |
| 239 } // namespace webrtc | 242 } // namespace webrtc |
| OLD | NEW |