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

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

Issue 1399603003: Tie multibuffers to URLs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@media_cache
Patch Set: comments addressed Created 5 years 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
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 <deque> 5 #include <deque>
6 #include <string> 6 #include <string>
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback_helpers.h" 10 #include "base/callback_helpers.h"
11 #include "base/message_loop/message_loop.h" 11 #include "base/message_loop/message_loop.h"
12 #include "media/blink/multibuffer.h" 12 #include "media/blink/multibuffer.h"
13 #include "media/blink/multibuffer_reader.h" 13 #include "media/blink/multibuffer_reader.h"
14 #include "media/blink/test_random.h" 14 #include "media/blink/test_random.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 16
17 const int kBlockSizeShift = 8; 17 const int kBlockSizeShift = 8;
18 const size_t kBlockSize = 1UL << kBlockSizeShift; 18 const size_t kBlockSize = 1UL << kBlockSizeShift;
19 19
20 namespace media { 20 namespace media {
21 class TestMultiBufferDataProvider;
22 21
23 std::vector<TestMultiBufferDataProvider*> writers; 22 class FakeMultiBufferDataProvider;
24 23
25 class TestMultiBufferDataProvider : public media::MultiBuffer::DataProvider { 24 namespace {
25 std::vector<FakeMultiBufferDataProvider*> writers;
26 } // namespace
27
28 class FakeMultiBufferDataProvider : public media::MultiBuffer::DataProvider {
26 public: 29 public:
27 TestMultiBufferDataProvider(MultiBufferBlockId pos, 30 FakeMultiBufferDataProvider(MultiBufferBlockId pos,
28 size_t file_size, 31 size_t file_size,
29 int max_blocks_after_defer, 32 int max_blocks_after_defer,
30 bool must_read_whole_file, 33 bool must_read_whole_file,
34 MultiBuffer* multibuffer,
31 media::TestRandom* rnd) 35 media::TestRandom* rnd)
xhwang 2015/11/23 23:09:21 s/media:://
hubbe 2015/11/24 22:55:11 Done (Here and everywhere else)
32 : pos_(pos), 36 : pos_(pos),
33 blocks_until_deferred_(1 << 30), 37 blocks_until_deferred_(1 << 30),
34 max_blocks_after_defer_(max_blocks_after_defer), 38 max_blocks_after_defer_(max_blocks_after_defer),
35 file_size_(file_size), 39 file_size_(file_size),
36 must_read_whole_file_(must_read_whole_file), 40 must_read_whole_file_(must_read_whole_file),
41 multibuffer_(multibuffer),
37 rnd_(rnd) { 42 rnd_(rnd) {
38 writers.push_back(this); 43 writers.push_back(this);
39 } 44 }
40 45
41 ~TestMultiBufferDataProvider() override { 46 ~FakeMultiBufferDataProvider() override {
42 if (must_read_whole_file_) { 47 if (must_read_whole_file_) {
43 CHECK_GE(pos_ * kBlockSize, file_size_); 48 CHECK_GE(pos_ * kBlockSize, file_size_);
44 } 49 }
45 for (size_t i = 0; i < writers.size(); i++) { 50 for (size_t i = 0; i < writers.size(); i++) {
46 if (writers[i] == this) { 51 if (writers[i] == this) {
47 writers[i] = writers.back(); 52 writers[i] = writers.back();
48 writers.pop_back(); 53 writers.pop_back();
49 return; 54 return;
50 } 55 }
51 } 56 }
52 LOG(FATAL) << "Couldn't find myself in writers!"; 57 LOG(FATAL) << "Couldn't find myself in writers!";
53 } 58 }
54 59
55 MultiBufferBlockId Tell() const override { return pos_; } 60 MultiBufferBlockId Tell() const override { return pos_; }
56 61
57 bool Available() const override { return !fifo_.empty(); } 62 bool Available() const override { return !fifo_.empty(); }
58 63
59 scoped_refptr<DataBuffer> Read() override { 64 scoped_refptr<DataBuffer> Read() override {
60 DCHECK(Available()); 65 DCHECK(Available());
61 scoped_refptr<DataBuffer> ret = fifo_.front(); 66 scoped_refptr<DataBuffer> ret = fifo_.front();
62 fifo_.pop_front(); 67 fifo_.pop_front();
63 ++pos_; 68 ++pos_;
64 return ret; 69 return ret;
65 } 70 }
66 71
67 void SetAvailableCallback(const base::Closure& cb) override {
68 DCHECK(!Available());
69 cb_ = cb;
70 }
71
72 void SetDeferred(bool deferred) override { 72 void SetDeferred(bool deferred) override {
73 if (deferred) { 73 if (deferred) {
74 if (max_blocks_after_defer_ > 0) { 74 if (max_blocks_after_defer_ > 0) {
75 blocks_until_deferred_ = rnd_->Rand() % max_blocks_after_defer_; 75 blocks_until_deferred_ = rnd_->Rand() % max_blocks_after_defer_;
76 } else if (max_blocks_after_defer_ < 0) { 76 } else if (max_blocks_after_defer_ < 0) {
77 blocks_until_deferred_ = -max_blocks_after_defer_; 77 blocks_until_deferred_ = -max_blocks_after_defer_;
78 } else { 78 } else {
79 blocks_until_deferred_ = 0; 79 blocks_until_deferred_ = 0;
80 } 80 }
81 } else { 81 } else {
(...skipping 15 matching lines...) Expand all
97 break; 97 break;
98 block->writable_data()[x] = 98 block->writable_data()[x] =
99 static_cast<uint8_t>((byte_pos * 15485863) >> 16); 99 static_cast<uint8_t>((byte_pos * 15485863) >> 16);
100 } 100 }
101 block->set_data_size(static_cast<int>(x)); 101 block->set_data_size(static_cast<int>(x));
102 fifo_.push_back(block); 102 fifo_.push_back(block);
103 if (byte_pos == file_size_) { 103 if (byte_pos == file_size_) {
104 fifo_.push_back(DataBuffer::CreateEOSBuffer()); 104 fifo_.push_back(DataBuffer::CreateEOSBuffer());
105 ret = false; 105 ret = false;
106 } 106 }
107 cb_.Run(); 107 multibuffer_->OnDataProviderEvent(this);
108 return ret; 108 return ret;
109 } 109 }
110 110
111 private: 111 private:
112 std::deque<scoped_refptr<media::DataBuffer>> fifo_; 112 std::deque<scoped_refptr<media::DataBuffer>> fifo_;
113 MultiBufferBlockId pos_; 113 MultiBufferBlockId pos_;
114 int32_t blocks_until_deferred_; 114 int32_t blocks_until_deferred_;
115 int32_t max_blocks_after_defer_; 115 int32_t max_blocks_after_defer_;
116 size_t file_size_; 116 size_t file_size_;
117 bool must_read_whole_file_; 117 bool must_read_whole_file_;
118 base::Closure cb_; 118 MultiBuffer* multibuffer_;
119 media::TestRandom* rnd_; 119 media::TestRandom* rnd_;
120 }; 120 };
121 121
122 class TestMultiBuffer : public media::MultiBuffer { 122 class TestMultiBuffer : public media::MultiBuffer {
123 public: 123 public:
124 explicit TestMultiBuffer( 124 explicit TestMultiBuffer(
125 int32_t shift, 125 int32_t shift,
126 const scoped_refptr<media::MultiBuffer::GlobalLRU>& lru, 126 const scoped_refptr<media::MultiBuffer::GlobalLRU>& lru,
127 media::TestRandom* rnd) 127 media::TestRandom* rnd)
xhwang 2015/11/23 23:09:21 ditto
hubbe 2015/11/24 22:55:10 Done.
128 : media::MultiBuffer(shift, lru), 128 : media::MultiBuffer(shift, lru),
129 range_supported_(false), 129 range_supported_(false),
130 create_ok_(true), 130 create_ok_(true),
131 max_writers_(10000), 131 max_writers_(10000),
132 file_size_(1 << 30), 132 file_size_(1 << 30),
133 max_blocks_after_defer_(0), 133 max_blocks_after_defer_(0),
134 must_read_whole_file_(false), 134 must_read_whole_file_(false),
135 writers_created_(0), 135 writers_created_(0),
136 rnd_(rnd) {} 136 rnd_(rnd) {}
137 137
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 178
179 void SetMustReadWholeFile(bool must_read_whole_file) { 179 void SetMustReadWholeFile(bool must_read_whole_file) {
180 must_read_whole_file_ = must_read_whole_file; 180 must_read_whole_file_ = must_read_whole_file;
181 } 181 }
182 182
183 int32_t writers_created() const { return writers_created_; } 183 int32_t writers_created() const { return writers_created_; }
184 184
185 void SetRangeSupported(bool supported) { range_supported_ = supported; } 185 void SetRangeSupported(bool supported) { range_supported_ = supported; }
186 186
187 protected: 187 protected:
188 DataProvider* CreateWriter(const MultiBufferBlockId& pos) override { 188 scoped_ptr<DataProvider> CreateWriter(
189 const MultiBufferBlockId& pos) override {
189 DCHECK(create_ok_); 190 DCHECK(create_ok_);
190 writers_created_++; 191 writers_created_++;
191 CHECK_LT(writers.size(), max_writers_); 192 CHECK_LT(writers.size(), max_writers_);
192 return new TestMultiBufferDataProvider( 193 return scoped_ptr<DataProvider>(new FakeMultiBufferDataProvider(
193 pos, file_size_, max_blocks_after_defer_, must_read_whole_file_, rnd_); 194 pos, file_size_, max_blocks_after_defer_, must_read_whole_file_, this,
195 rnd_));
194 } 196 }
195 void Prune(size_t max_to_free) override { 197 void Prune(size_t max_to_free) override {
196 // Prune should not cause additional writers to be spawned. 198 // Prune should not cause additional writers to be spawned.
197 create_ok_ = false; 199 create_ok_ = false;
198 MultiBuffer::Prune(max_to_free); 200 MultiBuffer::Prune(max_to_free);
199 create_ok_ = true; 201 create_ok_ = true;
200 } 202 }
201 203
202 bool RangeSupported() const override { return range_supported_; } 204 bool RangeSupported() const override { return range_supported_; }
203 205
204 private: 206 private:
205 bool range_supported_; 207 bool range_supported_;
206 bool create_ok_; 208 bool create_ok_;
207 size_t max_writers_; 209 size_t max_writers_;
208 size_t file_size_; 210 size_t file_size_;
209 int32_t max_blocks_after_defer_; 211 int32_t max_blocks_after_defer_;
210 bool must_read_whole_file_; 212 bool must_read_whole_file_;
211 int32_t writers_created_; 213 int32_t writers_created_;
212 media::TestRandom* rnd_; 214 media::TestRandom* rnd_;
213 }; 215 };
214 } 216
217 } // namespace media
215 218
216 class MultiBufferTest : public testing::Test { 219 class MultiBufferTest : public testing::Test {
xhwang 2015/11/23 23:09:21 Is there any reason these tests are not in media n
hubbe 2015/11/24 22:55:11 Nope, done.
217 public: 220 public:
218 MultiBufferTest() 221 MultiBufferTest()
219 : rnd_(42), 222 : rnd_(42),
220 lru_(new media::MultiBuffer::GlobalLRU()), 223 lru_(new media::MultiBuffer::GlobalLRU()),
221 multibuffer_(kBlockSizeShift, lru_, &rnd_) {} 224 multibuffer_(kBlockSizeShift, lru_, &rnd_) {}
222 225
223 void Advance() { 226 void Advance() {
224 CHECK(media::writers.size()); 227 CHECK(media::writers.size());
225 media::writers[rnd_.Rand() % media::writers.size()]->Advance(); 228 media::writers[rnd_.Rand() % media::writers.size()]->Advance();
226 } 229 }
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 } 506 }
504 } 507 }
505 multibuffer_.CheckLRUState(); 508 multibuffer_.CheckLRUState();
506 } 509 }
507 multibuffer_.CheckPresentState(); 510 multibuffer_.CheckPresentState();
508 while (!read_helpers.empty()) { 511 while (!read_helpers.empty()) {
509 delete read_helpers.back(); 512 delete read_helpers.back();
510 read_helpers.pop_back(); 513 read_helpers.pop_back();
511 } 514 }
512 } 515 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698