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 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 // is deferred to the end of the task. | 177 // is deferred to the end of the task. |
178 TEST_F(MemoryCacheTest, LiveResourceEvictionAtEndOfTask) | 178 TEST_F(MemoryCacheTest, LiveResourceEvictionAtEndOfTask) |
179 { | 179 { |
180 memoryCache()->setDelayBeforeLiveDecodedPrune(0); | 180 memoryCache()->setDelayBeforeLiveDecodedPrune(0); |
181 const unsigned totalCapacity = 1; | 181 const unsigned totalCapacity = 1; |
182 const unsigned minDeadCapacity = 0; | 182 const unsigned minDeadCapacity = 0; |
183 const unsigned maxDeadCapacity = 0; | 183 const unsigned maxDeadCapacity = 0; |
184 memoryCache()->setCapacities(minDeadCapacity, maxDeadCapacity, totalCapacity
); | 184 memoryCache()->setCapacities(minDeadCapacity, maxDeadCapacity, totalCapacity
); |
185 const char data[6] = "abcde"; | 185 const char data[6] = "abcde"; |
186 ResourcePtr<Resource> cachedDeadResource = | 186 ResourcePtr<Resource> cachedDeadResource = |
187 new Resource(ResourceRequest(""), Resource::Raw); | 187 new Resource(ResourceRequest("http://foo"), Resource::Raw); |
188 cachedDeadResource->appendData(data, 3); | 188 cachedDeadResource->appendData(data, 3); |
189 ResourcePtr<Resource> cachedLiveResource = | 189 ResourcePtr<Resource> cachedLiveResource = |
190 new FakeDecodedResource(ResourceRequest(""), Resource::Raw); | 190 new FakeDecodedResource(ResourceRequest(""), Resource::Raw); |
191 MockImageResourceClient client; | 191 MockImageResourceClient client; |
192 cachedLiveResource->addClient(&client); | 192 cachedLiveResource->addClient(&client); |
193 cachedLiveResource->appendData(data, 4); | 193 cachedLiveResource->appendData(data, 4); |
194 | 194 |
195 class Task1 : public blink::WebThread::Task { | 195 class Task1 : public blink::WebThread::Task { |
196 public: | 196 public: |
197 Task1(const ResourcePtr<Resource>& live, const ResourcePtr<Resource>& de
ad) | 197 Task1(const ResourcePtr<Resource>& live, const ResourcePtr<Resource>& de
ad) |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
249 blink::Platform::current()->currentThread()->enterRunLoop(); | 249 blink::Platform::current()->currentThread()->enterRunLoop(); |
250 cachedLiveResource->removeClient(&client); | 250 cachedLiveResource->removeClient(&client); |
251 } | 251 } |
252 | 252 |
253 // Verifies that cached resources are evicted immediately after release when | 253 // Verifies that cached resources are evicted immediately after release when |
254 // the total dead resource size is more than double the dead resource capacity. | 254 // the total dead resource size is more than double the dead resource capacity. |
255 TEST_F(MemoryCacheTest, ClientRemoval) | 255 TEST_F(MemoryCacheTest, ClientRemoval) |
256 { | 256 { |
257 const char data[6] = "abcde"; | 257 const char data[6] = "abcde"; |
258 ResourcePtr<Resource> resource1 = | 258 ResourcePtr<Resource> resource1 = |
259 new FakeDecodedResource(ResourceRequest(""), Resource::Raw); | 259 new FakeDecodedResource(ResourceRequest("http://foo.com"), Resource::Raw
); |
260 MockImageResourceClient client1; | 260 MockImageResourceClient client1; |
261 resource1->addClient(&client1); | 261 resource1->addClient(&client1); |
262 resource1->appendData(data, 4); | 262 resource1->appendData(data, 4); |
263 ResourcePtr<Resource> resource2 = | 263 ResourcePtr<Resource> resource2 = |
264 new FakeDecodedResource(ResourceRequest(""), Resource::Raw); | 264 new FakeDecodedResource(ResourceRequest(""), Resource::Raw); |
265 MockImageResourceClient client2; | 265 MockImageResourceClient client2; |
266 resource2->addClient(&client2); | 266 resource2->addClient(&client2); |
267 resource2->appendData(data, 4); | 267 resource2->appendData(data, 4); |
268 | 268 |
269 const unsigned minDeadCapacity = 0; | 269 const unsigned minDeadCapacity = 0; |
270 const unsigned maxDeadCapacity = resource1->size() - 1; | 270 const unsigned maxDeadCapacity = ((resource1->size() + resource2->size()) /
2) - 1; |
271 const unsigned totalCapacity = maxDeadCapacity; | 271 const unsigned totalCapacity = maxDeadCapacity; |
272 memoryCache()->setCapacities(minDeadCapacity, maxDeadCapacity, totalCapacity
); | 272 memoryCache()->setCapacities(minDeadCapacity, maxDeadCapacity, totalCapacity
); |
273 memoryCache()->add(resource1.get()); | 273 memoryCache()->add(resource1.get()); |
274 memoryCache()->add(resource2.get()); | 274 memoryCache()->add(resource2.get()); |
275 // Call prune. There is nothing to prune, but this will initialize | 275 // Call prune. There is nothing to prune, but this will initialize |
276 // the prune timestamp, allowing future prunes to be deferred. | 276 // the prune timestamp, allowing future prunes to be deferred. |
277 memoryCache()->prune(); | 277 memoryCache()->prune(); |
278 ASSERT_GT(resource1->decodedSize(), 0u); | 278 ASSERT_GT(resource1->decodedSize(), 0u); |
279 ASSERT_GT(resource2->decodedSize(), 0u); | 279 ASSERT_GT(resource2->decodedSize(), 0u); |
280 ASSERT_EQ(memoryCache()->deadSize(), 0u); | 280 ASSERT_EQ(memoryCache()->deadSize(), 0u); |
(...skipping 20 matching lines...) Expand all Loading... |
301 ASSERT_FALSE(resource2->inCache()); | 301 ASSERT_FALSE(resource2->inCache()); |
302 } | 302 } |
303 | 303 |
304 // Verifies that CachedResources are evicted from the decode cache | 304 // Verifies that CachedResources are evicted from the decode cache |
305 // according to their DecodeCachePriority. | 305 // according to their DecodeCachePriority. |
306 TEST_F(MemoryCacheTest, DecodeCacheOrder) | 306 TEST_F(MemoryCacheTest, DecodeCacheOrder) |
307 { | 307 { |
308 memoryCache()->setDelayBeforeLiveDecodedPrune(0); | 308 memoryCache()->setDelayBeforeLiveDecodedPrune(0); |
309 memoryCache()->setMaxPruneDeferralDelay(0); | 309 memoryCache()->setMaxPruneDeferralDelay(0); |
310 ResourcePtr<FakeDecodedResource> cachedImageLowPriority = | 310 ResourcePtr<FakeDecodedResource> cachedImageLowPriority = |
311 new FakeDecodedResource(ResourceRequest(""), Resource::Raw); | 311 new FakeDecodedResource(ResourceRequest("http://foo.com"), Resource::Raw
); |
312 ResourcePtr<FakeDecodedResource> cachedImageHighPriority = | 312 ResourcePtr<FakeDecodedResource> cachedImageHighPriority = |
313 new FakeDecodedResource(ResourceRequest(""), Resource::Raw); | 313 new FakeDecodedResource(ResourceRequest(""), Resource::Raw); |
314 | 314 |
315 MockImageResourceClient clientLowPriority; | 315 MockImageResourceClient clientLowPriority; |
316 MockImageResourceClient clientHighPriority; | 316 MockImageResourceClient clientHighPriority; |
317 cachedImageLowPriority->addClient(&clientLowPriority); | 317 cachedImageLowPriority->addClient(&clientLowPriority); |
318 cachedImageHighPriority->addClient(&clientHighPriority); | 318 cachedImageHighPriority->addClient(&clientHighPriority); |
319 | 319 |
320 const char data[5] = "abcd"; | 320 const char data[5] = "abcd"; |
321 cachedImageLowPriority->appendData(data, 1); | 321 cachedImageLowPriority->appendData(data, 1); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
360 ASSERT_EQ(memoryCache()->deadSize(), 0u); | 360 ASSERT_EQ(memoryCache()->deadSize(), 0u); |
361 ASSERT_EQ(memoryCache()->liveSize(), totalSize - lowPriorityMockDecodeSize); | 361 ASSERT_EQ(memoryCache()->liveSize(), totalSize - lowPriorityMockDecodeSize); |
362 | 362 |
363 // Should prune the HighPriority item. | 363 // Should prune the HighPriority item. |
364 memoryCache()->setCapacities(memoryCache()->minDeadCapacity(), memoryCache()
->liveSize() - 10, memoryCache()->liveSize() - 10); | 364 memoryCache()->setCapacities(memoryCache()->minDeadCapacity(), memoryCache()
->liveSize() - 10, memoryCache()->liveSize() - 10); |
365 memoryCache()->prune(); | 365 memoryCache()->prune(); |
366 ASSERT_EQ(memoryCache()->deadSize(), 0u); | 366 ASSERT_EQ(memoryCache()->deadSize(), 0u); |
367 ASSERT_EQ(memoryCache()->liveSize(), totalSize - lowPriorityMockDecodeSize -
highPriorityMockDecodeSize); | 367 ASSERT_EQ(memoryCache()->liveSize(), totalSize - lowPriorityMockDecodeSize -
highPriorityMockDecodeSize); |
368 } | 368 } |
369 } // namespace | 369 } // namespace |
OLD | NEW |