Changeset 130573 in webkit


Ignore:
Timestamp:
Oct 5, 2012 6:28:05 PM (12 years ago)
Author:
commit-queue@webkit.org
Message:

[mac] REGRESSION (r122215): Animated GIF outside the viewport doesn't play when scrolled into view.
https://bugs.webkit.org/show_bug.cgi?id=94874

Patch by Huang Dongsung <luxtella@company100.net> on 2012-10-05
Reviewed by Simon Fraser.

Rollback previous patch because this patch caused two problems.

  1. GIF animation is occasionally paused when tiled scrolling is enabled.
  2. This change regressed Apple's Membuster benchmark by ~20% (80MB.)
  • loader/cache/CachedImage.cpp:

(WebCore::CachedImage::shouldPauseAnimation):

  • loader/cache/CachedImage.h:

(CachedImage):

  • loader/cache/CachedResource.h:
  • loader/cache/MemoryCache.cpp:

(WebCore::MemoryCache::pruneLiveResourcesToSize):

  • rendering/RenderObject.cpp:

(WebCore::RenderObject::willRenderImage):

Location:
trunk/Source/WebCore
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r130570 r130573  
     12012-10-05  Huang Dongsung  <luxtella@company100.net>
     2
     3        [mac] REGRESSION (r122215): Animated GIF outside the viewport doesn't play when scrolled into view.
     4        https://bugs.webkit.org/show_bug.cgi?id=94874
     5
     6        Reviewed by Simon Fraser.
     7
     8        Rollback previous patch because this patch caused two problems.
     9        1. GIF animation is occasionally paused when tiled scrolling is enabled.
     10        2. This change regressed Apple's Membuster benchmark by ~20% (80MB.)
     11
     12        * loader/cache/CachedImage.cpp:
     13        (WebCore::CachedImage::shouldPauseAnimation):
     14        * loader/cache/CachedImage.h:
     15        (CachedImage):
     16        * loader/cache/CachedResource.h:
     17        * loader/cache/MemoryCache.cpp:
     18        (WebCore::MemoryCache::pruneLiveResourcesToSize):
     19        * rendering/RenderObject.cpp:
     20        (WebCore::RenderObject::willRenderImage):
     21
    1222012-10-05  Xianzhu Wang  <wangxianzhu@chromium.org>
    223
  • trunk/Source/WebCore/loader/cache/CachedImage.cpp

    r130329 r130573  
    423423}
    424424
    425 bool CachedImage::likelyToBeUsedSoon()
    426 {
    427     CachedResourceClientWalker<CachedImageClient> walker(m_clients);
    428     while (CachedImageClient* client = walker.next()) {
    429         if (client->willRenderImage(this))
    430             return true;
    431     }
    432 
    433     return false;
    434 }
    435 
    436425void CachedImage::didDraw(const Image* image)
    437426{
     
    451440        return false;
    452441   
    453     return !likelyToBeUsedSoon();
     442    CachedResourceClientWalker<CachedImageClient> w(m_clients);
     443    while (CachedImageClient* c = w.next()) {
     444        if (c->willRenderImage(this))
     445            return false;
     446    }
     447
     448    return true;
    454449}
    455450
  • trunk/Source/WebCore/loader/cache/CachedImage.h

    r129462 r130573  
    7373    virtual void destroyDecodedData();
    7474
    75     virtual bool likelyToBeUsedSoon();
    76 
    7775    virtual void data(PassRefPtr<SharedBuffer> data, bool allDataReceived);
    7876    virtual void error(CachedResource::Status);
  • trunk/Source/WebCore/loader/cache/CachedResource.h

    r129462 r130573  
    216216    void setOwningCachedResourceLoader(CachedResourceLoader* cachedResourceLoader) { m_owningCachedResourceLoader = cachedResourceLoader; }
    217217   
    218     // MemoryCache does not destroy the decoded data of a CachedResource if the decoded data will be likely used.
    219     virtual bool likelyToBeUsedSoon() { return false; }
    220 
    221218    bool isPreloaded() const { return m_preloadCount; }
    222219    void increasePreloadCount() { ++m_preloadCount; }
  • trunk/Source/WebCore/loader/cache/MemoryCache.cpp

    r130048 r130573  
    239239                return;
    240240
    241             // Check to see if the current resource are likely to be used again soon.
    242             if (current->likelyToBeUsedSoon()) {
    243                 current = prev;
    244                 continue;
    245             }
    246 
    247241            // Destroy our decoded data. This will remove us from
    248242            // m_liveDecodedResources, and possibly move us to a different LRU
  • trunk/Source/WebCore/rendering/RenderObject.cpp

    r130489 r130573  
    28072807    // If we're not in a window (i.e., we're dormant from being put in the b/f cache or in a background tab)
    28082808    // then we don't want to render either.
    2809     if (document()->inPageCache() || document()->view()->isOffscreen())
    2810         return false;
    2811 
    2812     // If the document is being destroyed or has not been attached, then this
    2813     // RenderObject will not be rendered.
    2814     if (!view())
    2815         return false;
    2816 
    2817     // If a renderer is outside the viewport, we won't render.
    2818     return viewRect().intersects(absoluteClippedOverflowRect());
     2809    return !document()->inPageCache() && !document()->view()->isOffscreen();
    28192810}
    28202811
Note: See TracChangeset for help on using the changeset viewer.