OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013, Google Inc. All rights reserved. | 2 * Copyright (c) 2013, 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 14 matching lines...) Expand all Loading... |
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 "core/fetch/MemoryCache.h" | 31 #include "core/fetch/MemoryCache.h" |
32 | 32 |
33 #include "core/fetch/MockImageResourceClient.h" | 33 #include "core/fetch/MockImageResourceClient.h" |
34 #include "core/fetch/RawResource.h" | 34 #include "core/fetch/RawResource.h" |
35 #include "core/fetch/ResourcePtr.h" | |
36 #include "platform/network/ResourceRequest.h" | 35 #include "platform/network/ResourceRequest.h" |
37 #include "platform/testing/UnitTestHelpers.h" | 36 #include "platform/testing/UnitTestHelpers.h" |
38 #include "public/platform/Platform.h" | 37 #include "public/platform/Platform.h" |
39 #include "testing/gtest/include/gtest/gtest.h" | 38 #include "testing/gtest/include/gtest/gtest.h" |
40 #include "wtf/OwnPtr.h" | 39 #include "wtf/OwnPtr.h" |
41 | 40 |
42 namespace blink { | 41 namespace blink { |
43 | 42 |
44 class MemoryCacheTest : public ::testing::Test { | 43 class MemoryCacheTest : public ::testing::Test { |
45 public: | 44 public: |
46 class FakeDecodedResource : public Resource { | 45 class FakeDecodedResource : public Resource { |
47 public: | 46 public: |
48 FakeDecodedResource(const ResourceRequest& request, Type type) | 47 static RefPtrWillBeRawPtr<FakeDecodedResource> create(const ResourceRequ
est& request, Type type) |
49 : Resource(request, type) | |
50 { | 48 { |
| 49 return adoptRefWillBeNoop(new FakeDecodedResource(request, type)); |
51 } | 50 } |
52 | 51 |
53 virtual void appendData(const char* data, size_t len) | 52 virtual void appendData(const char* data, size_t len) |
54 { | 53 { |
55 Resource::appendData(data, len); | 54 Resource::appendData(data, len); |
56 setDecodedSize(this->size()); | 55 setDecodedSize(this->size()); |
57 } | 56 } |
58 | 57 |
59 protected: | 58 protected: |
| 59 FakeDecodedResource(const ResourceRequest& request, Type type) |
| 60 : Resource(request, type) |
| 61 { |
| 62 } |
| 63 |
60 void destroyDecodedDataIfPossible() override | 64 void destroyDecodedDataIfPossible() override |
61 { | 65 { |
62 setDecodedSize(0); | 66 setDecodedSize(0); |
63 } | 67 } |
64 }; | 68 }; |
65 | 69 |
66 class FakeResource : public Resource { | 70 class FakeResource : public Resource { |
67 public: | 71 public: |
68 FakeResource(const ResourceRequest& request, Type type) | 72 static RefPtrWillBeRawPtr<FakeResource> create(const ResourceRequest& re
quest, Type type) |
69 : Resource(request, type) | |
70 { | 73 { |
| 74 return adoptRefWillBeNoop(new FakeResource(request, type)); |
71 } | 75 } |
72 | 76 |
73 void fakeEncodedSize(size_t size) | 77 void fakeEncodedSize(size_t size) |
74 { | 78 { |
75 setEncodedSize(size); | 79 setEncodedSize(size); |
76 } | 80 } |
| 81 |
| 82 private: |
| 83 FakeResource(const ResourceRequest& request, Type type) |
| 84 : Resource(request, type) |
| 85 { |
| 86 } |
77 }; | 87 }; |
78 | 88 |
79 protected: | 89 protected: |
80 virtual void SetUp() | 90 virtual void SetUp() |
81 { | 91 { |
82 // Save the global memory cache to restore it upon teardown. | 92 // Save the global memory cache to restore it upon teardown. |
83 m_globalMemoryCache = replaceMemoryCacheForTesting(MemoryCache::create()
); | 93 m_globalMemoryCache = replaceMemoryCacheForTesting(MemoryCache::create()
); |
84 } | 94 } |
85 | 95 |
86 virtual void TearDown() | 96 virtual void TearDown() |
(...skipping 19 matching lines...) Expand all Loading... |
106 | 116 |
107 TEST_F(MemoryCacheTest, VeryLargeResourceAccounting) | 117 TEST_F(MemoryCacheTest, VeryLargeResourceAccounting) |
108 { | 118 { |
109 const size_t sizeMax = ~static_cast<size_t>(0); | 119 const size_t sizeMax = ~static_cast<size_t>(0); |
110 const size_t totalCapacity = sizeMax / 4; | 120 const size_t totalCapacity = sizeMax / 4; |
111 const size_t minDeadCapacity = sizeMax / 16; | 121 const size_t minDeadCapacity = sizeMax / 16; |
112 const size_t maxDeadCapacity = sizeMax / 8; | 122 const size_t maxDeadCapacity = sizeMax / 8; |
113 const size_t resourceSize1 = sizeMax / 16; | 123 const size_t resourceSize1 = sizeMax / 16; |
114 const size_t resourceSize2 = sizeMax / 20; | 124 const size_t resourceSize2 = sizeMax / 20; |
115 memoryCache()->setCapacities(minDeadCapacity, maxDeadCapacity, totalCapacity
); | 125 memoryCache()->setCapacities(minDeadCapacity, maxDeadCapacity, totalCapacity
); |
116 ResourcePtr<FakeResource> cachedResource = | 126 RefPtrWillBeRawPtr<FakeResource> cachedResource = |
117 new FakeResource(ResourceRequest("http://test/resource"), Resource::Raw)
; | 127 FakeResource::create(ResourceRequest("http://test/resource"), Resource::
Raw); |
118 cachedResource->fakeEncodedSize(resourceSize1); | 128 cachedResource->fakeEncodedSize(resourceSize1); |
119 | 129 |
120 ASSERT_EQ(0u, memoryCache()->deadSize()); | 130 ASSERT_EQ(0u, memoryCache()->deadSize()); |
121 ASSERT_EQ(0u, memoryCache()->liveSize()); | 131 ASSERT_EQ(0u, memoryCache()->liveSize()); |
122 memoryCache()->add(cachedResource.get()); | 132 memoryCache()->add(cachedResource.get()); |
123 ASSERT_EQ(cachedResource->size(), memoryCache()->deadSize()); | 133 ASSERT_EQ(cachedResource->size(), memoryCache()->deadSize()); |
124 ASSERT_EQ(0u, memoryCache()->liveSize()); | 134 ASSERT_EQ(0u, memoryCache()->liveSize()); |
125 | 135 |
126 MockImageResourceClient client(cachedResource); | 136 MockImageResourceClient client(cachedResource); |
127 ASSERT_EQ(0u, memoryCache()->deadSize()); | 137 ASSERT_EQ(0u, memoryCache()->deadSize()); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
163 ASSERT_EQ(resource1->size() + resource2->size(), memoryCache()->deadSize()); | 173 ASSERT_EQ(resource1->size() + resource2->size(), memoryCache()->deadSize()); |
164 ASSERT_EQ(0u, memoryCache()->liveSize()); | 174 ASSERT_EQ(0u, memoryCache()->liveSize()); |
165 | 175 |
166 memoryCache()->prune(); | 176 memoryCache()->prune(); |
167 ASSERT_EQ(0u, memoryCache()->deadSize()); | 177 ASSERT_EQ(0u, memoryCache()->deadSize()); |
168 ASSERT_EQ(0u, memoryCache()->liveSize()); | 178 ASSERT_EQ(0u, memoryCache()->liveSize()); |
169 } | 179 } |
170 | 180 |
171 TEST_F(MemoryCacheTest, DeadResourceEviction_Basic) | 181 TEST_F(MemoryCacheTest, DeadResourceEviction_Basic) |
172 { | 182 { |
173 Resource* resource1 = | 183 RefPtrWillBeRawPtr<Resource> resource1 = |
174 new Resource(ResourceRequest("http://test/resource1"), Resource::Raw); | 184 Resource::create(ResourceRequest("http://test/resource1"), Resource::Raw
); |
175 Resource* resource2 = | 185 RefPtrWillBeRawPtr<Resource> resource2 = |
176 new Resource(ResourceRequest("http://test/resource2"), Resource::Raw); | 186 Resource::create(ResourceRequest("http://test/resource2"), Resource::Raw
); |
177 TestDeadResourceEviction(resource1, resource2); | 187 TestDeadResourceEviction(resource1.get(), resource2.get()); |
178 } | 188 } |
179 | 189 |
180 TEST_F(MemoryCacheTest, DeadResourceEviction_MultipleResourceMaps) | 190 TEST_F(MemoryCacheTest, DeadResourceEviction_MultipleResourceMaps) |
181 { | 191 { |
182 Resource* resource1 = | 192 RefPtrWillBeRawPtr<Resource> resource1 = |
183 new Resource(ResourceRequest("http://test/resource1"), Resource::Raw); | 193 Resource::create(ResourceRequest("http://test/resource1"), Resource::Raw
); |
184 Resource* resource2 = | 194 RefPtrWillBeRawPtr<Resource> resource2 = |
185 new Resource(ResourceRequest("http://test/resource2"), Resource::Raw); | 195 Resource::create(ResourceRequest("http://test/resource2"), Resource::Raw
); |
186 resource2->setCacheIdentifier("foo"); | 196 resource2->setCacheIdentifier("foo"); |
187 TestDeadResourceEviction(resource1, resource2); | 197 TestDeadResourceEviction(resource1.get(), resource2.get()); |
188 } | 198 } |
189 | 199 |
190 static void TestLiveResourceEvictionAtEndOfTask(Resource* cachedDeadResource, co
nst ResourcePtr<Resource>& cachedLiveResource) | 200 static void TestLiveResourceEvictionAtEndOfTask(Resource* cachedDeadResource, Re
source* cachedLiveResource) |
191 { | 201 { |
192 memoryCache()->setDelayBeforeLiveDecodedPrune(0); | 202 memoryCache()->setDelayBeforeLiveDecodedPrune(0); |
193 const unsigned totalCapacity = 1; | 203 const unsigned totalCapacity = 1; |
194 const unsigned minDeadCapacity = 0; | 204 const unsigned minDeadCapacity = 0; |
195 const unsigned maxDeadCapacity = 0; | 205 const unsigned maxDeadCapacity = 0; |
196 memoryCache()->setCapacities(minDeadCapacity, maxDeadCapacity, totalCapacity
); | 206 memoryCache()->setCapacities(minDeadCapacity, maxDeadCapacity, totalCapacity
); |
197 const char data[6] = "abcde"; | 207 const char data[6] = "abcde"; |
198 cachedDeadResource->appendData(data, 3u); | 208 cachedDeadResource->appendData(data, 3u); |
199 MockImageResourceClient client(cachedLiveResource); | 209 MockImageResourceClient client(cachedLiveResource); |
200 cachedLiveResource->appendData(data, 4u); | 210 cachedLiveResource->appendData(data, 4u); |
201 | 211 |
202 class Task1 : public WebTaskRunner::Task { | 212 class Task1 : public WebTaskRunner::Task { |
203 public: | 213 public: |
204 Task1(const ResourcePtr<Resource>& live, Resource* dead) | 214 Task1(Resource* live, Resource* dead) |
205 : m_live(live) | 215 : m_live(live) |
206 , m_dead(dead) | 216 , m_dead(dead) |
207 { } | 217 { } |
208 | 218 |
209 void run() override | 219 void run() override |
210 { | 220 { |
211 // The resource size has to be nonzero for this test to be meaningfu
l, but | 221 // The resource size has to be nonzero for this test to be meaningfu
l, but |
212 // we do not rely on it having any particular value. | 222 // we do not rely on it having any particular value. |
213 ASSERT_GT(m_live->size(), 0u); | 223 ASSERT_GT(m_live->size(), 0u); |
214 ASSERT_GT(m_dead->size(), 0u); | 224 ASSERT_GT(m_dead->size(), 0u); |
215 | 225 |
216 ASSERT_EQ(0u, memoryCache()->deadSize()); | 226 ASSERT_EQ(0u, memoryCache()->deadSize()); |
217 ASSERT_EQ(0u, memoryCache()->liveSize()); | 227 ASSERT_EQ(0u, memoryCache()->liveSize()); |
218 | 228 |
219 memoryCache()->add(m_dead); | 229 memoryCache()->add(m_dead.get()); |
220 memoryCache()->add(m_live.get()); | 230 memoryCache()->add(m_live.get()); |
221 memoryCache()->updateDecodedResource(m_live.get(), UpdateForProperty
Change); | 231 memoryCache()->updateDecodedResource(m_live.get(), UpdateForProperty
Change); |
222 ASSERT_EQ(m_dead->size(), memoryCache()->deadSize()); | 232 ASSERT_EQ(m_dead->size(), memoryCache()->deadSize()); |
223 ASSERT_EQ(m_live->size(), memoryCache()->liveSize()); | 233 ASSERT_EQ(m_live->size(), memoryCache()->liveSize()); |
224 ASSERT_GT(m_live->decodedSize(), 0u); | 234 ASSERT_GT(m_live->decodedSize(), 0u); |
225 | 235 |
226 memoryCache()->prune(); // Dead resources are pruned immediately | 236 memoryCache()->prune(); // Dead resources are pruned immediately |
227 ASSERT_EQ(m_dead->size(), memoryCache()->deadSize()); | 237 ASSERT_EQ(m_dead->size(), memoryCache()->deadSize()); |
228 ASSERT_EQ(m_live->size(), memoryCache()->liveSize()); | 238 ASSERT_EQ(m_live->size(), memoryCache()->liveSize()); |
229 ASSERT_GT(m_live->decodedSize(), 0u); | 239 ASSERT_GT(m_live->decodedSize(), 0u); |
230 } | 240 } |
231 | 241 |
232 private: | 242 private: |
233 ResourcePtr<Resource> m_live; | 243 RefPtrWillBePersistent<Resource> m_live; |
234 RawPtrWillBePersistent<Resource> m_dead; | 244 RefPtrWillBePersistent<Resource> m_dead; |
235 }; | 245 }; |
236 | 246 |
237 class Task2 : public WebTaskRunner::Task { | 247 class Task2 : public WebTaskRunner::Task { |
238 public: | 248 public: |
239 Task2(unsigned liveSizeWithoutDecode) | 249 Task2(unsigned liveSizeWithoutDecode) |
240 : m_liveSizeWithoutDecode(liveSizeWithoutDecode) { } | 250 : m_liveSizeWithoutDecode(liveSizeWithoutDecode) { } |
241 | 251 |
242 void run() override | 252 void run() override |
243 { | 253 { |
244 // Next task: now, the live resource was evicted. | 254 // Next task: now, the live resource was evicted. |
245 ASSERT_EQ(0u, memoryCache()->deadSize()); | 255 ASSERT_EQ(0u, memoryCache()->deadSize()); |
246 ASSERT_EQ(m_liveSizeWithoutDecode, memoryCache()->liveSize()); | 256 ASSERT_EQ(m_liveSizeWithoutDecode, memoryCache()->liveSize()); |
247 } | 257 } |
248 | 258 |
249 private: | 259 private: |
250 unsigned m_liveSizeWithoutDecode; | 260 unsigned m_liveSizeWithoutDecode; |
251 }; | 261 }; |
252 | 262 |
253 | 263 |
254 Platform::current()->currentThread()->taskRunner()->postTask(BLINK_FROM_HERE
, new Task1(cachedLiveResource, cachedDeadResource)); | 264 Platform::current()->currentThread()->taskRunner()->postTask(BLINK_FROM_HERE
, new Task1(cachedLiveResource, cachedDeadResource)); |
255 Platform::current()->currentThread()->taskRunner()->postTask(BLINK_FROM_HERE
, new Task2(cachedLiveResource->encodedSize() + cachedLiveResource->overheadSize
())); | 265 Platform::current()->currentThread()->taskRunner()->postTask(BLINK_FROM_HERE
, new Task2(cachedLiveResource->encodedSize() + cachedLiveResource->overheadSize
())); |
256 testing::runPendingTasks(); | 266 testing::runPendingTasks(); |
257 } | 267 } |
258 | 268 |
259 // Verified that when ordering a prune in a runLoop task, the prune | 269 // Verified that when ordering a prune in a runLoop task, the prune |
260 // is deferred to the end of the task. | 270 // is deferred to the end of the task. |
261 TEST_F(MemoryCacheTest, LiveResourceEvictionAtEndOfTask_Basic) | 271 TEST_F(MemoryCacheTest, LiveResourceEvictionAtEndOfTask_Basic) |
262 { | 272 { |
263 Resource* cachedDeadResource = | 273 RefPtrWillBeRawPtr<Resource> cachedDeadResource = |
264 new Resource(ResourceRequest("hhtp://foo"), Resource::Raw); | 274 Resource::create(ResourceRequest("hhtp://foo"), Resource::Raw); |
265 ResourcePtr<Resource> cachedLiveResource = | 275 RefPtrWillBeRawPtr<Resource> cachedLiveResource = |
266 new FakeDecodedResource(ResourceRequest("http://test/resource"), Resourc
e::Raw); | 276 FakeDecodedResource::create(ResourceRequest("http://test/resource"), Res
ource::Raw); |
267 TestLiveResourceEvictionAtEndOfTask(cachedDeadResource, cachedLiveResource); | 277 TestLiveResourceEvictionAtEndOfTask(cachedDeadResource.get(), cachedLiveReso
urce.get()); |
268 } | 278 } |
269 | 279 |
270 TEST_F(MemoryCacheTest, LiveResourceEvictionAtEndOfTask_MultipleResourceMaps) | 280 TEST_F(MemoryCacheTest, LiveResourceEvictionAtEndOfTask_MultipleResourceMaps) |
271 { | 281 { |
272 { | 282 { |
273 Resource* cachedDeadResource = | 283 RefPtrWillBeRawPtr<Resource> cachedDeadResource = |
274 new Resource(ResourceRequest("hhtp://foo"), Resource::Raw); | 284 Resource::create(ResourceRequest("hhtp://foo"), Resource::Raw); |
275 cachedDeadResource->setCacheIdentifier("foo"); | 285 cachedDeadResource->setCacheIdentifier("foo"); |
276 ResourcePtr<Resource> cachedLiveResource = | 286 RefPtrWillBeRawPtr<Resource> cachedLiveResource = |
277 new FakeDecodedResource(ResourceRequest("http://test/resource"), Res
ource::Raw); | 287 FakeDecodedResource::create(ResourceRequest("http://test/resource"),
Resource::Raw); |
278 TestLiveResourceEvictionAtEndOfTask(cachedDeadResource, cachedLiveResour
ce); | 288 TestLiveResourceEvictionAtEndOfTask(cachedDeadResource.get(), cachedLive
Resource.get()); |
279 memoryCache()->evictResources(); | 289 memoryCache()->evictResources(); |
280 } | 290 } |
281 { | 291 { |
282 Resource* cachedDeadResource = | 292 RefPtrWillBeRawPtr<Resource> cachedDeadResource = |
283 new Resource(ResourceRequest("hhtp://foo"), Resource::Raw); | 293 Resource::create(ResourceRequest("hhtp://foo"), Resource::Raw); |
284 ResourcePtr<Resource> cachedLiveResource = | 294 RefPtrWillBeRawPtr<Resource> cachedLiveResource = |
285 new FakeDecodedResource(ResourceRequest("http://test/resource"), Res
ource::Raw); | 295 FakeDecodedResource::create(ResourceRequest("http://test/resource"),
Resource::Raw); |
286 cachedLiveResource->setCacheIdentifier("foo"); | 296 cachedLiveResource->setCacheIdentifier("foo"); |
287 TestLiveResourceEvictionAtEndOfTask(cachedDeadResource, cachedLiveResour
ce); | 297 TestLiveResourceEvictionAtEndOfTask(cachedDeadResource.get(), cachedLive
Resource.get()); |
288 memoryCache()->evictResources(); | 298 memoryCache()->evictResources(); |
289 } | 299 } |
290 { | 300 { |
291 Resource* cachedDeadResource = | 301 RefPtrWillBeRawPtr<Resource> cachedDeadResource = |
292 new Resource(ResourceRequest("hhtp://test/resource"), Resource::Raw)
; | 302 Resource::create(ResourceRequest("hhtp://test/resource"), Resource::
Raw); |
293 cachedDeadResource->setCacheIdentifier("foo"); | 303 cachedDeadResource->setCacheIdentifier("foo"); |
294 ResourcePtr<Resource> cachedLiveResource = | 304 RefPtrWillBeRawPtr<Resource> cachedLiveResource = |
295 new FakeDecodedResource(ResourceRequest("http://test/resource"), Res
ource::Raw); | 305 FakeDecodedResource::create(ResourceRequest("http://test/resource"),
Resource::Raw); |
296 cachedLiveResource->setCacheIdentifier("bar"); | 306 cachedLiveResource->setCacheIdentifier("bar"); |
297 TestLiveResourceEvictionAtEndOfTask(cachedDeadResource, cachedLiveResour
ce); | 307 TestLiveResourceEvictionAtEndOfTask(cachedDeadResource.get(), cachedLive
Resource.get()); |
298 memoryCache()->evictResources(); | 308 memoryCache()->evictResources(); |
299 } | 309 } |
300 } | 310 } |
301 | 311 |
302 // Verifies that cached resources are evicted immediately after release when | 312 // Verifies that cached resources are evicted immediately after release when |
303 // the total dead resource size is more than double the dead resource capacity. | 313 // the total dead resource size is more than double the dead resource capacity. |
304 static void TestClientRemoval(const ResourcePtr<Resource>& resource1, const Reso
urcePtr<Resource>& resource2) | 314 static void TestClientRemoval(Resource* resource1, Resource* resource2) |
305 { | 315 { |
306 const char data[6] = "abcde"; | 316 const char data[6] = "abcde"; |
307 MockImageResourceClient client1(resource1); | 317 MockImageResourceClient client1(resource1); |
308 resource1->appendData(data, 4u); | 318 resource1->appendData(data, 4u); |
309 MockImageResourceClient client2(resource2); | 319 MockImageResourceClient client2(resource2); |
310 resource2->appendData(data, 4u); | 320 resource2->appendData(data, 4u); |
311 | 321 |
312 const unsigned minDeadCapacity = 0; | 322 const unsigned minDeadCapacity = 0; |
313 const unsigned maxDeadCapacity = ((resource1->size() + resource2->size()) /
2) - 1; | 323 const unsigned maxDeadCapacity = ((resource1->size() + resource2->size()) /
2) - 1; |
314 const unsigned totalCapacity = maxDeadCapacity; | 324 const unsigned totalCapacity = maxDeadCapacity; |
315 memoryCache()->setCapacities(minDeadCapacity, maxDeadCapacity, totalCapacity
); | 325 memoryCache()->setCapacities(minDeadCapacity, maxDeadCapacity, totalCapacity
); |
316 memoryCache()->add(resource1.get()); | 326 memoryCache()->add(resource1); |
317 memoryCache()->add(resource2.get()); | 327 memoryCache()->add(resource2); |
318 // Call prune. There is nothing to prune, but this will initialize | 328 // Call prune. There is nothing to prune, but this will initialize |
319 // the prune timestamp, allowing future prunes to be deferred. | 329 // the prune timestamp, allowing future prunes to be deferred. |
320 memoryCache()->prune(); | 330 memoryCache()->prune(); |
321 ASSERT_GT(resource1->decodedSize(), 0u); | 331 ASSERT_GT(resource1->decodedSize(), 0u); |
322 ASSERT_GT(resource2->decodedSize(), 0u); | 332 ASSERT_GT(resource2->decodedSize(), 0u); |
323 ASSERT_EQ(memoryCache()->deadSize(), 0u); | 333 ASSERT_EQ(memoryCache()->deadSize(), 0u); |
324 ASSERT_EQ(memoryCache()->liveSize(), resource1->size() + resource2->size()); | 334 ASSERT_EQ(memoryCache()->liveSize(), resource1->size() + resource2->size()); |
325 | 335 |
326 // Removing the client from resource1 should result in all resources | 336 // Removing the client from resource1 should result in all resources |
327 // remaining in cache since the prune is deferred. | 337 // remaining in cache since the prune is deferred. |
328 client1.removeAsClient(); | 338 client1.removeAsClient(); |
329 ASSERT_GT(resource1->decodedSize(), 0u); | 339 ASSERT_GT(resource1->decodedSize(), 0u); |
330 ASSERT_GT(resource2->decodedSize(), 0u); | 340 ASSERT_GT(resource2->decodedSize(), 0u); |
331 ASSERT_EQ(memoryCache()->deadSize(), resource1->size()); | 341 ASSERT_EQ(memoryCache()->deadSize(), resource1->size()); |
332 ASSERT_EQ(memoryCache()->liveSize(), resource2->size()); | 342 ASSERT_EQ(memoryCache()->liveSize(), resource2->size()); |
333 ASSERT_TRUE(memoryCache()->contains(resource1.get())); | 343 ASSERT_TRUE(memoryCache()->contains(resource1)); |
334 ASSERT_TRUE(memoryCache()->contains(resource2.get())); | 344 ASSERT_TRUE(memoryCache()->contains(resource2)); |
335 | 345 |
336 // Removing the client from resource2 should result in immediate | 346 // Removing the client from resource2 should result in immediate |
337 // eviction of resource2 because we are over the prune deferral limit. | 347 // eviction of resource2 because we are over the prune deferral limit. |
338 client2.removeAsClient(); | 348 client2.removeAsClient(); |
339 ASSERT_GT(resource1->decodedSize(), 0u); | 349 ASSERT_GT(resource1->decodedSize(), 0u); |
340 ASSERT_GT(resource2->decodedSize(), 0u); | 350 ASSERT_GT(resource2->decodedSize(), 0u); |
341 ASSERT_EQ(memoryCache()->deadSize(), resource1->size()); | 351 ASSERT_EQ(memoryCache()->deadSize(), resource1->size()); |
342 ASSERT_EQ(memoryCache()->liveSize(), 0u); | 352 ASSERT_EQ(memoryCache()->liveSize(), 0u); |
343 ASSERT_TRUE(memoryCache()->contains(resource1.get())); | 353 ASSERT_TRUE(memoryCache()->contains(resource1)); |
344 ASSERT_FALSE(memoryCache()->contains(resource2.get())); | 354 ASSERT_FALSE(memoryCache()->contains(resource2)); |
345 } | 355 } |
346 | 356 |
347 TEST_F(MemoryCacheTest, ClientRemoval_Basic) | 357 TEST_F(MemoryCacheTest, ClientRemoval_Basic) |
348 { | 358 { |
349 ResourcePtr<Resource> resource1 = | 359 RefPtrWillBeRawPtr<Resource> resource1 = |
350 new FakeDecodedResource(ResourceRequest("http://foo.com"), Resource::Raw
); | 360 FakeDecodedResource::create(ResourceRequest("http://foo.com"), Resource:
:Raw); |
351 ResourcePtr<Resource> resource2 = | 361 RefPtrWillBeRawPtr<Resource> resource2 = |
352 new FakeDecodedResource(ResourceRequest("http://test/resource"), Resourc
e::Raw); | 362 FakeDecodedResource::create(ResourceRequest("http://test/resource"), Res
ource::Raw); |
353 TestClientRemoval(resource1, resource2); | 363 TestClientRemoval(resource1.get(), resource2.get()); |
354 } | 364 } |
355 | 365 |
356 TEST_F(MemoryCacheTest, ClientRemoval_MultipleResourceMaps) | 366 TEST_F(MemoryCacheTest, ClientRemoval_MultipleResourceMaps) |
357 { | 367 { |
358 { | 368 { |
359 ResourcePtr<Resource> resource1 = | 369 RefPtrWillBeRawPtr<Resource> resource1 = |
360 new FakeDecodedResource(ResourceRequest("http://foo.com"), Resource:
:Raw); | 370 FakeDecodedResource::create(ResourceRequest("http://foo.com"), Resou
rce::Raw); |
361 resource1->setCacheIdentifier("foo"); | 371 resource1->setCacheIdentifier("foo"); |
362 ResourcePtr<Resource> resource2 = | 372 RefPtrWillBeRawPtr<Resource> resource2 = |
363 new FakeDecodedResource(ResourceRequest("http://test/resource"), Res
ource::Raw); | 373 FakeDecodedResource::create(ResourceRequest("http://test/resource"),
Resource::Raw); |
364 TestClientRemoval(resource1, resource2); | 374 TestClientRemoval(resource1.get(), resource2.get()); |
365 memoryCache()->evictResources(); | 375 memoryCache()->evictResources(); |
366 } | 376 } |
367 { | 377 { |
368 ResourcePtr<Resource> resource1 = | 378 RefPtrWillBeRawPtr<Resource> resource1 = |
369 new FakeDecodedResource(ResourceRequest("http://foo.com"), Resource:
:Raw); | 379 FakeDecodedResource::create(ResourceRequest("http://foo.com"), Resou
rce::Raw); |
370 ResourcePtr<Resource> resource2 = | 380 RefPtrWillBeRawPtr<Resource> resource2 = |
371 new FakeDecodedResource(ResourceRequest("http://test/resource"), Res
ource::Raw); | 381 FakeDecodedResource::create(ResourceRequest("http://test/resource"),
Resource::Raw); |
372 resource2->setCacheIdentifier("foo"); | 382 resource2->setCacheIdentifier("foo"); |
373 TestClientRemoval(resource1, resource2); | 383 TestClientRemoval(resource1.get(), resource2.get()); |
374 memoryCache()->evictResources(); | 384 memoryCache()->evictResources(); |
375 } | 385 } |
376 { | 386 { |
377 ResourcePtr<Resource> resource1 = | 387 RefPtrWillBeRawPtr<Resource> resource1 = |
378 new FakeDecodedResource(ResourceRequest("http://test/resource"), Res
ource::Raw); | 388 FakeDecodedResource::create(ResourceRequest("http://test/resource"),
Resource::Raw); |
379 resource1->setCacheIdentifier("foo"); | 389 resource1->setCacheIdentifier("foo"); |
380 ResourcePtr<Resource> resource2 = | 390 RefPtrWillBeRawPtr<Resource> resource2 = |
381 new FakeDecodedResource(ResourceRequest("http://test/resource"), Res
ource::Raw); | 391 FakeDecodedResource::create(ResourceRequest("http://test/resource"),
Resource::Raw); |
382 resource2->setCacheIdentifier("bar"); | 392 resource2->setCacheIdentifier("bar"); |
383 TestClientRemoval(resource1, resource2); | 393 TestClientRemoval(resource1.get(), resource2.get()); |
384 memoryCache()->evictResources(); | 394 memoryCache()->evictResources(); |
385 } | 395 } |
386 } | 396 } |
387 | 397 |
388 // Verifies that CachedResources are evicted from the decode cache | 398 // Verifies that CachedResources are evicted from the decode cache |
389 // according to their DecodeCachePriority. | 399 // according to their DecodeCachePriority. |
390 static void TestDecodeCacheOrder(const ResourcePtr<Resource>& cachedImageLowPrio
rity, const ResourcePtr<Resource>& cachedImageHighPriority) | 400 static void TestDecodeCacheOrder(Resource* cachedImageLowPriority, Resource* cac
hedImageHighPriority) |
391 { | 401 { |
392 memoryCache()->setDelayBeforeLiveDecodedPrune(0); | 402 memoryCache()->setDelayBeforeLiveDecodedPrune(0); |
393 memoryCache()->setMaxPruneDeferralDelay(0); | 403 memoryCache()->setMaxPruneDeferralDelay(0); |
394 | 404 |
395 MockImageResourceClient clientLowPriority(cachedImageLowPriority); | 405 MockImageResourceClient clientLowPriority(cachedImageLowPriority); |
396 MockImageResourceClient clientHighPriority(cachedImageHighPriority); | 406 MockImageResourceClient clientHighPriority(cachedImageHighPriority); |
397 | 407 |
398 const char data[5] = "abcd"; | 408 const char data[5] = "abcd"; |
399 cachedImageLowPriority->appendData(data, 1u); | 409 cachedImageLowPriority->appendData(data, 1u); |
400 cachedImageHighPriority->appendData(data, 4u); | 410 cachedImageHighPriority->appendData(data, 4u); |
401 const unsigned lowPrioritySize = cachedImageLowPriority->size(); | 411 const unsigned lowPrioritySize = cachedImageLowPriority->size(); |
402 const unsigned highPrioritySize = cachedImageHighPriority->size(); | 412 const unsigned highPrioritySize = cachedImageHighPriority->size(); |
403 const unsigned lowPriorityMockDecodeSize = cachedImageLowPriority->decodedSi
ze(); | 413 const unsigned lowPriorityMockDecodeSize = cachedImageLowPriority->decodedSi
ze(); |
404 const unsigned highPriorityMockDecodeSize = cachedImageHighPriority->decoded
Size(); | 414 const unsigned highPriorityMockDecodeSize = cachedImageHighPriority->decoded
Size(); |
405 const unsigned totalSize = lowPrioritySize + highPrioritySize; | 415 const unsigned totalSize = lowPrioritySize + highPrioritySize; |
406 | 416 |
407 // Verify that the sizes are different to ensure that we can test eviction o
rder. | 417 // Verify that the sizes are different to ensure that we can test eviction o
rder. |
408 ASSERT_GT(lowPrioritySize, 0u); | 418 ASSERT_GT(lowPrioritySize, 0u); |
409 ASSERT_NE(lowPrioritySize, highPrioritySize); | 419 ASSERT_NE(lowPrioritySize, highPrioritySize); |
410 ASSERT_GT(lowPriorityMockDecodeSize, 0u); | 420 ASSERT_GT(lowPriorityMockDecodeSize, 0u); |
411 ASSERT_NE(lowPriorityMockDecodeSize, highPriorityMockDecodeSize); | 421 ASSERT_NE(lowPriorityMockDecodeSize, highPriorityMockDecodeSize); |
412 | 422 |
413 ASSERT_EQ(memoryCache()->deadSize(), 0u); | 423 ASSERT_EQ(memoryCache()->deadSize(), 0u); |
414 ASSERT_EQ(memoryCache()->liveSize(), 0u); | 424 ASSERT_EQ(memoryCache()->liveSize(), 0u); |
415 | 425 |
416 // Add the items. The item added first would normally be evicted first. | 426 // Add the items. The item added first would normally be evicted first. |
417 memoryCache()->add(cachedImageHighPriority.get()); | 427 memoryCache()->add(cachedImageHighPriority); |
418 ASSERT_EQ(memoryCache()->deadSize(), 0u); | 428 ASSERT_EQ(memoryCache()->deadSize(), 0u); |
419 ASSERT_EQ(memoryCache()->liveSize(), highPrioritySize); | 429 ASSERT_EQ(memoryCache()->liveSize(), highPrioritySize); |
420 | 430 |
421 memoryCache()->add(cachedImageLowPriority.get()); | 431 memoryCache()->add(cachedImageLowPriority); |
422 ASSERT_EQ(memoryCache()->deadSize(), 0u); | 432 ASSERT_EQ(memoryCache()->deadSize(), 0u); |
423 ASSERT_EQ(memoryCache()->liveSize(), highPrioritySize + lowPrioritySize); | 433 ASSERT_EQ(memoryCache()->liveSize(), highPrioritySize + lowPrioritySize); |
424 | 434 |
425 // Insert all items in the decoded items list with the same priority | 435 // Insert all items in the decoded items list with the same priority |
426 memoryCache()->updateDecodedResource(cachedImageHighPriority.get(), UpdateFo
rPropertyChange); | 436 memoryCache()->updateDecodedResource(cachedImageHighPriority, UpdateForPrope
rtyChange); |
427 memoryCache()->updateDecodedResource(cachedImageLowPriority.get(), UpdateFor
PropertyChange); | 437 memoryCache()->updateDecodedResource(cachedImageLowPriority, UpdateForProper
tyChange); |
428 ASSERT_EQ(memoryCache()->deadSize(), 0u); | 438 ASSERT_EQ(memoryCache()->deadSize(), 0u); |
429 ASSERT_EQ(memoryCache()->liveSize(), totalSize); | 439 ASSERT_EQ(memoryCache()->liveSize(), totalSize); |
430 | 440 |
431 // Now we will assign their priority and make sure they are moved to the cor
rect buckets. | 441 // Now we will assign their priority and make sure they are moved to the cor
rect buckets. |
432 memoryCache()->updateDecodedResource(cachedImageLowPriority.get(), UpdateFor
PropertyChange, MemoryCacheLiveResourcePriorityLow); | 442 memoryCache()->updateDecodedResource(cachedImageLowPriority, UpdateForProper
tyChange, MemoryCacheLiveResourcePriorityLow); |
433 memoryCache()->updateDecodedResource(cachedImageHighPriority.get(), UpdateFo
rPropertyChange, MemoryCacheLiveResourcePriorityHigh); | 443 memoryCache()->updateDecodedResource(cachedImageHighPriority, UpdateForPrope
rtyChange, MemoryCacheLiveResourcePriorityHigh); |
434 | 444 |
435 // Should first prune the LowPriority item. | 445 // Should first prune the LowPriority item. |
436 memoryCache()->setCapacities(memoryCache()->minDeadCapacity(), memoryCache()
->liveSize() - 10, memoryCache()->liveSize() - 10); | 446 memoryCache()->setCapacities(memoryCache()->minDeadCapacity(), memoryCache()
->liveSize() - 10, memoryCache()->liveSize() - 10); |
437 memoryCache()->prune(); | 447 memoryCache()->prune(); |
438 ASSERT_EQ(memoryCache()->deadSize(), 0u); | 448 ASSERT_EQ(memoryCache()->deadSize(), 0u); |
439 ASSERT_EQ(memoryCache()->liveSize(), totalSize - lowPriorityMockDecodeSize); | 449 ASSERT_EQ(memoryCache()->liveSize(), totalSize - lowPriorityMockDecodeSize); |
440 | 450 |
441 // Should prune the HighPriority item. | 451 // Should prune the HighPriority item. |
442 memoryCache()->setCapacities(memoryCache()->minDeadCapacity(), memoryCache()
->liveSize() - 10, memoryCache()->liveSize() - 10); | 452 memoryCache()->setCapacities(memoryCache()->minDeadCapacity(), memoryCache()
->liveSize() - 10, memoryCache()->liveSize() - 10); |
443 memoryCache()->prune(); | 453 memoryCache()->prune(); |
444 ASSERT_EQ(memoryCache()->deadSize(), 0u); | 454 ASSERT_EQ(memoryCache()->deadSize(), 0u); |
445 ASSERT_EQ(memoryCache()->liveSize(), totalSize - lowPriorityMockDecodeSize -
highPriorityMockDecodeSize); | 455 ASSERT_EQ(memoryCache()->liveSize(), totalSize - lowPriorityMockDecodeSize -
highPriorityMockDecodeSize); |
446 } | 456 } |
447 | 457 |
448 TEST_F(MemoryCacheTest, DecodeCacheOrder_Basic) | 458 TEST_F(MemoryCacheTest, DecodeCacheOrder_Basic) |
449 { | 459 { |
450 ResourcePtr<FakeDecodedResource> cachedImageLowPriority = | 460 RefPtrWillBeRawPtr<FakeDecodedResource> cachedImageLowPriority = |
451 new FakeDecodedResource(ResourceRequest("http://foo.com"), Resource::Raw
); | 461 FakeDecodedResource::create(ResourceRequest("http://foo.com"), Resource:
:Raw); |
452 ResourcePtr<FakeDecodedResource> cachedImageHighPriority = | 462 RefPtrWillBeRawPtr<FakeDecodedResource> cachedImageHighPriority = |
453 new FakeDecodedResource(ResourceRequest("http://test/resource"), Resourc
e::Raw); | 463 FakeDecodedResource::create(ResourceRequest("http://test/resource"), Res
ource::Raw); |
454 TestDecodeCacheOrder(cachedImageLowPriority, cachedImageHighPriority); | 464 TestDecodeCacheOrder(cachedImageLowPriority.get(), cachedImageHighPriority.g
et()); |
455 } | 465 } |
456 | 466 |
457 TEST_F(MemoryCacheTest, DecodeCacheOrder_MultipleResourceMaps) | 467 TEST_F(MemoryCacheTest, DecodeCacheOrder_MultipleResourceMaps) |
458 { | 468 { |
459 { | 469 { |
460 ResourcePtr<FakeDecodedResource> cachedImageLowPriority = | 470 RefPtrWillBeRawPtr<FakeDecodedResource> cachedImageLowPriority = |
461 new FakeDecodedResource(ResourceRequest("http://foo.com"), Resource:
:Raw); | 471 FakeDecodedResource::create(ResourceRequest("http://foo.com"), Resou
rce::Raw); |
462 ResourcePtr<FakeDecodedResource> cachedImageHighPriority = | 472 RefPtrWillBeRawPtr<FakeDecodedResource> cachedImageHighPriority = |
463 new FakeDecodedResource(ResourceRequest("http://test/resource"), Res
ource::Raw); | 473 FakeDecodedResource::create(ResourceRequest("http://test/resource"),
Resource::Raw); |
464 cachedImageLowPriority->setCacheIdentifier("foo"); | 474 cachedImageLowPriority->setCacheIdentifier("foo"); |
465 TestDecodeCacheOrder(cachedImageLowPriority, cachedImageHighPriority); | 475 TestDecodeCacheOrder(cachedImageLowPriority.get(), cachedImageHighPriori
ty.get()); |
466 memoryCache()->evictResources(); | 476 memoryCache()->evictResources(); |
467 } | 477 } |
468 { | 478 { |
469 ResourcePtr<FakeDecodedResource> cachedImageLowPriority = | 479 RefPtrWillBeRawPtr<FakeDecodedResource> cachedImageLowPriority = |
470 new FakeDecodedResource(ResourceRequest("http://foo.com"), Resource:
:Raw); | 480 FakeDecodedResource::create(ResourceRequest("http://foo.com"), Resou
rce::Raw); |
471 ResourcePtr<FakeDecodedResource> cachedImageHighPriority = | 481 RefPtrWillBeRawPtr<FakeDecodedResource> cachedImageHighPriority = |
472 new FakeDecodedResource(ResourceRequest("http://test/resource"), Res
ource::Raw); | 482 FakeDecodedResource::create(ResourceRequest("http://test/resource"),
Resource::Raw); |
473 cachedImageHighPriority->setCacheIdentifier("foo"); | 483 cachedImageHighPriority->setCacheIdentifier("foo"); |
474 TestDecodeCacheOrder(cachedImageLowPriority, cachedImageHighPriority); | 484 TestDecodeCacheOrder(cachedImageLowPriority.get(), cachedImageHighPriori
ty.get()); |
475 memoryCache()->evictResources(); | 485 memoryCache()->evictResources(); |
476 } | 486 } |
477 { | 487 { |
478 ResourcePtr<FakeDecodedResource> cachedImageLowPriority = | 488 RefPtrWillBeRawPtr<FakeDecodedResource> cachedImageLowPriority = |
479 new FakeDecodedResource(ResourceRequest("http://test/resource"), Res
ource::Raw); | 489 FakeDecodedResource::create(ResourceRequest("http://test/resource"),
Resource::Raw); |
480 cachedImageLowPriority->setCacheIdentifier("foo"); | 490 cachedImageLowPriority->setCacheIdentifier("foo"); |
481 ResourcePtr<FakeDecodedResource> cachedImageHighPriority = | 491 RefPtrWillBeRawPtr<FakeDecodedResource> cachedImageHighPriority = |
482 new FakeDecodedResource(ResourceRequest("http://test/resource"), Res
ource::Raw); | 492 FakeDecodedResource::create(ResourceRequest("http://test/resource"),
Resource::Raw); |
483 cachedImageHighPriority->setCacheIdentifier("bar"); | 493 cachedImageHighPriority->setCacheIdentifier("bar"); |
484 TestDecodeCacheOrder(cachedImageLowPriority, cachedImageHighPriority); | 494 TestDecodeCacheOrder(cachedImageLowPriority.get(), cachedImageHighPriori
ty.get()); |
485 memoryCache()->evictResources(); | 495 memoryCache()->evictResources(); |
486 } | 496 } |
487 } | 497 } |
488 | 498 |
489 TEST_F(MemoryCacheTest, RemoveDuringRevalidation) | 499 TEST_F(MemoryCacheTest, RemoveDuringRevalidation) |
490 { | 500 { |
491 ResourcePtr<FakeResource> resource1 = new FakeResource(ResourceRequest("http
://test/resource"), Resource::Raw); | 501 RefPtrWillBeRawPtr<FakeResource> resource1 = FakeResource::create(ResourceRe
quest("http://test/resource"), Resource::Raw); |
492 memoryCache()->add(resource1.get()); | 502 memoryCache()->add(resource1.get()); |
493 | 503 |
494 ResourcePtr<FakeResource> resource2 = new FakeResource(ResourceRequest("http
://test/resource"), Resource::Raw); | 504 RefPtrWillBeRawPtr<FakeResource> resource2 = FakeResource::create(ResourceRe
quest("http://test/resource"), Resource::Raw); |
495 memoryCache()->remove(resource1.get()); | 505 memoryCache()->remove(resource1.get()); |
496 memoryCache()->add(resource2.get()); | 506 memoryCache()->add(resource2.get()); |
497 EXPECT_TRUE(memoryCache()->contains(resource2.get())); | 507 EXPECT_TRUE(memoryCache()->contains(resource2.get())); |
498 EXPECT_FALSE(memoryCache()->contains(resource1.get())); | 508 EXPECT_FALSE(memoryCache()->contains(resource1.get())); |
499 | 509 |
500 ResourcePtr<FakeResource> resource3 = new FakeResource(ResourceRequest("http
://test/resource"), Resource::Raw); | 510 RefPtrWillBeRawPtr<FakeResource> resource3 = FakeResource::create(ResourceRe
quest("http://test/resource"), Resource::Raw); |
501 memoryCache()->remove(resource2.get()); | 511 memoryCache()->remove(resource2.get()); |
502 memoryCache()->add(resource3.get()); | 512 memoryCache()->add(resource3.get()); |
503 EXPECT_TRUE(memoryCache()->contains(resource3.get())); | 513 EXPECT_TRUE(memoryCache()->contains(resource3.get())); |
504 EXPECT_FALSE(memoryCache()->contains(resource2.get())); | 514 EXPECT_FALSE(memoryCache()->contains(resource2.get())); |
505 } | 515 } |
506 | 516 |
507 TEST_F(MemoryCacheTest, ResourceMapIsolation) | 517 TEST_F(MemoryCacheTest, ResourceMapIsolation) |
508 { | 518 { |
509 ResourcePtr<FakeResource> resource1 = new FakeResource(ResourceRequest("http
://test/resource"), Resource::Raw); | 519 RefPtrWillBeRawPtr<FakeResource> resource1 = FakeResource::create(ResourceRe
quest("http://test/resource"), Resource::Raw); |
510 memoryCache()->add(resource1.get()); | 520 memoryCache()->add(resource1.get()); |
511 | 521 |
512 ResourcePtr<FakeResource> resource2 = new FakeResource(ResourceRequest("http
://test/resource"), Resource::Raw); | 522 RefPtrWillBeRawPtr<FakeResource> resource2 = FakeResource::create(ResourceRe
quest("http://test/resource"), Resource::Raw); |
513 resource2->setCacheIdentifier("foo"); | 523 resource2->setCacheIdentifier("foo"); |
514 memoryCache()->add(resource2.get()); | 524 memoryCache()->add(resource2.get()); |
515 EXPECT_TRUE(memoryCache()->contains(resource1.get())); | 525 EXPECT_TRUE(memoryCache()->contains(resource1.get())); |
516 EXPECT_TRUE(memoryCache()->contains(resource2.get())); | 526 EXPECT_TRUE(memoryCache()->contains(resource2.get())); |
517 | 527 |
518 const KURL url = KURL(ParsedURLString, "http://test/resource"); | 528 const KURL url = KURL(ParsedURLString, "http://test/resource"); |
519 EXPECT_EQ(resource1.get(), memoryCache()->resourceForURL(url)); | 529 EXPECT_EQ(resource1.get(), memoryCache()->resourceForURL(url)); |
520 EXPECT_EQ(resource1.get(), memoryCache()->resourceForURL(url, memoryCache()-
>defaultCacheIdentifier())); | 530 EXPECT_EQ(resource1.get(), memoryCache()->resourceForURL(url, memoryCache()-
>defaultCacheIdentifier())); |
521 EXPECT_EQ(resource2.get(), memoryCache()->resourceForURL(url, "foo")); | 531 EXPECT_EQ(resource2.get(), memoryCache()->resourceForURL(url, "foo")); |
522 EXPECT_EQ(0, memoryCache()->resourceForURL(KURL())); | 532 EXPECT_EQ(0, memoryCache()->resourceForURL(KURL())); |
523 | 533 |
524 ResourcePtr<FakeResource> resource3 = new FakeResource(ResourceRequest("http
://test/resource"), Resource::Raw); | 534 RefPtrWillBeRawPtr<FakeResource> resource3 = FakeResource::create(ResourceRe
quest("http://test/resource"), Resource::Raw); |
525 resource3->setCacheIdentifier("foo"); | 535 resource3->setCacheIdentifier("foo"); |
526 memoryCache()->remove(resource2.get()); | 536 memoryCache()->remove(resource2.get()); |
527 memoryCache()->add(resource3.get()); | 537 memoryCache()->add(resource3.get()); |
528 EXPECT_TRUE(memoryCache()->contains(resource1.get())); | 538 EXPECT_TRUE(memoryCache()->contains(resource1.get())); |
529 EXPECT_FALSE(memoryCache()->contains(resource2.get())); | 539 EXPECT_FALSE(memoryCache()->contains(resource2.get())); |
530 EXPECT_TRUE(memoryCache()->contains(resource3.get())); | 540 EXPECT_TRUE(memoryCache()->contains(resource3.get())); |
531 | 541 |
532 WillBeHeapVector<RawPtrWillBeMember<Resource>> resources = memoryCache()->re
sourcesForURL(url); | 542 WillBeHeapVector<RawPtrWillBeMember<Resource>> resources = memoryCache()->re
sourcesForURL(url); |
533 EXPECT_EQ(2u, resources.size()); | 543 EXPECT_EQ(2u, resources.size()); |
534 | 544 |
535 memoryCache()->evictResources(); | 545 memoryCache()->evictResources(); |
536 EXPECT_FALSE(memoryCache()->contains(resource1.get())); | 546 EXPECT_FALSE(memoryCache()->contains(resource1.get())); |
537 EXPECT_FALSE(memoryCache()->contains(resource3.get())); | 547 EXPECT_FALSE(memoryCache()->contains(resource3.get())); |
538 } | 548 } |
539 | 549 |
540 } // namespace blink | 550 } // namespace blink |
OLD | NEW |