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

Side by Side Diff: media/cast/framer/cast_message_builder_unittest.cc

Issue 250363002: [Cast] Clean-up RtpCastHeader and RtpParser, removing the last WebRTC dependency. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed hubbe's comment. Created 6 years, 8 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « media/cast/cast_testing.gypi ('k') | media/cast/framer/frame_buffer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 <stdint.h> 5 #include <stdint.h>
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/test/simple_test_tick_clock.h" 8 #include "base/test/simple_test_tick_clock.h"
9 #include "media/cast/framer/cast_message_builder.h" 9 #include "media/cast/framer/cast_message_builder.h"
10 #include "media/cast/rtcp/rtcp.h" 10 #include "media/cast/rtcp/rtcp.h"
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 81
82 class CastMessageBuilderTest : public ::testing::Test { 82 class CastMessageBuilderTest : public ::testing::Test {
83 protected: 83 protected:
84 CastMessageBuilderTest() 84 CastMessageBuilderTest()
85 : cast_msg_builder_(new CastMessageBuilder(&testing_clock_, 85 : cast_msg_builder_(new CastMessageBuilder(&testing_clock_,
86 &feedback_, 86 &feedback_,
87 &frame_id_map_, 87 &frame_id_map_,
88 kSsrc, 88 kSsrc,
89 true, 89 true,
90 0)) { 90 0)) {
91 rtp_header_.webrtc.header.ssrc = kSsrc; 91 rtp_header_.sender_ssrc = kSsrc;
92 rtp_header_.is_key_frame = false; 92 rtp_header_.is_key_frame = false;
93 testing_clock_.Advance( 93 testing_clock_.Advance(
94 base::TimeDelta::FromMilliseconds(kStartMillisecond)); 94 base::TimeDelta::FromMilliseconds(kStartMillisecond));
95 } 95 }
96 96
97 virtual ~CastMessageBuilderTest() {} 97 virtual ~CastMessageBuilderTest() {}
98 98
99 void SetFrameId(uint32 frame_id) { rtp_header_.frame_id = frame_id; } 99 void SetFrameIds(uint32 frame_id, uint32 reference_frame_id) {
100 rtp_header_.frame_id = frame_id;
101 rtp_header_.reference_frame_id = reference_frame_id;
102 }
100 103
101 void SetPacketId(uint16 packet_id) { rtp_header_.packet_id = packet_id; } 104 void SetPacketId(uint16 packet_id) { rtp_header_.packet_id = packet_id; }
102 105
103 void SetMaxPacketId(uint16 max_packet_id) { 106 void SetMaxPacketId(uint16 max_packet_id) {
104 rtp_header_.max_packet_id = max_packet_id; 107 rtp_header_.max_packet_id = max_packet_id;
105 } 108 }
106 109
107 void SetKeyFrame(bool is_key) { rtp_header_.is_key_frame = is_key; } 110 void SetKeyFrame(bool is_key) { rtp_header_.is_key_frame = is_key; }
108 111
109 void SetReferenceFrameId(uint32 reference_frame_id) {
110 rtp_header_.is_reference = true;
111 rtp_header_.reference_frame_id = reference_frame_id;
112 }
113
114 void InsertPacket() { 112 void InsertPacket() {
115 PacketType packet_type = frame_id_map_.InsertPacket(rtp_header_); 113 PacketType packet_type = frame_id_map_.InsertPacket(rtp_header_);
116 if (packet_type == kNewPacketCompletingFrame) { 114 if (packet_type == kNewPacketCompletingFrame) {
117 cast_msg_builder_->CompleteFrameReceived(rtp_header_.frame_id, 115 cast_msg_builder_->CompleteFrameReceived(rtp_header_.frame_id,
118 rtp_header_.is_key_frame); 116 rtp_header_.is_key_frame);
119 } 117 }
120 cast_msg_builder_->UpdateCastMessage(); 118 cast_msg_builder_->UpdateCastMessage();
121 } 119 }
122 120
123 void SetDecoderSlowerThanMaxFrameRate(int max_unacked_frames) { 121 void SetDecoderSlowerThanMaxFrameRate(int max_unacked_frames) {
124 cast_msg_builder_.reset(new CastMessageBuilder(&testing_clock_, 122 cast_msg_builder_.reset(new CastMessageBuilder(&testing_clock_,
125 &feedback_, 123 &feedback_,
126 &frame_id_map_, 124 &frame_id_map_,
127 kSsrc, 125 kSsrc,
128 false, 126 false,
129 max_unacked_frames)); 127 max_unacked_frames));
130 } 128 }
131 129
132 NackFeedbackVerification feedback_; 130 NackFeedbackVerification feedback_;
133 scoped_ptr<CastMessageBuilder> cast_msg_builder_; 131 scoped_ptr<CastMessageBuilder> cast_msg_builder_;
134 RtpCastHeader rtp_header_; 132 RtpCastHeader rtp_header_;
135 FrameIdMap frame_id_map_; 133 FrameIdMap frame_id_map_;
136 base::SimpleTestTickClock testing_clock_; 134 base::SimpleTestTickClock testing_clock_;
137 135
138 DISALLOW_COPY_AND_ASSIGN(CastMessageBuilderTest); 136 DISALLOW_COPY_AND_ASSIGN(CastMessageBuilderTest);
139 }; 137 };
140 138
141 TEST_F(CastMessageBuilderTest, StartWithAKeyFrame) { 139 TEST_F(CastMessageBuilderTest, StartWithAKeyFrame) {
142 SetFrameId(3); 140 SetFrameIds(3, 2);
143 SetPacketId(0); 141 SetPacketId(0);
144 SetMaxPacketId(0); 142 SetMaxPacketId(0);
145 InsertPacket(); 143 InsertPacket();
146 // Should not trigger ack. 144 // Should not trigger ack.
147 EXPECT_FALSE(feedback_.triggered()); 145 EXPECT_FALSE(feedback_.triggered());
148 SetFrameId(5); 146 SetFrameIds(5, 5);
149 SetPacketId(0); 147 SetPacketId(0);
150 SetMaxPacketId(0); 148 SetMaxPacketId(0);
151 SetKeyFrame(true); 149 SetKeyFrame(true);
152 InsertPacket(); 150 InsertPacket();
153 frame_id_map_.RemoveOldFrames(5); // Simulate 5 being pulled for rendering. 151 frame_id_map_.RemoveOldFrames(5); // Simulate 5 being pulled for rendering.
154 testing_clock_.Advance( 152 testing_clock_.Advance(
155 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); 153 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs));
156 cast_msg_builder_->UpdateCastMessage(); 154 cast_msg_builder_->UpdateCastMessage();
157 EXPECT_TRUE(feedback_.triggered()); 155 EXPECT_TRUE(feedback_.triggered());
158 EXPECT_EQ(5u, feedback_.last_frame_acked()); 156 EXPECT_EQ(5u, feedback_.last_frame_acked());
159 } 157 }
160 158
161 TEST_F(CastMessageBuilderTest, OneFrameNackList) { 159 TEST_F(CastMessageBuilderTest, OneFrameNackList) {
162 SetFrameId(0); 160 SetFrameIds(0, 0);
163 SetPacketId(4); 161 SetPacketId(4);
164 SetMaxPacketId(10); 162 SetMaxPacketId(10);
165 InsertPacket(); 163 InsertPacket();
166 testing_clock_.Advance( 164 testing_clock_.Advance(
167 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); 165 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs));
168 EXPECT_FALSE(feedback_.triggered()); 166 EXPECT_FALSE(feedback_.triggered());
169 testing_clock_.Advance( 167 testing_clock_.Advance(
170 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); 168 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs));
171 SetPacketId(5); 169 SetPacketId(5);
172 InsertPacket(); 170 InsertPacket();
173 EXPECT_TRUE(feedback_.triggered()); 171 EXPECT_TRUE(feedback_.triggered());
174 EXPECT_EQ(4u, feedback_.num_missing_packets(0)); 172 EXPECT_EQ(4u, feedback_.num_missing_packets(0));
175 } 173 }
176 174
177 TEST_F(CastMessageBuilderTest, CompleteFrameMissing) { 175 TEST_F(CastMessageBuilderTest, CompleteFrameMissing) {
178 SetFrameId(0); 176 SetFrameIds(0, 0);
179 SetPacketId(2); 177 SetPacketId(2);
180 SetMaxPacketId(5); 178 SetMaxPacketId(5);
181 InsertPacket(); 179 InsertPacket();
182 testing_clock_.Advance( 180 testing_clock_.Advance(
183 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); 181 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs));
184 SetFrameId(2); 182 SetFrameIds(2, 1);
185 SetPacketId(2); 183 SetPacketId(2);
186 SetMaxPacketId(5); 184 SetMaxPacketId(5);
187 InsertPacket(); 185 InsertPacket();
188 EXPECT_TRUE(feedback_.triggered()); 186 EXPECT_TRUE(feedback_.triggered());
189 EXPECT_EQ(kRtcpCastAllPacketsLost, feedback_.num_missing_packets(1)); 187 EXPECT_EQ(kRtcpCastAllPacketsLost, feedback_.num_missing_packets(1));
190 } 188 }
191 189
192 TEST_F(CastMessageBuilderTest, FastForwardAck) { 190 TEST_F(CastMessageBuilderTest, FastForwardAck) {
193 SetFrameId(1); 191 SetFrameIds(1, 0);
194 SetPacketId(0); 192 SetPacketId(0);
195 SetMaxPacketId(0); 193 SetMaxPacketId(0);
196 InsertPacket(); 194 InsertPacket();
197 EXPECT_FALSE(feedback_.triggered()); 195 EXPECT_FALSE(feedback_.triggered());
198 testing_clock_.Advance( 196 testing_clock_.Advance(
199 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); 197 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs));
200 SetFrameId(2); 198 SetFrameIds(2, 1);
201 SetPacketId(0); 199 SetPacketId(0);
202 SetMaxPacketId(0); 200 SetMaxPacketId(0);
203 InsertPacket(); 201 InsertPacket();
204 EXPECT_TRUE(feedback_.triggered()); 202 EXPECT_TRUE(feedback_.triggered());
205 EXPECT_EQ(kStartFrameId, feedback_.last_frame_acked()); 203 EXPECT_EQ(kStartFrameId, feedback_.last_frame_acked());
206 testing_clock_.Advance( 204 testing_clock_.Advance(
207 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); 205 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs));
208 SetFrameId(0); 206 SetFrameIds(0, 0);
209 SetPacketId(0); 207 SetPacketId(0);
210 SetMaxPacketId(0); 208 SetMaxPacketId(0);
211 SetKeyFrame(true); 209 SetKeyFrame(true);
212 InsertPacket(); 210 InsertPacket();
213 EXPECT_TRUE(feedback_.triggered()); 211 EXPECT_TRUE(feedback_.triggered());
214 EXPECT_EQ(2u, feedback_.last_frame_acked()); 212 EXPECT_EQ(2u, feedback_.last_frame_acked());
215 } 213 }
216 214
217 TEST_F(CastMessageBuilderTest, RemoveOldFrames) { 215 TEST_F(CastMessageBuilderTest, RemoveOldFrames) {
218 SetFrameId(1); 216 SetFrameIds(1, 0);
219 SetPacketId(0); 217 SetPacketId(0);
220 SetMaxPacketId(1); 218 SetMaxPacketId(1);
221 InsertPacket(); 219 InsertPacket();
222 EXPECT_FALSE(feedback_.triggered()); 220 EXPECT_FALSE(feedback_.triggered());
223 testing_clock_.Advance( 221 testing_clock_.Advance(
224 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); 222 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs));
225 SetFrameId(2); 223 SetFrameIds(2, 1);
226 SetPacketId(0); 224 SetPacketId(0);
227 SetMaxPacketId(0); 225 SetMaxPacketId(0);
228 InsertPacket(); 226 InsertPacket();
229 EXPECT_TRUE(feedback_.triggered()); 227 EXPECT_TRUE(feedback_.triggered());
230 testing_clock_.Advance( 228 testing_clock_.Advance(
231 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); 229 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs));
232 SetFrameId(3); 230 SetFrameIds(3, 2);
233 SetPacketId(0); 231 SetPacketId(0);
234 SetMaxPacketId(5); 232 SetMaxPacketId(5);
235 InsertPacket(); 233 InsertPacket();
236 EXPECT_TRUE(feedback_.triggered()); 234 EXPECT_TRUE(feedback_.triggered());
237 EXPECT_EQ(kStartFrameId, feedback_.last_frame_acked()); 235 EXPECT_EQ(kStartFrameId, feedback_.last_frame_acked());
238 testing_clock_.Advance( 236 testing_clock_.Advance(
239 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); 237 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs));
240 SetFrameId(5); 238 SetFrameIds(5, 5);
241 SetPacketId(0); 239 SetPacketId(0);
242 SetMaxPacketId(0); 240 SetMaxPacketId(0);
243 SetKeyFrame(true); 241 SetKeyFrame(true);
244 InsertPacket(); 242 InsertPacket();
245 testing_clock_.Advance( 243 testing_clock_.Advance(
246 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); 244 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs));
247 frame_id_map_.RemoveOldFrames(5); // Simulate 5 being pulled for rendering. 245 frame_id_map_.RemoveOldFrames(5); // Simulate 5 being pulled for rendering.
248 cast_msg_builder_->UpdateCastMessage(); 246 cast_msg_builder_->UpdateCastMessage();
249 EXPECT_TRUE(feedback_.triggered()); 247 EXPECT_TRUE(feedback_.triggered());
250 EXPECT_EQ(5u, feedback_.last_frame_acked()); 248 EXPECT_EQ(5u, feedback_.last_frame_acked());
251 testing_clock_.Advance( 249 testing_clock_.Advance(
252 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); 250 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs));
253 SetFrameId(1); 251 SetFrameIds(1, 0);
254 SetPacketId(1); 252 SetPacketId(1);
255 SetMaxPacketId(1); 253 SetMaxPacketId(1);
256 InsertPacket(); 254 InsertPacket();
257 EXPECT_FALSE(feedback_.triggered()); 255 EXPECT_FALSE(feedback_.triggered());
258 testing_clock_.Advance( 256 testing_clock_.Advance(
259 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); 257 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs));
260 InsertPacket(); 258 InsertPacket();
261 EXPECT_TRUE(feedback_.triggered()); 259 EXPECT_TRUE(feedback_.triggered());
262 EXPECT_EQ(5u, feedback_.last_frame_acked()); 260 EXPECT_EQ(5u, feedback_.last_frame_acked());
263 } 261 }
264 262
265 TEST_F(CastMessageBuilderTest, WrapFastForward) { 263 TEST_F(CastMessageBuilderTest, WrapFastForward) {
266 SetFrameId(254); 264 SetFrameIds(254, 254);
267 SetPacketId(0); 265 SetPacketId(0);
268 SetMaxPacketId(1); 266 SetMaxPacketId(1);
269 SetKeyFrame(true); 267 SetKeyFrame(true);
270 InsertPacket(); 268 InsertPacket();
271 EXPECT_FALSE(feedback_.triggered()); 269 EXPECT_FALSE(feedback_.triggered());
272 testing_clock_.Advance( 270 testing_clock_.Advance(
273 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); 271 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs));
274 SetFrameId(255); 272 SetFrameIds(255, 254);
275 SetPacketId(0); 273 SetPacketId(0);
276 SetMaxPacketId(0); 274 SetMaxPacketId(0);
277 SetKeyFrame(false); 275 SetKeyFrame(false);
278 InsertPacket(); 276 InsertPacket();
279 EXPECT_TRUE(feedback_.triggered()); 277 EXPECT_TRUE(feedback_.triggered());
280 EXPECT_EQ(253u, feedback_.last_frame_acked()); 278 EXPECT_EQ(253u, feedback_.last_frame_acked());
281 testing_clock_.Advance( 279 testing_clock_.Advance(
282 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); 280 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs));
283 SetFrameId(256); 281 SetFrameIds(256, 255);
284 SetPacketId(0); 282 SetPacketId(0);
285 SetMaxPacketId(0); 283 SetMaxPacketId(0);
286 SetKeyFrame(false); 284 SetKeyFrame(false);
287 InsertPacket(); 285 InsertPacket();
288 EXPECT_TRUE(feedback_.triggered()); 286 EXPECT_TRUE(feedback_.triggered());
289 EXPECT_EQ(253u, feedback_.last_frame_acked()); 287 EXPECT_EQ(253u, feedback_.last_frame_acked());
290 testing_clock_.Advance( 288 testing_clock_.Advance(
291 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); 289 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs));
292 SetFrameId(254); 290 SetFrameIds(254, 254);
293 SetPacketId(1); 291 SetPacketId(1);
294 SetMaxPacketId(1); 292 SetMaxPacketId(1);
295 SetKeyFrame(true); 293 SetKeyFrame(true);
296 InsertPacket(); 294 InsertPacket();
297 EXPECT_TRUE(feedback_.triggered()); 295 EXPECT_TRUE(feedback_.triggered());
298 EXPECT_EQ(256u, feedback_.last_frame_acked()); 296 EXPECT_EQ(256u, feedback_.last_frame_acked());
299 } 297 }
300 298
301 TEST_F(CastMessageBuilderTest, NackUntilMaxReceivedPacket) { 299 TEST_F(CastMessageBuilderTest, NackUntilMaxReceivedPacket) {
302 SetFrameId(0); 300 SetFrameIds(0, 0);
303 SetPacketId(0); 301 SetPacketId(0);
304 SetMaxPacketId(20); 302 SetMaxPacketId(20);
305 SetKeyFrame(true); 303 SetKeyFrame(true);
306 InsertPacket(); 304 InsertPacket();
307 testing_clock_.Advance( 305 testing_clock_.Advance(
308 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); 306 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs));
309 SetPacketId(5); 307 SetPacketId(5);
310 InsertPacket(); 308 InsertPacket();
311 EXPECT_TRUE(feedback_.triggered()); 309 EXPECT_TRUE(feedback_.triggered());
312 EXPECT_EQ(4u, feedback_.num_missing_packets(0)); 310 EXPECT_EQ(4u, feedback_.num_missing_packets(0));
313 } 311 }
314 312
315 TEST_F(CastMessageBuilderTest, NackUntilMaxReceivedPacketNextFrame) { 313 TEST_F(CastMessageBuilderTest, NackUntilMaxReceivedPacketNextFrame) {
316 SetFrameId(0); 314 SetFrameIds(0, 0);
317 SetPacketId(0); 315 SetPacketId(0);
318 SetMaxPacketId(20); 316 SetMaxPacketId(20);
319 SetKeyFrame(true); 317 SetKeyFrame(true);
320 InsertPacket(); 318 InsertPacket();
321 testing_clock_.Advance( 319 testing_clock_.Advance(
322 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); 320 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs));
323 SetPacketId(5); 321 SetPacketId(5);
324 InsertPacket(); 322 InsertPacket();
325 testing_clock_.Advance( 323 testing_clock_.Advance(
326 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); 324 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs));
327 EXPECT_TRUE(feedback_.triggered()); 325 EXPECT_TRUE(feedback_.triggered());
328 EXPECT_EQ(4u, feedback_.num_missing_packets(0)); 326 EXPECT_EQ(4u, feedback_.num_missing_packets(0));
329 SetFrameId(1); 327 SetFrameIds(1, 0);
330 SetMaxPacketId(2); 328 SetMaxPacketId(2);
331 SetPacketId(0); 329 SetPacketId(0);
332 SetKeyFrame(false); 330 SetKeyFrame(false);
333 InsertPacket(); 331 InsertPacket();
334 testing_clock_.Advance( 332 testing_clock_.Advance(
335 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); 333 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs));
336 EXPECT_TRUE(feedback_.triggered()); 334 EXPECT_TRUE(feedback_.triggered());
337 EXPECT_EQ(19u, feedback_.num_missing_packets(0)); 335 EXPECT_EQ(19u, feedback_.num_missing_packets(0));
338 } 336 }
339 337
340 TEST_F(CastMessageBuilderTest, NackUntilMaxReceivedPacketNextKey) { 338 TEST_F(CastMessageBuilderTest, NackUntilMaxReceivedPacketNextKey) {
341 SetFrameId(0); 339 SetFrameIds(0, 0);
342 SetPacketId(0); 340 SetPacketId(0);
343 SetMaxPacketId(20); 341 SetMaxPacketId(20);
344 SetKeyFrame(true); 342 SetKeyFrame(true);
345 InsertPacket(); 343 InsertPacket();
346 testing_clock_.Advance( 344 testing_clock_.Advance(
347 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); 345 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs));
348 SetPacketId(5); 346 SetPacketId(5);
349 InsertPacket(); 347 InsertPacket();
350 testing_clock_.Advance( 348 testing_clock_.Advance(
351 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); 349 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs));
352 EXPECT_TRUE(feedback_.triggered()); 350 EXPECT_TRUE(feedback_.triggered());
353 EXPECT_EQ(4u, feedback_.num_missing_packets(0)); 351 EXPECT_EQ(4u, feedback_.num_missing_packets(0));
354 SetFrameId(1); 352 SetFrameIds(1, 1);
355 SetMaxPacketId(0); 353 SetMaxPacketId(0);
356 SetPacketId(0); 354 SetPacketId(0);
357 SetKeyFrame(true); 355 SetKeyFrame(true);
358 InsertPacket(); 356 InsertPacket();
359 testing_clock_.Advance( 357 testing_clock_.Advance(
360 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); 358 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs));
361 EXPECT_TRUE(feedback_.triggered()); 359 EXPECT_TRUE(feedback_.triggered());
362 EXPECT_EQ(0u, feedback_.num_missing_packets(0)); 360 EXPECT_EQ(0u, feedback_.num_missing_packets(0));
363 } 361 }
364 362
365 TEST_F(CastMessageBuilderTest, Reset) { 363 TEST_F(CastMessageBuilderTest, Reset) {
366 InsertPacket(); 364 InsertPacket();
367 testing_clock_.Advance( 365 testing_clock_.Advance(
368 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); 366 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs));
369 cast_msg_builder_->Reset(); 367 cast_msg_builder_->Reset();
370 frame_id_map_.Clear(); 368 frame_id_map_.Clear();
371 // Should reset nack list state and request a key frame. 369 // Should reset nack list state and request a key frame.
372 cast_msg_builder_->UpdateCastMessage(); 370 cast_msg_builder_->UpdateCastMessage();
373 EXPECT_TRUE(feedback_.triggered()); 371 EXPECT_TRUE(feedback_.triggered());
374 EXPECT_EQ(0u, feedback_.num_missing_packets(0)); 372 EXPECT_EQ(0u, feedback_.num_missing_packets(0));
375 } 373 }
376 374
377 TEST_F(CastMessageBuilderTest, DeltaAfterReset) { 375 TEST_F(CastMessageBuilderTest, DeltaAfterReset) {
378 SetFrameId(0); 376 SetFrameIds(0, 0);
379 SetPacketId(0); 377 SetPacketId(0);
380 SetMaxPacketId(0); 378 SetMaxPacketId(0);
381 SetKeyFrame(true); 379 SetKeyFrame(true);
382 InsertPacket(); 380 InsertPacket();
383 EXPECT_TRUE(feedback_.triggered()); 381 EXPECT_TRUE(feedback_.triggered());
384 EXPECT_EQ(0u, feedback_.num_missing_packets(0)); 382 EXPECT_EQ(0u, feedback_.num_missing_packets(0));
385 testing_clock_.Advance( 383 testing_clock_.Advance(
386 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); 384 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs));
387 cast_msg_builder_->Reset(); 385 cast_msg_builder_->Reset();
388 SetFrameId(1); 386 SetFrameIds(1, 0);
389 SetPacketId(0); 387 SetPacketId(0);
390 SetMaxPacketId(0); 388 SetMaxPacketId(0);
391 SetKeyFrame(true); 389 SetKeyFrame(true);
392 EXPECT_FALSE(feedback_.triggered()); 390 EXPECT_FALSE(feedback_.triggered());
393 } 391 }
394 392
395 TEST_F(CastMessageBuilderTest, BasicRps) { 393 TEST_F(CastMessageBuilderTest, BasicRps) {
396 SetFrameId(0); 394 SetFrameIds(0, 0);
397 SetPacketId(0); 395 SetPacketId(0);
398 SetMaxPacketId(0); 396 SetMaxPacketId(0);
399 SetKeyFrame(true); 397 SetKeyFrame(true);
400 InsertPacket(); 398 InsertPacket();
401 testing_clock_.Advance( 399 testing_clock_.Advance(
402 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); 400 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs));
403 EXPECT_TRUE(feedback_.triggered()); 401 EXPECT_TRUE(feedback_.triggered());
404 EXPECT_EQ(0u, feedback_.last_frame_acked()); 402 EXPECT_EQ(0u, feedback_.last_frame_acked());
405 SetFrameId(3); 403 SetFrameIds(3, 0);
406 SetKeyFrame(false); 404 SetKeyFrame(false);
407 SetReferenceFrameId(0);
408 InsertPacket(); 405 InsertPacket();
409 EXPECT_TRUE(feedback_.triggered()); 406 EXPECT_TRUE(feedback_.triggered());
410 EXPECT_EQ(0u, feedback_.last_frame_acked()); 407 EXPECT_EQ(0u, feedback_.last_frame_acked());
411 testing_clock_.Advance( 408 testing_clock_.Advance(
412 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs)); 409 base::TimeDelta::FromMilliseconds(kLongTimeIncrementMs));
413 frame_id_map_.RemoveOldFrames(3); // Simulate 3 being pulled for rendering. 410 frame_id_map_.RemoveOldFrames(3); // Simulate 3 being pulled for rendering.
414 cast_msg_builder_->UpdateCastMessage(); 411 cast_msg_builder_->UpdateCastMessage();
415 EXPECT_TRUE(feedback_.triggered()); 412 EXPECT_TRUE(feedback_.triggered());
416 EXPECT_EQ(3u, feedback_.last_frame_acked()); 413 EXPECT_EQ(3u, feedback_.last_frame_acked());
417 } 414 }
418 415
419 TEST_F(CastMessageBuilderTest, InOrderRps) { 416 TEST_F(CastMessageBuilderTest, InOrderRps) {
420 // Create a pattern - skip to rps, and don't look back. 417 // Create a pattern - skip to rps, and don't look back.
421 SetFrameId(0); 418 SetFrameIds(0, 0);
422 SetPacketId(0); 419 SetPacketId(0);
423 SetMaxPacketId(0); 420 SetMaxPacketId(0);
424 SetKeyFrame(true); 421 SetKeyFrame(true);
425 InsertPacket(); 422 InsertPacket();
426 testing_clock_.Advance( 423 testing_clock_.Advance(
427 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); 424 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs));
428 EXPECT_TRUE(feedback_.triggered()); 425 EXPECT_TRUE(feedback_.triggered());
429 EXPECT_EQ(0u, feedback_.last_frame_acked()); 426 EXPECT_EQ(0u, feedback_.last_frame_acked());
430 SetFrameId(1); 427 SetFrameIds(1, 0);
431 SetPacketId(0); 428 SetPacketId(0);
432 SetMaxPacketId(1); 429 SetMaxPacketId(1);
433 SetKeyFrame(false); 430 SetKeyFrame(false);
434 InsertPacket(); 431 InsertPacket();
435 testing_clock_.Advance( 432 testing_clock_.Advance(
436 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); 433 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs));
437 EXPECT_FALSE(feedback_.triggered()); 434 EXPECT_FALSE(feedback_.triggered());
438 SetFrameId(3); 435 SetFrameIds(3, 0);
439 SetPacketId(0); 436 SetPacketId(0);
440 SetMaxPacketId(0); 437 SetMaxPacketId(0);
441 SetKeyFrame(false); 438 SetKeyFrame(false);
442 SetReferenceFrameId(0);
443 InsertPacket(); 439 InsertPacket();
444 testing_clock_.Advance( 440 testing_clock_.Advance(
445 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); 441 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs));
446 frame_id_map_.RemoveOldFrames(3); // Simulate 3 being pulled for rendering. 442 frame_id_map_.RemoveOldFrames(3); // Simulate 3 being pulled for rendering.
447 testing_clock_.Advance( 443 testing_clock_.Advance(
448 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); 444 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs));
449 cast_msg_builder_->UpdateCastMessage(); 445 cast_msg_builder_->UpdateCastMessage();
450 EXPECT_TRUE(feedback_.triggered()); 446 EXPECT_TRUE(feedback_.triggered());
451 EXPECT_EQ(3u, feedback_.last_frame_acked()); 447 EXPECT_EQ(3u, feedback_.last_frame_acked());
452 // Make an old frame complete - should not trigger an ack. 448 // Make an old frame complete - should not trigger an ack.
453 SetFrameId(1); 449 SetFrameIds(1, 0);
454 SetPacketId(1); 450 SetPacketId(1);
455 SetMaxPacketId(1); 451 SetMaxPacketId(1);
456 SetKeyFrame(false); 452 SetKeyFrame(false);
457 InsertPacket(); 453 InsertPacket();
458 testing_clock_.Advance( 454 testing_clock_.Advance(
459 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); 455 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs));
460 EXPECT_FALSE(feedback_.triggered()); 456 EXPECT_FALSE(feedback_.triggered());
461 EXPECT_EQ(3u, feedback_.last_frame_acked()); 457 EXPECT_EQ(3u, feedback_.last_frame_acked());
462 } 458 }
463 459
464 TEST_F(CastMessageBuilderTest, SlowDownAck) { 460 TEST_F(CastMessageBuilderTest, SlowDownAck) {
465 SetDecoderSlowerThanMaxFrameRate(3); 461 SetDecoderSlowerThanMaxFrameRate(3);
466 SetFrameId(0); 462 SetFrameIds(0, 0);
467 SetPacketId(0); 463 SetPacketId(0);
468 SetMaxPacketId(0); 464 SetMaxPacketId(0);
469 SetKeyFrame(true); 465 SetKeyFrame(true);
470 InsertPacket(); 466 InsertPacket();
471 467
472 uint32 frame_id; 468 uint32 frame_id;
473 testing_clock_.Advance( 469 testing_clock_.Advance(
474 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); 470 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs));
475 SetKeyFrame(false); 471 SetKeyFrame(false);
476 for (frame_id = 1; frame_id < 3; ++frame_id) { 472 for (frame_id = 1; frame_id < 3; ++frame_id) {
477 EXPECT_TRUE(feedback_.triggered()); 473 EXPECT_TRUE(feedback_.triggered());
478 EXPECT_EQ(frame_id - 1, feedback_.last_frame_acked()); 474 EXPECT_EQ(frame_id - 1, feedback_.last_frame_acked());
479 SetFrameId(frame_id); 475 SetFrameIds(frame_id, frame_id - 1);
480 InsertPacket(); 476 InsertPacket();
481 testing_clock_.Advance( 477 testing_clock_.Advance(
482 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); 478 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs));
483 } 479 }
484 // We should now have entered the slowdown ACK state. 480 // We should now have entered the slowdown ACK state.
485 uint32 expected_frame_id = 1; 481 uint32 expected_frame_id = 1;
486 for (; frame_id < 10; ++frame_id) { 482 for (; frame_id < 10; ++frame_id) {
487 if (frame_id % 2) 483 if (frame_id % 2)
488 ++expected_frame_id; 484 ++expected_frame_id;
489 EXPECT_TRUE(feedback_.triggered()); 485 EXPECT_TRUE(feedback_.triggered());
490 EXPECT_EQ(expected_frame_id, feedback_.last_frame_acked()); 486 EXPECT_EQ(expected_frame_id, feedback_.last_frame_acked());
491 SetFrameId(frame_id); 487 SetFrameIds(frame_id, frame_id - 1);
492 InsertPacket(); 488 InsertPacket();
493 testing_clock_.Advance( 489 testing_clock_.Advance(
494 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); 490 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs));
495 } 491 }
496 EXPECT_TRUE(feedback_.triggered()); 492 EXPECT_TRUE(feedback_.triggered());
497 EXPECT_EQ(expected_frame_id, feedback_.last_frame_acked()); 493 EXPECT_EQ(expected_frame_id, feedback_.last_frame_acked());
498 494
499 // Simulate frame_id being pulled for rendering. 495 // Simulate frame_id being pulled for rendering.
500 frame_id_map_.RemoveOldFrames(frame_id); 496 frame_id_map_.RemoveOldFrames(frame_id);
501 // We should now leave the slowdown ACK state. 497 // We should now leave the slowdown ACK state.
502 ++frame_id; 498 ++frame_id;
503 SetFrameId(frame_id); 499 SetFrameIds(frame_id, frame_id - 1);
504 InsertPacket(); 500 InsertPacket();
505 testing_clock_.Advance( 501 testing_clock_.Advance(
506 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs)); 502 base::TimeDelta::FromMilliseconds(kShortTimeIncrementMs));
507 EXPECT_TRUE(feedback_.triggered()); 503 EXPECT_TRUE(feedback_.triggered());
508 EXPECT_EQ(frame_id, feedback_.last_frame_acked()); 504 EXPECT_EQ(frame_id, feedback_.last_frame_acked());
509 } 505 }
510 506
511 } // namespace cast 507 } // namespace cast
512 } // namespace media 508 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/cast_testing.gypi ('k') | media/cast/framer/frame_buffer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698