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

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: compile fixes Created 5 years, 1 month 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 std::vector<FakeMultiBufferDataProvider*> writers;
xhwang 2015/11/19 23:34:17 move this to an anonymous or internal namespace?
hubbe 2015/11/20 23:24:23 Done.
25
26 class FakeMultiBufferDataProvider : public media::MultiBuffer::DataProvider {
26 public: 27 public:
27 TestMultiBufferDataProvider(MultiBufferBlockId pos, 28 FakeMultiBufferDataProvider(MultiBufferBlockId pos,
28 size_t file_size, 29 size_t file_size,
29 int max_blocks_after_defer, 30 int max_blocks_after_defer,
30 bool must_read_whole_file) 31 bool must_read_whole_file,
32 MultiBuffer* multibuffer)
31 : pos_(pos), 33 : pos_(pos),
32 blocks_until_deferred_(1 << 30), 34 blocks_until_deferred_(1 << 30),
33 max_blocks_after_defer_(max_blocks_after_defer), 35 max_blocks_after_defer_(max_blocks_after_defer),
34 file_size_(file_size), 36 file_size_(file_size),
35 must_read_whole_file_(must_read_whole_file) { 37 must_read_whole_file_(must_read_whole_file),
38 multibuffer_(multibuffer) {
36 writers.push_back(this); 39 writers.push_back(this);
37 } 40 }
38 41
39 ~TestMultiBufferDataProvider() override { 42 ~FakeMultiBufferDataProvider() override {
40 if (must_read_whole_file_) { 43 if (must_read_whole_file_) {
41 CHECK_GE(pos_ * kBlockSize, file_size_); 44 CHECK_GE(pos_ * kBlockSize, file_size_);
42 } 45 }
43 for (size_t i = 0; i < writers.size(); i++) { 46 for (size_t i = 0; i < writers.size(); i++) {
44 if (writers[i] == this) { 47 if (writers[i] == this) {
45 writers[i] = writers.back(); 48 writers[i] = writers.back();
46 writers.pop_back(); 49 writers.pop_back();
47 return; 50 return;
48 } 51 }
49 } 52 }
50 LOG(FATAL) << "Couldn't find myself in writers!"; 53 LOG(FATAL) << "Couldn't find myself in writers!";
51 } 54 }
52 55
53 MultiBufferBlockId Tell() const override { return pos_; } 56 MultiBufferBlockId Tell() const override { return pos_; }
54 57
55 bool Available() const override { return !fifo_.empty(); } 58 bool Available() const override { return !fifo_.empty(); }
56 59
57 scoped_refptr<DataBuffer> Read() override { 60 scoped_refptr<DataBuffer> Read() override {
58 DCHECK(Available()); 61 DCHECK(Available());
59 scoped_refptr<DataBuffer> ret = fifo_.front(); 62 scoped_refptr<DataBuffer> ret = fifo_.front();
60 fifo_.pop_front(); 63 fifo_.pop_front();
61 ++pos_; 64 ++pos_;
62 return ret; 65 return ret;
63 } 66 }
64 67
65 void SetAvailableCallback(const base::Closure& cb) override {
66 DCHECK(!Available());
67 cb_ = cb;
68 }
69
70 void SetDeferred(bool deferred) override { 68 void SetDeferred(bool deferred) override {
71 if (deferred) { 69 if (deferred) {
72 if (max_blocks_after_defer_ > 0) { 70 if (max_blocks_after_defer_ > 0) {
73 blocks_until_deferred_ = rand() % max_blocks_after_defer_; 71 blocks_until_deferred_ = rand() % max_blocks_after_defer_;
74 } else if (max_blocks_after_defer_ < 0) { 72 } else if (max_blocks_after_defer_ < 0) {
75 blocks_until_deferred_ = -max_blocks_after_defer_; 73 blocks_until_deferred_ = -max_blocks_after_defer_;
76 } else { 74 } else {
77 blocks_until_deferred_ = 0; 75 blocks_until_deferred_ = 0;
78 } 76 }
79 } else { 77 } else {
(...skipping 15 matching lines...) Expand all
95 break; 93 break;
96 block->writable_data()[x] = 94 block->writable_data()[x] =
97 static_cast<uint8_t>((byte_pos * 15485863) >> 16); 95 static_cast<uint8_t>((byte_pos * 15485863) >> 16);
98 } 96 }
99 block->set_data_size(static_cast<int>(x)); 97 block->set_data_size(static_cast<int>(x));
100 fifo_.push_back(block); 98 fifo_.push_back(block);
101 if (byte_pos == file_size_) { 99 if (byte_pos == file_size_) {
102 fifo_.push_back(DataBuffer::CreateEOSBuffer()); 100 fifo_.push_back(DataBuffer::CreateEOSBuffer());
103 ret = false; 101 ret = false;
104 } 102 }
105 cb_.Run(); 103 multibuffer_->DataProviderEvent(this);
106 return ret; 104 return ret;
107 } 105 }
108 106
109 private: 107 private:
110 std::deque<scoped_refptr<media::DataBuffer>> fifo_; 108 std::deque<scoped_refptr<media::DataBuffer>> fifo_;
111 MultiBufferBlockId pos_; 109 MultiBufferBlockId pos_;
112 int32_t blocks_until_deferred_; 110 int32_t blocks_until_deferred_;
113 int32_t max_blocks_after_defer_; 111 int32_t max_blocks_after_defer_;
114 size_t file_size_; 112 size_t file_size_;
115 bool must_read_whole_file_; 113 bool must_read_whole_file_;
116 base::Closure cb_; 114 MultiBuffer* multibuffer_;
117 }; 115 };
118 116
119 class TestMultiBuffer : public media::MultiBuffer { 117 class TestMultiBuffer : public media::MultiBuffer {
120 public: 118 public:
121 explicit TestMultiBuffer( 119 explicit TestMultiBuffer(
122 int32_t shift, 120 int32_t shift,
123 const scoped_refptr<media::MultiBuffer::GlobalLRU>& lru) 121 const scoped_refptr<media::MultiBuffer::GlobalLRU>& lru)
124 : media::MultiBuffer(shift, lru), 122 : media::MultiBuffer(shift, lru),
125 range_supported_(false), 123 range_supported_(false),
126 create_ok_(true), 124 create_ok_(true),
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 175
178 int32_t writers_created() const { return writers_created_; } 176 int32_t writers_created() const { return writers_created_; }
179 177
180 void SetRangeSupported(bool supported) { range_supported_ = supported; } 178 void SetRangeSupported(bool supported) { range_supported_ = supported; }
181 179
182 protected: 180 protected:
183 DataProvider* CreateWriter(const MultiBufferBlockId& pos) override { 181 DataProvider* CreateWriter(const MultiBufferBlockId& pos) override {
184 DCHECK(create_ok_); 182 DCHECK(create_ok_);
185 writers_created_++; 183 writers_created_++;
186 CHECK_LT(writers.size(), max_writers_); 184 CHECK_LT(writers.size(), max_writers_);
187 return new TestMultiBufferDataProvider( 185 return new FakeMultiBufferDataProvider(
188 pos, file_size_, max_blocks_after_defer_, must_read_whole_file_); 186 pos, file_size_, max_blocks_after_defer_, must_read_whole_file_, this);
189 } 187 }
190 void Prune(size_t max_to_free) override { 188 void Prune(size_t max_to_free) override {
191 // Prune should not cause additional writers to be spawned. 189 // Prune should not cause additional writers to be spawned.
192 create_ok_ = false; 190 create_ok_ = false;
193 MultiBuffer::Prune(max_to_free); 191 MultiBuffer::Prune(max_to_free);
194 create_ok_ = true; 192 create_ok_ = true;
195 } 193 }
196 194
197 bool RangeSupported() const override { return range_supported_; } 195 bool RangeSupported() const override { return range_supported_; }
198 196
199 private: 197 private:
200 bool range_supported_; 198 bool range_supported_;
201 bool create_ok_; 199 bool create_ok_;
202 size_t max_writers_; 200 size_t max_writers_;
203 size_t file_size_; 201 size_t file_size_;
204 int32_t max_blocks_after_defer_; 202 int32_t max_blocks_after_defer_;
205 bool must_read_whole_file_; 203 bool must_read_whole_file_;
206 int32_t writers_created_; 204 int32_t writers_created_;
207 }; 205 };
208 } 206
207 } // namespace media
209 208
210 class MultiBufferTest : public testing::Test { 209 class MultiBufferTest : public testing::Test {
211 public: 210 public:
212 MultiBufferTest() 211 MultiBufferTest()
213 : lru_(new media::MultiBuffer::GlobalLRU()), 212 : lru_(new media::MultiBuffer::GlobalLRU()),
214 multibuffer_(kBlockSizeShift, lru_), 213 multibuffer_(kBlockSizeShift, lru_),
215 rnd_(42) {} 214 rnd_(42) {}
216 215
217 void Advance() { 216 void Advance() {
218 CHECK(media::writers.size()); 217 CHECK(media::writers.size());
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 read_helpers[j]->StartRead(); 492 read_helpers[j]->StartRead();
494 multibuffer_.CheckLRUState(); 493 multibuffer_.CheckLRUState();
495 } 494 }
496 } 495 }
497 multibuffer_.CheckPresentState(); 496 multibuffer_.CheckPresentState();
498 while (!read_helpers.empty()) { 497 while (!read_helpers.empty()) {
499 delete read_helpers.back(); 498 delete read_helpers.back();
500 read_helpers.pop_back(); 499 read_helpers.pop_back();
501 } 500 }
502 } 501 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698