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

Side by Side Diff: media/blink/multibuffer_unittest.cc

Issue 1954493002: Tweak multibuffer buffering strategy. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comments addressed Created 4 years, 7 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
« no previous file with comments | « media/blink/multibuffer_reader.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include <deque> 8 #include <deque>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 }; 259 };
260 260
261 TEST_F(MultiBufferTest, ReadAll) { 261 TEST_F(MultiBufferTest, ReadAll) {
262 multibuffer_.SetMaxWriters(1); 262 multibuffer_.SetMaxWriters(1);
263 size_t pos = 0; 263 size_t pos = 0;
264 size_t end = 10000; 264 size_t end = 10000;
265 multibuffer_.SetFileSize(10000); 265 multibuffer_.SetFileSize(10000);
266 multibuffer_.SetMustReadWholeFile(true); 266 multibuffer_.SetMustReadWholeFile(true);
267 MultiBufferReader reader(&multibuffer_, pos, end, 267 MultiBufferReader reader(&multibuffer_, pos, end,
268 base::Callback<void(int64_t, int64_t)>()); 268 base::Callback<void(int64_t, int64_t)>());
269 reader.SetMaxBuffer(2000, 5000); 269 reader.SetPinRange(2000, 5000);
270 reader.SetPreload(1000, 1000); 270 reader.SetPreload(1000, 1000);
271 while (pos < end) { 271 while (pos < end) {
272 unsigned char buffer[27]; 272 unsigned char buffer[27];
273 buffer[17] = 17; 273 buffer[17] = 17;
274 size_t to_read = std::min<size_t>(end - pos, 17); 274 size_t to_read = std::min<size_t>(end - pos, 17);
275 int64_t bytes_read = reader.TryRead(buffer, to_read); 275 int64_t bytes_read = reader.TryRead(buffer, to_read);
276 if (bytes_read) { 276 if (bytes_read) {
277 EXPECT_EQ(buffer[17], 17); 277 EXPECT_EQ(buffer[17], 17);
278 for (int64_t i = 0; i < bytes_read; i++) { 278 for (int64_t i = 0; i < bytes_read; i++) {
279 uint8_t expected = static_cast<uint8_t>((pos * 15485863) >> 16); 279 uint8_t expected = static_cast<uint8_t>((pos * 15485863) >> 16);
280 EXPECT_EQ(expected, buffer[i]) << " pos = " << pos; 280 EXPECT_EQ(expected, buffer[i]) << " pos = " << pos;
281 pos++; 281 pos++;
282 } 282 }
283 } else { 283 } else {
284 Advance(); 284 Advance();
285 } 285 }
286 } 286 }
287 } 287 }
288 288
289 TEST_F(MultiBufferTest, ReadAllAdvanceFirst) { 289 TEST_F(MultiBufferTest, ReadAllAdvanceFirst) {
290 multibuffer_.SetMaxWriters(1); 290 multibuffer_.SetMaxWriters(1);
291 size_t pos = 0; 291 size_t pos = 0;
292 size_t end = 10000; 292 size_t end = 10000;
293 multibuffer_.SetFileSize(10000); 293 multibuffer_.SetFileSize(10000);
294 multibuffer_.SetMustReadWholeFile(true); 294 multibuffer_.SetMustReadWholeFile(true);
295 MultiBufferReader reader(&multibuffer_, pos, end, 295 MultiBufferReader reader(&multibuffer_, pos, end,
296 base::Callback<void(int64_t, int64_t)>()); 296 base::Callback<void(int64_t, int64_t)>());
297 reader.SetMaxBuffer(2000, 5000); 297 reader.SetPinRange(2000, 5000);
298 reader.SetPreload(1000, 1000); 298 reader.SetPreload(1000, 1000);
299 while (pos < end) { 299 while (pos < end) {
300 unsigned char buffer[27]; 300 unsigned char buffer[27];
301 buffer[17] = 17; 301 buffer[17] = 17;
302 size_t to_read = std::min<size_t>(end - pos, 17); 302 size_t to_read = std::min<size_t>(end - pos, 17);
303 while (AdvanceAll()) { 303 while (AdvanceAll()) {
304 } 304 }
305 int64_t bytes = reader.TryRead(buffer, to_read); 305 int64_t bytes = reader.TryRead(buffer, to_read);
306 EXPECT_GT(bytes, 0); 306 EXPECT_GT(bytes, 0);
307 EXPECT_EQ(buffer[17], 17); 307 EXPECT_EQ(buffer[17], 17);
308 for (int64_t i = 0; i < bytes; i++) { 308 for (int64_t i = 0; i < bytes; i++) {
309 uint8_t expected = static_cast<uint8_t>((pos * 15485863) >> 16); 309 uint8_t expected = static_cast<uint8_t>((pos * 15485863) >> 16);
310 EXPECT_EQ(expected, buffer[i]) << " pos = " << pos; 310 EXPECT_EQ(expected, buffer[i]) << " pos = " << pos;
311 pos++; 311 pos++;
312 } 312 }
313 } 313 }
314 } 314 }
315 315
316 // Checks that if the data provider provides too much data after we told it 316 // Checks that if the data provider provides too much data after we told it
317 // to defer, we kill it. 317 // to defer, we kill it.
318 TEST_F(MultiBufferTest, ReadAllAdvanceFirst_NeverDefer) { 318 TEST_F(MultiBufferTest, ReadAllAdvanceFirst_NeverDefer) {
319 multibuffer_.SetMaxWriters(1); 319 multibuffer_.SetMaxWriters(1);
320 size_t pos = 0; 320 size_t pos = 0;
321 size_t end = 10000; 321 size_t end = 10000;
322 multibuffer_.SetFileSize(10000); 322 multibuffer_.SetFileSize(10000);
323 multibuffer_.SetMaxBlocksAfterDefer(-10000); 323 multibuffer_.SetMaxBlocksAfterDefer(-10000);
324 multibuffer_.SetRangeSupported(true); 324 multibuffer_.SetRangeSupported(true);
325 MultiBufferReader reader(&multibuffer_, pos, end, 325 MultiBufferReader reader(&multibuffer_, pos, end,
326 base::Callback<void(int64_t, int64_t)>()); 326 base::Callback<void(int64_t, int64_t)>());
327 reader.SetMaxBuffer(2000, 5000); 327 reader.SetPinRange(2000, 5000);
328 reader.SetPreload(1000, 1000); 328 reader.SetPreload(1000, 1000);
329 while (pos < end) { 329 while (pos < end) {
330 unsigned char buffer[27]; 330 unsigned char buffer[27];
331 buffer[17] = 17; 331 buffer[17] = 17;
332 size_t to_read = std::min<size_t>(end - pos, 17); 332 size_t to_read = std::min<size_t>(end - pos, 17);
333 while (AdvanceAll()) { 333 while (AdvanceAll()) {
334 } 334 }
335 int64_t bytes = reader.TryRead(buffer, to_read); 335 int64_t bytes = reader.TryRead(buffer, to_read);
336 EXPECT_GT(bytes, 0); 336 EXPECT_GT(bytes, 0);
337 EXPECT_EQ(buffer[17], 17); 337 EXPECT_EQ(buffer[17], 17);
(...skipping 10 matching lines...) Expand all
348 // ranges, so we don't destroy it no matter how much data it provides. 348 // ranges, so we don't destroy it no matter how much data it provides.
349 TEST_F(MultiBufferTest, ReadAllAdvanceFirst_NeverDefer2) { 349 TEST_F(MultiBufferTest, ReadAllAdvanceFirst_NeverDefer2) {
350 multibuffer_.SetMaxWriters(1); 350 multibuffer_.SetMaxWriters(1);
351 size_t pos = 0; 351 size_t pos = 0;
352 size_t end = 10000; 352 size_t end = 10000;
353 multibuffer_.SetFileSize(10000); 353 multibuffer_.SetFileSize(10000);
354 multibuffer_.SetMustReadWholeFile(true); 354 multibuffer_.SetMustReadWholeFile(true);
355 multibuffer_.SetMaxBlocksAfterDefer(-10000); 355 multibuffer_.SetMaxBlocksAfterDefer(-10000);
356 MultiBufferReader reader(&multibuffer_, pos, end, 356 MultiBufferReader reader(&multibuffer_, pos, end,
357 base::Callback<void(int64_t, int64_t)>()); 357 base::Callback<void(int64_t, int64_t)>());
358 reader.SetMaxBuffer(2000, 5000); 358 reader.SetPinRange(2000, 5000);
359 reader.SetPreload(1000, 1000); 359 reader.SetPreload(1000, 1000);
360 while (pos < end) { 360 while (pos < end) {
361 unsigned char buffer[27]; 361 unsigned char buffer[27];
362 buffer[17] = 17; 362 buffer[17] = 17;
363 size_t to_read = std::min<size_t>(end - pos, 17); 363 size_t to_read = std::min<size_t>(end - pos, 17);
364 while (AdvanceAll()) { 364 while (AdvanceAll()) {
365 } 365 }
366 int64_t bytes = reader.TryRead(buffer, to_read); 366 int64_t bytes = reader.TryRead(buffer, to_read);
367 EXPECT_GT(bytes, 0); 367 EXPECT_GT(bytes, 0);
368 EXPECT_EQ(buffer[17], 17); 368 EXPECT_EQ(buffer[17], 17);
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 TestRandom* rnd) 455 TestRandom* rnd)
456 : pos_(0), 456 : pos_(0),
457 end_(end), 457 end_(end),
458 max_read_size_(max_read_size), 458 max_read_size_(max_read_size),
459 read_size_(0), 459 read_size_(0),
460 rnd_(rnd), 460 rnd_(rnd),
461 reader_(multibuffer, 461 reader_(multibuffer,
462 pos_, 462 pos_,
463 end_, 463 end_,
464 base::Callback<void(int64_t, int64_t)>()) { 464 base::Callback<void(int64_t, int64_t)>()) {
465 reader_.SetMaxBuffer(2000, 5000); 465 reader_.SetPinRange(2000, 5000);
466 reader_.SetPreload(1000, 1000); 466 reader_.SetPreload(1000, 1000);
467 } 467 }
468 468
469 bool Read() { 469 bool Read() {
470 if (read_size_ == 0) 470 if (read_size_ == 0)
471 return true; 471 return true;
472 unsigned char buffer[4096]; 472 unsigned char buffer[4096];
473 CHECK_LE(read_size_, static_cast<int64_t>(sizeof(buffer))); 473 CHECK_LE(read_size_, static_cast<int64_t>(sizeof(buffer)));
474 CHECK_EQ(pos_, reader_.Tell()); 474 CHECK_EQ(pos_, reader_.Tell());
475 int64_t bytes_read = reader_.TryRead(buffer, read_size_); 475 int64_t bytes_read = reader_.TryRead(buffer, read_size_);
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 multibuffer_.CheckLRUState(); 566 multibuffer_.CheckLRUState();
567 } 567 }
568 multibuffer_.CheckPresentState(); 568 multibuffer_.CheckPresentState();
569 while (!read_helpers.empty()) { 569 while (!read_helpers.empty()) {
570 delete read_helpers.back(); 570 delete read_helpers.back();
571 read_helpers.pop_back(); 571 read_helpers.pop_back();
572 } 572 }
573 } 573 }
574 574
575 } // namespace media 575 } // namespace media
OLDNEW
« no previous file with comments | « media/blink/multibuffer_reader.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698