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

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

Issue 1829163002: Lazily prune the multibuffer block cache. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: no export Created 4 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
« no previous file with comments | « media/blink/multibuffer_data_source_unittest.cc ('k') | media/blink/url_index.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 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>
11 11
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/callback_helpers.h" 13 #include "base/callback_helpers.h"
14 #include "base/message_loop/message_loop.h" 14 #include "base/message_loop/message_loop.h"
15 #include "base/test/simple_test_tick_clock.h"
16 #include "media/base/fake_single_thread_task_runner.h"
15 #include "media/base/test_random.h" 17 #include "media/base/test_random.h"
16 #include "media/blink/multibuffer.h" 18 #include "media/blink/multibuffer.h"
17 #include "media/blink/multibuffer_reader.h" 19 #include "media/blink/multibuffer_reader.h"
18 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
19 21
20 const int kBlockSizeShift = 8; 22 const int kBlockSizeShift = 8;
21 const size_t kBlockSize = 1UL << kBlockSizeShift; 23 const size_t kBlockSize = 1UL << kBlockSizeShift;
22 24
23 namespace media { 25 namespace media {
24 26
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 int32_t max_blocks_after_defer_; 215 int32_t max_blocks_after_defer_;
214 bool must_read_whole_file_; 216 bool must_read_whole_file_;
215 int32_t writers_created_; 217 int32_t writers_created_;
216 TestRandom* rnd_; 218 TestRandom* rnd_;
217 }; 219 };
218 220
219 class MultiBufferTest : public testing::Test { 221 class MultiBufferTest : public testing::Test {
220 public: 222 public:
221 MultiBufferTest() 223 MultiBufferTest()
222 : rnd_(42), 224 : rnd_(42),
223 lru_(new MultiBuffer::GlobalLRU()), 225 task_runner_(new FakeSingleThreadTaskRunner(&clock_)),
226 lru_(new MultiBuffer::GlobalLRU(task_runner_)),
224 multibuffer_(kBlockSizeShift, lru_, &rnd_) {} 227 multibuffer_(kBlockSizeShift, lru_, &rnd_) {}
225 228
229 void TearDown() override {
230 // Make sure we have nothing left to prune.
231 lru_->Prune(1000000);
232 // Run the outstanding callback to make sure everything is freed.
233 task_runner_->Sleep(base::TimeDelta::FromSeconds(30));
234 }
235
226 void Advance() { 236 void Advance() {
227 CHECK(writers.size()); 237 CHECK(writers.size());
228 writers[rnd_.Rand() % writers.size()]->Advance(); 238 writers[rnd_.Rand() % writers.size()]->Advance();
229 } 239 }
230 240
231 bool AdvanceAll() { 241 bool AdvanceAll() {
232 bool advanced = false; 242 bool advanced = false;
233 for (size_t i = 0; i < writers.size(); i++) { 243 for (size_t i = 0; i < writers.size(); i++) {
234 advanced |= writers[i]->Advance(); 244 advanced |= writers[i]->Advance();
235 } 245 }
236 multibuffer_.CheckLRUState(); 246 multibuffer_.CheckLRUState();
237 return advanced; 247 return advanced;
238 } 248 }
239 249
240 protected: 250 protected:
241 TestRandom rnd_; 251 TestRandom rnd_;
252 base::SimpleTestTickClock clock_;
253 scoped_refptr<FakeSingleThreadTaskRunner> task_runner_;
242 scoped_refptr<MultiBuffer::GlobalLRU> lru_; 254 scoped_refptr<MultiBuffer::GlobalLRU> lru_;
243 TestMultiBuffer multibuffer_; 255 TestMultiBuffer multibuffer_;
256
257 // TODO(hubbe): Make MultiBufferReader take a task_runner_
244 base::MessageLoop message_loop_; 258 base::MessageLoop message_loop_;
245 }; 259 };
246 260
247 TEST_F(MultiBufferTest, ReadAll) { 261 TEST_F(MultiBufferTest, ReadAll) {
248 multibuffer_.SetMaxWriters(1); 262 multibuffer_.SetMaxWriters(1);
249 size_t pos = 0; 263 size_t pos = 0;
250 size_t end = 10000; 264 size_t end = 10000;
251 multibuffer_.SetFileSize(10000); 265 multibuffer_.SetFileSize(10000);
252 multibuffer_.SetMustReadWholeFile(true); 266 multibuffer_.SetMustReadWholeFile(true);
253 MultiBufferReader reader(&multibuffer_, pos, end, 267 MultiBufferReader reader(&multibuffer_, pos, end,
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 lru_->Prune(3); 396 lru_->Prune(3);
383 current_size -= 3; 397 current_size -= 3;
384 EXPECT_EQ(current_size, lru_->Size()); 398 EXPECT_EQ(current_size, lru_->Size());
385 lru_->Prune(3); 399 lru_->Prune(3);
386 current_size -= 3; 400 current_size -= 3;
387 EXPECT_EQ(current_size, lru_->Size()); 401 EXPECT_EQ(current_size, lru_->Size());
388 lru_->Prune(1000); 402 lru_->Prune(1000);
389 EXPECT_EQ(0, lru_->Size()); 403 EXPECT_EQ(0, lru_->Size());
390 } 404 }
391 405
406 TEST_F(MultiBufferTest, LRUTestExpirationTest) {
407 int64_t max_size = 17;
408 int64_t current_size = 0;
409 lru_->IncrementMaxSize(max_size);
410
411 multibuffer_.SetMaxWriters(1);
412 size_t pos = 0;
413 size_t end = 10000;
414 multibuffer_.SetFileSize(10000);
415 MultiBufferReader reader(&multibuffer_, pos, end,
416 base::Callback<void(int64_t, int64_t)>());
417 reader.SetPreload(10000, 10000);
418 // Note, no pinning, all data should end up in LRU.
419 EXPECT_EQ(current_size, lru_->Size());
420 current_size += max_size;
421 while (AdvanceAll()) {
422 }
423 EXPECT_EQ(current_size, lru_->Size());
424 EXPECT_FALSE(lru_->Pruneable());
425
426 // Make 3 packets pruneable.
427 lru_->IncrementMaxSize(-3);
428 max_size -= 3;
429
430 // There should be no change after 29 seconds.
431 task_runner_->Sleep(base::TimeDelta::FromSeconds(29));
432 EXPECT_EQ(current_size, lru_->Size());
433 EXPECT_TRUE(lru_->Pruneable());
434
435 // After 30 seconds, pruning should have happened.
436 task_runner_->Sleep(base::TimeDelta::FromSeconds(30));
437 current_size -= 3;
438 EXPECT_EQ(current_size, lru_->Size());
439 EXPECT_FALSE(lru_->Pruneable());
440
441 // Make the rest of the packets pruneable.
442 lru_->IncrementMaxSize(-max_size);
443
444 // After another 30 seconds, everything should be pruned.
445 task_runner_->Sleep(base::TimeDelta::FromSeconds(30));
446 EXPECT_EQ(0, lru_->Size());
447 EXPECT_FALSE(lru_->Pruneable());
448 }
449
392 class ReadHelper { 450 class ReadHelper {
393 public: 451 public:
394 ReadHelper(size_t end, 452 ReadHelper(size_t end,
395 size_t max_read_size, 453 size_t max_read_size,
396 MultiBuffer* multibuffer, 454 MultiBuffer* multibuffer,
397 TestRandom* rnd) 455 TestRandom* rnd)
398 : pos_(0), 456 : pos_(0),
399 end_(end), 457 end_(end),
400 max_read_size_(max_read_size), 458 max_read_size_(max_read_size),
401 read_size_(0), 459 read_size_(0),
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 multibuffer_.CheckLRUState(); 566 multibuffer_.CheckLRUState();
509 } 567 }
510 multibuffer_.CheckPresentState(); 568 multibuffer_.CheckPresentState();
511 while (!read_helpers.empty()) { 569 while (!read_helpers.empty()) {
512 delete read_helpers.back(); 570 delete read_helpers.back();
513 read_helpers.pop_back(); 571 read_helpers.pop_back();
514 } 572 }
515 } 573 }
516 574
517 } // namespace media 575 } // namespace media
OLDNEW
« no previous file with comments | « media/blink/multibuffer_data_source_unittest.cc ('k') | media/blink/url_index.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698