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

Side by Side Diff: third_party/WebKit/Source/platform/PurgeableVectorTest.cpp

Issue 1787973002: Replace blink::WebDiscardableMemory with base::DiscardableMemory. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: missing OwnPtr/PassOwnPtr includes in SharedBufferTest Created 4 years, 9 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2014 Google Inc. All rights reserved. 2 * Copyright (C) 2014 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 12 matching lines...) Expand all
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 #include "platform/PurgeableVector.h" 31 #include "platform/PurgeableVector.h"
32 32
33 #include "platform/testing/TestingPlatformSupport.h"
34 #include "public/platform/WebDiscardableMemory.h"
35 #include "testing/gtest/include/gtest/gtest.h" 33 #include "testing/gtest/include/gtest/gtest.h"
36 #include "wtf/Vector.h" 34 #include "wtf/Vector.h"
37 #include <algorithm> 35 #include <algorithm>
38 #include <cstdlib> 36 #include <cstdlib>
39 37
40 namespace blink { 38 namespace blink {
41 39
42 const size_t kTestSize = 32 * 1024; 40 const size_t kTestSize = 32 * 1024;
43 41
44 enum DiscardableMemorySupport { 42 class PurgeableVectorTestWithDiscardableMemory : public testing::TestWithParam<P urgeableVector::PurgeableOption> {
45 DontSupportDiscardableMemory,
46 SupportDiscardableMemory,
47 }; 43 };
48 44
49 class PurgeableVectorTestWithPlatformSupport : public testing::TestWithParam<Dis cardableMemorySupport> { 45 TEST_P(PurgeableVectorTestWithDiscardableMemory, grow)
50 public:
51 PurgeableVectorTestWithPlatformSupport() : m_testingPlatformSupport(makeTest ingPlatformSupportConfig()) { }
52
53 protected:
54 bool isDiscardableMemorySupported() const { return GetParam() == SupportDisc ardableMemory; }
55
56 TestingPlatformSupport::Config makeTestingPlatformSupportConfig() const
57 {
58 TestingPlatformSupport::Config config;
59 config.hasDiscardableMemorySupport = isDiscardableMemorySupported();
60 return config;
61 }
62
63 PurgeableVector::PurgeableOption makePurgeableOption() const
64 {
65 return isDiscardableMemorySupported() ? PurgeableVector::Purgeable : Pur geableVector::NotPurgeable;
66 }
67
68 private:
69 TestingPlatformSupport m_testingPlatformSupport;
70 };
71
72 TEST_P(PurgeableVectorTestWithPlatformSupport, grow)
73 { 46 {
74 PurgeableVector purgeableVector(makePurgeableOption()); 47 PurgeableVector purgeableVector(GetParam());
75 purgeableVector.grow(kTestSize); 48 purgeableVector.grow(kTestSize);
76 ASSERT_EQ(kTestSize, purgeableVector.size()); 49 ASSERT_EQ(kTestSize, purgeableVector.size());
77 // Make sure the underlying buffer was actually (re)allocated. 50 // Make sure the underlying buffer was actually (re)allocated.
78 memset(purgeableVector.data(), 0, purgeableVector.size()); 51 memset(purgeableVector.data(), 0, purgeableVector.size());
79 } 52 }
80 53
81 TEST_P(PurgeableVectorTestWithPlatformSupport, clear) 54 TEST_P(PurgeableVectorTestWithDiscardableMemory, clear)
82 { 55 {
83 Vector<char> testData(kTestSize); 56 Vector<char> testData(kTestSize);
84 std::generate(testData.begin(), testData.end(), &std::rand); 57 std::generate(testData.begin(), testData.end(), &std::rand);
85 58
86 PurgeableVector purgeableVector(makePurgeableOption()); 59 PurgeableVector purgeableVector(GetParam());
87 purgeableVector.append(testData.data(), testData.size()); 60 purgeableVector.append(testData.data(), testData.size());
88 EXPECT_EQ(testData.size(), purgeableVector.size()); 61 EXPECT_EQ(testData.size(), purgeableVector.size());
89 62
90 purgeableVector.clear(); 63 purgeableVector.clear();
91 EXPECT_EQ(0U, purgeableVector.size()); 64 EXPECT_EQ(0U, purgeableVector.size());
92 EXPECT_EQ(0, purgeableVector.data()); 65 EXPECT_EQ(0, purgeableVector.data());
93 } 66 }
94 67
95 TEST_P(PurgeableVectorTestWithPlatformSupport, clearDoesNotResetLockCounter) 68 TEST_P(PurgeableVectorTestWithDiscardableMemory, clearDoesNotResetLockCounter)
96 { 69 {
97 PurgeableVector purgeableVector(makePurgeableOption()); 70 PurgeableVector purgeableVector(GetParam());
98 purgeableVector.clear(); 71 purgeableVector.clear();
99 EXPECT_TRUE(purgeableVector.isLocked()); 72 EXPECT_TRUE(purgeableVector.isLocked());
100 purgeableVector.unlock(); 73 purgeableVector.unlock();
101 EXPECT_FALSE(purgeableVector.isLocked()); 74 EXPECT_FALSE(purgeableVector.isLocked());
102 } 75 }
103 76
104 TEST_P(PurgeableVectorTestWithPlatformSupport, reserveCapacityDoesNotChangeSize) 77 TEST_P(PurgeableVectorTestWithDiscardableMemory, reserveCapacityDoesNotChangeSiz e)
105 { 78 {
106 PurgeableVector purgeableVector(makePurgeableOption()); 79 PurgeableVector purgeableVector(GetParam());
107 EXPECT_EQ(0U, purgeableVector.size()); 80 EXPECT_EQ(0U, purgeableVector.size());
108 purgeableVector.reserveCapacity(kTestSize); 81 purgeableVector.reserveCapacity(kTestSize);
109 EXPECT_EQ(0U, purgeableVector.size()); 82 EXPECT_EQ(0U, purgeableVector.size());
110 } 83 }
111 84
112 TEST_P(PurgeableVectorTestWithPlatformSupport, multipleAppends) 85 TEST_P(PurgeableVectorTestWithDiscardableMemory, multipleAppends)
113 { 86 {
114 Vector<char> testData(kTestSize); 87 Vector<char> testData(kTestSize);
115 std::generate(testData.begin(), testData.end(), &std::rand); 88 std::generate(testData.begin(), testData.end(), &std::rand);
116 89
117 PurgeableVector purgeableVector(makePurgeableOption()); 90 PurgeableVector purgeableVector(GetParam());
118 // Force an allocation. 91 // Force an allocation.
119 const char kSmallString[] = "hello"; 92 const char kSmallString[] = "hello";
120 purgeableVector.append(kSmallString, sizeof(kSmallString)); 93 purgeableVector.append(kSmallString, sizeof(kSmallString));
121 const char* const data = purgeableVector.data(); 94 const char* const data = purgeableVector.data();
122 95
123 // Append all the testing data in 4 iterations. The |data| pointer should 96 // Append all the testing data in 4 iterations. The |data| pointer should
124 // have been changed at the end of the unit test due to reallocations. 97 // have been changed at the end of the unit test due to reallocations.
125 const size_t kIterationCount = 4; 98 const size_t kIterationCount = 4;
126 ASSERT_EQ(0U, testData.size() % kIterationCount); 99 ASSERT_EQ(0U, testData.size() % kIterationCount);
127 for (size_t i = 0; i < kIterationCount; ++i) { 100 for (size_t i = 0; i < kIterationCount; ++i) {
128 const char* const testDataStart = testData.data() + i * (testData.size() / kIterationCount); 101 const char* const testDataStart = testData.data() + i * (testData.size() / kIterationCount);
129 purgeableVector.append(testDataStart, testData.size() / kIterationCount) ; 102 purgeableVector.append(testDataStart, testData.size() / kIterationCount) ;
130 ASSERT_EQ((i + 1) * testData.size() / kIterationCount, purgeableVector.s ize() - sizeof(kSmallString)); 103 ASSERT_EQ((i + 1) * testData.size() / kIterationCount, purgeableVector.s ize() - sizeof(kSmallString));
131 } 104 }
132 105
133 ASSERT_EQ(sizeof(kSmallString) + testData.size(), purgeableVector.size()); 106 ASSERT_EQ(sizeof(kSmallString) + testData.size(), purgeableVector.size());
134 EXPECT_NE(data, purgeableVector.data()); 107 EXPECT_NE(data, purgeableVector.data());
135 EXPECT_EQ(0, memcmp(purgeableVector.data() + sizeof(kSmallString), testData. data(), testData.size())); 108 EXPECT_EQ(0, memcmp(purgeableVector.data() + sizeof(kSmallString), testData. data(), testData.size()));
136 } 109 }
137 110
138 TEST_P(PurgeableVectorTestWithPlatformSupport, multipleAppendsAfterReserveCapaci ty) 111 TEST_P(PurgeableVectorTestWithDiscardableMemory, multipleAppendsAfterReserveCapa city)
139 { 112 {
140 Vector<char> testData(kTestSize); 113 Vector<char> testData(kTestSize);
141 std::generate(testData.begin(), testData.end(), &std::rand); 114 std::generate(testData.begin(), testData.end(), &std::rand);
142 115
143 PurgeableVector purgeableVector(makePurgeableOption()); 116 PurgeableVector purgeableVector(GetParam());
144 purgeableVector.reserveCapacity(testData.size()); 117 purgeableVector.reserveCapacity(testData.size());
145 const char* const data = purgeableVector.data(); 118 const char* const data = purgeableVector.data();
146 119
147 // The |data| pointer should be unchanged at the end of the unit test 120 // The |data| pointer should be unchanged at the end of the unit test
148 // meaning that there should not have been any reallocation. 121 // meaning that there should not have been any reallocation.
149 const size_t kIterationCount = 4; 122 const size_t kIterationCount = 4;
150 ASSERT_EQ(0U, testData.size() % kIterationCount); 123 ASSERT_EQ(0U, testData.size() % kIterationCount);
151 for (size_t i = 0; i < kIterationCount; ++i) { 124 for (size_t i = 0; i < kIterationCount; ++i) {
152 const char* const testDataStart = testData.data() + i * (testData.size() / kIterationCount); 125 const char* const testDataStart = testData.data() + i * (testData.size() / kIterationCount);
153 purgeableVector.append(testDataStart, testData.size() / kIterationCount) ; 126 purgeableVector.append(testDataStart, testData.size() / kIterationCount) ;
154 ASSERT_EQ((i + 1) * testData.size() / kIterationCount, purgeableVector.s ize()); 127 ASSERT_EQ((i + 1) * testData.size() / kIterationCount, purgeableVector.s ize());
155 } 128 }
156 129
157 ASSERT_EQ(testData.size(), purgeableVector.size()); 130 ASSERT_EQ(testData.size(), purgeableVector.size());
158 EXPECT_EQ(data, purgeableVector.data()); 131 EXPECT_EQ(data, purgeableVector.data());
159 EXPECT_EQ(0, memcmp(purgeableVector.data(), testData.data(), testData.size() )); 132 EXPECT_EQ(0, memcmp(purgeableVector.data(), testData.data(), testData.size() ));
160 } 133 }
161 134
162 TEST_P(PurgeableVectorTestWithPlatformSupport, reserveCapacityUsesExactCapacityW henVectorIsEmpty) 135 TEST_P(PurgeableVectorTestWithDiscardableMemory, reserveCapacityUsesExactCapacit yWhenVectorIsEmpty)
163 { 136 {
164 Vector<char> testData(kTestSize); 137 Vector<char> testData(kTestSize);
165 std::generate(testData.begin(), testData.end(), &std::rand); 138 std::generate(testData.begin(), testData.end(), &std::rand);
166 139
167 PurgeableVector purgeableVector(makePurgeableOption()); 140 PurgeableVector purgeableVector(GetParam());
168 purgeableVector.reserveCapacity(kTestSize); 141 purgeableVector.reserveCapacity(kTestSize);
169 const char* const data = purgeableVector.data(); 142 const char* const data = purgeableVector.data();
170 143
171 purgeableVector.append(testData.data(), testData.size()); 144 purgeableVector.append(testData.data(), testData.size());
172 EXPECT_EQ(data, purgeableVector.data()); 145 EXPECT_EQ(data, purgeableVector.data());
173 EXPECT_EQ(0, memcmp(purgeableVector.data(), testData.data(), testData.size() )); 146 EXPECT_EQ(0, memcmp(purgeableVector.data(), testData.data(), testData.size() ));
174 147
175 // This test is not reliable if the PurgeableVector uses a plain WTF::Vector 148 // This test is not reliable if the PurgeableVector uses a plain WTF::Vector
176 // for storage, as it does if discardable memory is not supported; the vecto rs 149 // for storage, as it does if discardable memory is not supported; the vecto rs
177 // capacity will always be expanded to fill the PartitionAlloc bucket. 150 // capacity will always be expanded to fill the PartitionAlloc bucket.
178 if (isDiscardableMemorySupported()) { 151 if (GetParam() == PurgeableVector::Purgeable) {
179 // Appending one extra byte should cause a reallocation since the first 152 // Appending one extra byte should cause a reallocation since the first
180 // allocation happened while the purgeable vector was empty. This behavi or 153 // allocation happened while the purgeable vector was empty. This behavi or
181 // helps us guarantee that there is no memory waste on very small vector s 154 // helps us guarantee that there is no memory waste on very small vector s
182 // (which SharedBuffer requires). 155 // (which SharedBuffer requires).
183 purgeableVector.append(testData.data(), 1); 156 purgeableVector.append(testData.data(), 1);
184 EXPECT_NE(data, purgeableVector.data()); 157 EXPECT_NE(data, purgeableVector.data());
185 } 158 }
186 } 159 }
187 160
188 TEST_P(PurgeableVectorTestWithPlatformSupport, appendReservesCapacityIfNeeded) 161 TEST_P(PurgeableVectorTestWithDiscardableMemory, appendReservesCapacityIfNeeded)
189 { 162 {
190 Vector<char> testData(kTestSize); 163 Vector<char> testData(kTestSize);
191 std::generate(testData.begin(), testData.end(), &std::rand); 164 std::generate(testData.begin(), testData.end(), &std::rand);
192 165
193 PurgeableVector purgeableVector(makePurgeableOption()); 166 PurgeableVector purgeableVector(GetParam());
194 // No reserveCapacity(). 167 // No reserveCapacity().
195 ASSERT_FALSE(purgeableVector.data()); 168 ASSERT_FALSE(purgeableVector.data());
196 169
197 purgeableVector.append(testData.data(), testData.size()); 170 purgeableVector.append(testData.data(), testData.size());
198 ASSERT_EQ(testData.size(), purgeableVector.size()); 171 ASSERT_EQ(testData.size(), purgeableVector.size());
199 ASSERT_EQ(0, memcmp(purgeableVector.data(), testData.data(), testData.size() )); 172 ASSERT_EQ(0, memcmp(purgeableVector.data(), testData.data(), testData.size() ));
200 } 173 }
201 174
202 TEST_P(PurgeableVectorTestWithPlatformSupport, adopt) 175 TEST_P(PurgeableVectorTestWithDiscardableMemory, adopt)
203 { 176 {
204 Vector<char> testData(kTestSize); 177 Vector<char> testData(kTestSize);
205 std::generate(testData.begin(), testData.end(), &std::rand); 178 std::generate(testData.begin(), testData.end(), &std::rand);
206 const Vector<char> testDataCopy(testData); 179 const Vector<char> testDataCopy(testData);
207 const char* const testDataPtr = testData.data(); 180 const char* const testDataPtr = testData.data();
208 181
209 PurgeableVector purgeableVector(makePurgeableOption()); 182 PurgeableVector purgeableVector(GetParam());
210 purgeableVector.adopt(testData); 183 purgeableVector.adopt(testData);
211 EXPECT_TRUE(testData.isEmpty()); 184 EXPECT_TRUE(testData.isEmpty());
212 EXPECT_EQ(kTestSize, purgeableVector.size()); 185 EXPECT_EQ(kTestSize, purgeableVector.size());
213 ASSERT_EQ(0, memcmp(purgeableVector.data(), testDataCopy.data(), testDataCop y.size())); 186 ASSERT_EQ(0, memcmp(purgeableVector.data(), testDataCopy.data(), testDataCop y.size()));
214 187
215 if (isDiscardableMemorySupported()) { 188 if (GetParam() == PurgeableVector::Purgeable) {
216 // An extra discardable memory allocation + memcpy() should have happene d. 189 // An extra discardable memory allocation + memcpy() should have happene d.
217 EXPECT_NE(testDataPtr, purgeableVector.data()); 190 EXPECT_NE(testDataPtr, purgeableVector.data());
218 } else { 191 } else {
219 // Vector::swap() should have been used. 192 // Vector::swap() should have been used.
220 EXPECT_EQ(testDataPtr, purgeableVector.data()); 193 EXPECT_EQ(testDataPtr, purgeableVector.data());
221 } 194 }
222 } 195 }
223 196
224 TEST_P(PurgeableVectorTestWithPlatformSupport, adoptEmptyVector) 197 TEST_P(PurgeableVectorTestWithDiscardableMemory, adoptEmptyVector)
225 { 198 {
226 Vector<char> testData; 199 Vector<char> testData;
227 PurgeableVector purgeableVector(makePurgeableOption()); 200 PurgeableVector purgeableVector(GetParam());
228 purgeableVector.adopt(testData); 201 purgeableVector.adopt(testData);
229 } 202 }
230 203
231 TEST(PurgeableVectorTestWithPlatformSupport, adoptDiscardsPreviousData) 204 TEST(PurgeableVectorTest, adoptDiscardsPreviousData)
232 { 205 {
233 Vector<char> testData; 206 Vector<char> testData;
234 std::generate(testData.begin(), testData.end(), &std::rand); 207 std::generate(testData.begin(), testData.end(), &std::rand);
235 208
236 PurgeableVector purgeableVector(PurgeableVector::NotPurgeable); 209 PurgeableVector purgeableVector(PurgeableVector::NotPurgeable);
237 static const char smallString[] = "hello"; 210 static const char smallString[] = "hello";
238 purgeableVector.append(smallString, sizeof(smallString)); 211 purgeableVector.append(smallString, sizeof(smallString));
239 ASSERT_EQ(0, memcmp(purgeableVector.data(), smallString, sizeof(smallString) )); 212 ASSERT_EQ(0, memcmp(purgeableVector.data(), smallString, sizeof(smallString) ));
240 213
241 purgeableVector.adopt(testData); 214 purgeableVector.adopt(testData);
242 EXPECT_EQ(testData.size(), purgeableVector.size()); 215 EXPECT_EQ(testData.size(), purgeableVector.size());
243 ASSERT_EQ(0, memcmp(purgeableVector.data(), testData.data(), testData.size() )); 216 ASSERT_EQ(0, memcmp(purgeableVector.data(), testData.data(), testData.size() ));
244 } 217 }
245 218
246 TEST_P(PurgeableVectorTestWithPlatformSupport, unlockWithoutHintAtConstruction) 219 TEST(PurgeableVectorTest, unlockWithoutHintAtConstruction)
247 { 220 {
248 Vector<char> testData(30000); 221 Vector<char> testData(30000);
249 std::generate(testData.begin(), testData.end(), &std::rand); 222 std::generate(testData.begin(), testData.end(), &std::rand);
250 223
251 unsigned length = testData.size(); 224 unsigned length = testData.size();
252 PurgeableVector purgeableVector(PurgeableVector::NotPurgeable); 225 PurgeableVector purgeableVector(PurgeableVector::NotPurgeable);
253 purgeableVector.append(testData.data(), length); 226 purgeableVector.append(testData.data(), length);
254 ASSERT_EQ(length, purgeableVector.size()); 227 ASSERT_EQ(length, purgeableVector.size());
255 const char* data = purgeableVector.data(); 228 const char* data = purgeableVector.data();
256 229
257 purgeableVector.unlock(); 230 purgeableVector.unlock();
258 231
259 // Note that the purgeable vector must be locked before calling data(). 232 // Note that the purgeable vector must be locked before calling data().
260 const bool wasPurged = !purgeableVector.lock(); 233 const bool wasPurged = !purgeableVector.lock();
261 if (isDiscardableMemorySupported()) {
262 // The implementation of purgeable memory used for testing always purges data upon unlock().
263 EXPECT_TRUE(wasPurged);
264 }
265 234
266 if (isDiscardableMemorySupported()) { 235 // The implementation of purgeable memory used for testing always purges dat a upon unlock().
267 // The data should have been moved from the heap-allocated vector to a p urgeable buffer. 236 EXPECT_TRUE(wasPurged);
268 ASSERT_NE(data, purgeableVector.data()); 237
269 } else { 238 // The data should have been moved from the heap-allocated vector to a purge able buffer.
270 ASSERT_EQ(data, purgeableVector.data()); 239 ASSERT_NE(data, purgeableVector.data());
271 }
272 240
273 if (!wasPurged) 241 if (!wasPurged)
274 ASSERT_EQ(0, memcmp(purgeableVector.data(), testData.data(), length)); 242 ASSERT_EQ(0, memcmp(purgeableVector.data(), testData.data(), length));
275 } 243 }
276 244
277 TEST(PurgeableVectorTest, unlockOnEmptyPurgeableVector) 245 TEST(PurgeableVectorTest, unlockOnEmptyPurgeableVector)
278 { 246 {
279 PurgeableVector purgeableVector; 247 PurgeableVector purgeableVector;
280 ASSERT_EQ(0U, purgeableVector.size()); 248 ASSERT_EQ(0U, purgeableVector.size());
281 purgeableVector.unlock(); 249 purgeableVector.unlock();
282 ASSERT_FALSE(purgeableVector.isLocked()); 250 ASSERT_FALSE(purgeableVector.isLocked());
283 } 251 }
284 252
285 TEST_P(PurgeableVectorTestWithPlatformSupport, unlockOnPurgeableVectorWithPurgea bleHint) 253 TEST(PurgeableVectorTest, unlockOnPurgeableVectorWithPurgeableHint)
286 { 254 {
287 Vector<char> testData(kTestSize); 255 Vector<char> testData(kTestSize);
288 std::generate(testData.begin(), testData.end(), &std::rand); 256 std::generate(testData.begin(), testData.end(), &std::rand);
289 257
290 PurgeableVector purgeableVector; 258 PurgeableVector purgeableVector;
291 purgeableVector.append(testData.data(), kTestSize); 259 purgeableVector.append(testData.data(), kTestSize);
292 const char* const data = purgeableVector.data(); 260 const char* const data = purgeableVector.data();
293 261
294 // unlock() should happen in place, i.e. without causing any reallocation. 262 // unlock() should happen in place, i.e. without causing any reallocation.
295 // Note that the instance must be locked when data() is called. 263 // Note that the instance must be locked when data() is called.
296 purgeableVector.unlock(); 264 purgeableVector.unlock();
297 EXPECT_FALSE(purgeableVector.isLocked()); 265 EXPECT_FALSE(purgeableVector.isLocked());
298 purgeableVector.lock(); 266 purgeableVector.lock();
299 EXPECT_TRUE(purgeableVector.isLocked()); 267 EXPECT_TRUE(purgeableVector.isLocked());
300 EXPECT_EQ(data, purgeableVector.data()); 268 EXPECT_EQ(data, purgeableVector.data());
301 } 269 }
302 270
303 TEST_P(PurgeableVectorTestWithPlatformSupport, lockingUsesACounter) 271 TEST(PurgeableVectorTest, lockingUsesACounter)
304 { 272 {
305 Vector<char> testData(kTestSize); 273 Vector<char> testData(kTestSize);
306 std::generate(testData.begin(), testData.end(), &std::rand); 274 std::generate(testData.begin(), testData.end(), &std::rand);
307 275
308 PurgeableVector purgeableVector(PurgeableVector::NotPurgeable); 276 PurgeableVector purgeableVector(PurgeableVector::NotPurgeable);
309 purgeableVector.append(testData.data(), testData.size()); 277 purgeableVector.append(testData.data(), testData.size());
310 ASSERT_EQ(testData.size(), purgeableVector.size()); 278 ASSERT_EQ(testData.size(), purgeableVector.size());
311 279
312 ASSERT_TRUE(purgeableVector.isLocked()); // SharedBuffer is locked at creati on. 280 ASSERT_TRUE(purgeableVector.isLocked()); // PurgeableVector is locked at cre ation.
313 ASSERT_TRUE(purgeableVector.lock()); // Add an extra lock. 281 ASSERT_TRUE(purgeableVector.lock()); // Add an extra lock.
314 ASSERT_TRUE(purgeableVector.isLocked()); 282 ASSERT_TRUE(purgeableVector.isLocked());
315 283
316 purgeableVector.unlock(); 284 purgeableVector.unlock();
317 ASSERT_TRUE(purgeableVector.isLocked()); 285 ASSERT_TRUE(purgeableVector.isLocked());
318 286
319 purgeableVector.unlock(); 287 purgeableVector.unlock();
320 ASSERT_FALSE(purgeableVector.isLocked()); 288 ASSERT_FALSE(purgeableVector.isLocked());
321 289
322 if (purgeableVector.lock()) 290 if (purgeableVector.lock())
323 ASSERT_EQ(0, memcmp(purgeableVector.data(), testData.data(), testData.si ze())); 291 ASSERT_EQ(0, memcmp(purgeableVector.data(), testData.data(), testData.si ze()));
324 } 292 }
325 293
326 // Instantiates all the unit tests using the SharedBufferTestWithPlatformSupport fixture both with 294 // Instantiates all the unit tests using the PurgeableVectorTestWithDiscardableM emory
327 // and without discardable memory support. 295 // fixture both with and without using discardable memory support.
328 INSTANTIATE_TEST_CASE_P(testsWithPlatformSetUp, PurgeableVectorTestWithPlatformS upport, 296 INSTANTIATE_TEST_CASE_P(, PurgeableVectorTestWithDiscardableMemory,
329 ::testing::Values(DontSupportDiscardableMemory, SupportDiscardableMemory)); 297 ::testing::Values(PurgeableVector::NotPurgeable, PurgeableVector::Purgeable) );
330 298
331 } // namespace blink 299 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698