Changeset 139236 in webkit


Ignore:
Timestamp:
Jan 9, 2013 1:51:10 PM (11 years ago)
Author:
akling@apple.com
Message:

SVG-as-image: Throw out cached bitmap renderings after they sit unused for some time.
<http://webkit.org/b/106484>
<rdar://problem/12983216>

Reviewed by Antti Koivisto.

Add a one-shot timer to SVGImageCache to self-clear the bitmap cache 30 seconds after last access.
This prevents us from keeping huge ImageBuffers around in memory for the lifetime of the elements
referencing that particular SVG file. (The ownership model is actually a bit more complicated
but that's irrelevant to this issue.)

10234kB progression on Membuster3.

  • svg/graphics/SVGImageCache.cpp:

(WebCore::SVGImageCache::SVGImageCache):
(WebCore::SVGImageCache::~SVGImageCache):
(WebCore::SVGImageCache::clearBitmapCache):
(WebCore::SVGImageCache::cacheClearTimerFired):
(WebCore::SVGImageCache::lookupOrCreateBitmapImageForRenderer):

  • svg/graphics/SVGImageCache.h:

(SVGImageCache):

Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r139230 r139236  
     12013-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
    1252013-01-09  Alexey Proskuryakov  <ap@apple.com>
    226
  • trunk/Source/WebCore/svg/graphics/SVGImageCache.cpp

    r136845 r139236  
    11/*
    22 * Copyright (C) 2011 Research In Motion Limited. All rights reserved.
     3 * Copyright (C) 2013 Apple Inc. All rights reserved.
    34 *
    45 * This library is free software; you can redistribute it and/or
     
    3233namespace WebCore {
    3334
     35static const int timeToKeepCachedBitmapsAfterLastUseInSeconds = 30;
     36
    3437SVGImageCache::SVGImageCache(SVGImage* svgImage)
    3538    : m_svgImage(svgImage)
    3639    , m_redrawTimer(this, &SVGImageCache::redrawTimerFired)
     40    , m_cacheClearTimer(this, &SVGImageCache::cacheClearTimerFired, timeToKeepCachedBitmapsAfterLastUseInSeconds)
    3741{
    3842    ASSERT(m_svgImage);
     
    4246{
    4347    m_sizeAndScalesMap.clear();
    44 
     48    clearBitmapCache();
     49}
     50
     51void SVGImageCache::clearBitmapCache()
     52{
    4553    ImageDataMap::iterator end = m_imageDataMap.end();
    4654    for (ImageDataMap::iterator it = m_imageDataMap.begin(); it != end; ++it) {
     
    126134}
    127135
     136void SVGImageCache::cacheClearTimerFired(DeferrableOneShotTimer<SVGImageCache>*)
     137{
     138    clearBitmapCache();
     139}
     140
    128141Image* SVGImageCache::lookupOrCreateBitmapImageForRenderer(const RenderObject* renderer)
    129142{
     
    149162    ASSERT(!size.isEmpty());
    150163
     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
    151167    // Lookup image for client in cache and eventually update it.
    152168    ImageDataMap::iterator it = m_imageDataMap.find(client);
  • trunk/Source/WebCore/svg/graphics/SVGImageCache.h

    r128572 r139236  
    8585    void redraw();
    8686    void redrawTimerFired(Timer<SVGImageCache>*);
     87    void cacheClearTimerFired(DeferrableOneShotTimer<SVGImageCache>*);
     88    void clearBitmapCache();
    8789
    8890    struct ImageData {
     
    115117    ImageDataMap m_imageDataMap;
    116118    Timer<SVGImageCache> m_redrawTimer;
     119    DeferrableOneShotTimer<SVGImageCache> m_cacheClearTimer;
    117120};
    118121
Note: See TracChangeset for help on using the changeset viewer.