Changeset 139236 in webkit
- Timestamp:
- Jan 9, 2013 1:51:10 PM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r139230 r139236 1 2013-01-09 Andreas Kling <akling@apple.com> 2 3 SVG-as-image: Throw out cached bitmap renderings after they sit unused for some time. 4 <http://webkit.org/b/106484> 5 <rdar://problem/12983216> 6 7 Reviewed by Antti Koivisto. 8 9 Add a one-shot timer to SVGImageCache to self-clear the bitmap cache 30 seconds after last access. 10 This prevents us from keeping huge ImageBuffers around in memory for the lifetime of the elements 11 referencing that particular SVG file. (The ownership model is actually a bit more complicated 12 but that's irrelevant to this issue.) 13 14 10234kB progression on Membuster3. 15 16 * svg/graphics/SVGImageCache.cpp: 17 (WebCore::SVGImageCache::SVGImageCache): 18 (WebCore::SVGImageCache::~SVGImageCache): 19 (WebCore::SVGImageCache::clearBitmapCache): 20 (WebCore::SVGImageCache::cacheClearTimerFired): 21 (WebCore::SVGImageCache::lookupOrCreateBitmapImageForRenderer): 22 * svg/graphics/SVGImageCache.h: 23 (SVGImageCache): 24 1 25 2013-01-09 Alexey Proskuryakov <ap@apple.com> 2 26 -
trunk/Source/WebCore/svg/graphics/SVGImageCache.cpp
r136845 r139236 1 1 /* 2 2 * Copyright (C) 2011 Research In Motion Limited. All rights reserved. 3 * Copyright (C) 2013 Apple Inc. All rights reserved. 3 4 * 4 5 * This library is free software; you can redistribute it and/or … … 32 33 namespace WebCore { 33 34 35 static const int timeToKeepCachedBitmapsAfterLastUseInSeconds = 30; 36 34 37 SVGImageCache::SVGImageCache(SVGImage* svgImage) 35 38 : m_svgImage(svgImage) 36 39 , m_redrawTimer(this, &SVGImageCache::redrawTimerFired) 40 , m_cacheClearTimer(this, &SVGImageCache::cacheClearTimerFired, timeToKeepCachedBitmapsAfterLastUseInSeconds) 37 41 { 38 42 ASSERT(m_svgImage); … … 42 46 { 43 47 m_sizeAndScalesMap.clear(); 44 48 clearBitmapCache(); 49 } 50 51 void SVGImageCache::clearBitmapCache() 52 { 45 53 ImageDataMap::iterator end = m_imageDataMap.end(); 46 54 for (ImageDataMap::iterator it = m_imageDataMap.begin(); it != end; ++it) { … … 126 134 } 127 135 136 void SVGImageCache::cacheClearTimerFired(DeferrableOneShotTimer<SVGImageCache>*) 137 { 138 clearBitmapCache(); 139 } 140 128 141 Image* SVGImageCache::lookupOrCreateBitmapImageForRenderer(const RenderObject* renderer) 129 142 { … … 149 162 ASSERT(!size.isEmpty()); 150 163 164 // (Re)schedule the oneshot timer to throw out all the cached ImageBuffers if they remain unused for too long. 165 m_cacheClearTimer.restart(); 166 151 167 // Lookup image for client in cache and eventually update it. 152 168 ImageDataMap::iterator it = m_imageDataMap.find(client); -
trunk/Source/WebCore/svg/graphics/SVGImageCache.h
r128572 r139236 85 85 void redraw(); 86 86 void redrawTimerFired(Timer<SVGImageCache>*); 87 void cacheClearTimerFired(DeferrableOneShotTimer<SVGImageCache>*); 88 void clearBitmapCache(); 87 89 88 90 struct ImageData { … … 115 117 ImageDataMap m_imageDataMap; 116 118 Timer<SVGImageCache> m_redrawTimer; 119 DeferrableOneShotTimer<SVGImageCache> m_cacheClearTimer; 117 120 }; 118 121
Note: See TracChangeset
for help on using the changeset viewer.