Changeset 222594 in webkit


Ignore:
Timestamp:
Sep 27, 2017 6:38:18 PM (7 years ago)
Author:
Alan Bujtas
Message:

Deferred image size change makes image-load-on-delay.html flaky.
https://bugs.webkit.org/show_bug.cgi?id=177520
<rdar://problem/34674299>

Reviewed by Dean Jackson.

Source/WebCore:

Only defer recomputeIsIgnored when the image change actually triggers layout.

  • accessibility/AXObjectCache.cpp:

(WebCore::rendererNeedsDeferredUpdate):
(WebCore::AXObjectCache::deferRecomputeIsIgnoredIfNeeded):
(WebCore::AXObjectCache::deferTextChangedIfNeeded):

  • accessibility/AXObjectCache.h:

(WebCore::AXObjectCache::deferRecomputeIsIgnoredIfNeeded):

  • rendering/RenderImage.cpp:

(WebCore::RenderImage::imageChanged):

LayoutTests:

  • platform/mac/TestExpectations:
Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r222588 r222594  
     12017-09-27  Zalan Bujtas  <zalan@apple.com>
     2
     3        Deferred image size change makes image-load-on-delay.html flaky.
     4        https://bugs.webkit.org/show_bug.cgi?id=177520
     5        <rdar://problem/34674299>
     6
     7        Reviewed by Dean Jackson.
     8
     9        * platform/mac/TestExpectations:
     10
    1112017-09-27  Myles C. Maxfield  <mmaxfield@apple.com>
    212
  • trunk/LayoutTests/platform/mac/TestExpectations

    r222569 r222594  
    17721772webkit.org/b/177323 imported/w3c/web-platform-tests/fetch/security/embedded-credentials.tentative.sub.html [ Pass Failure ]
    17731773
    1774 webkit.org/b/177520 accessibility/image-load-on-delay.html [ Pass Failure ]
    1775 
    17761774webkit.org/b/177388 inspector/canvas/shaderProgram-add-remove-webgl.html [ Pass Failure ]
    17771775
  • trunk/Source/WebCore/ChangeLog

    r222592 r222594  
     12017-09-27  Zalan Bujtas  <zalan@apple.com>
     2
     3        Deferred image size change makes image-load-on-delay.html flaky.
     4        https://bugs.webkit.org/show_bug.cgi?id=177520
     5        <rdar://problem/34674299>
     6
     7        Reviewed by Dean Jackson.
     8
     9        Only defer recomputeIsIgnored when the image change actually triggers layout.
     10
     11        * accessibility/AXObjectCache.cpp:
     12        (WebCore::rendererNeedsDeferredUpdate):
     13        (WebCore::AXObjectCache::deferRecomputeIsIgnoredIfNeeded):
     14        (WebCore::AXObjectCache::deferTextChangedIfNeeded):
     15        * accessibility/AXObjectCache.h:
     16        (WebCore::AXObjectCache::deferRecomputeIsIgnoredIfNeeded):
     17        * rendering/RenderImage.cpp:
     18        (WebCore::RenderImage::imageChanged):
     19
    1202017-09-27  Tim Horton  <timothy_horton@apple.com>
    221
  • trunk/Source/WebCore/accessibility/AXObjectCache.cpp

    r222226 r222594  
    27842784}
    27852785
     2786static bool rendererNeedsDeferredUpdate(RenderObject& renderer)
     2787{
     2788    ASSERT(!renderer.beingDestroyed());
     2789    auto& document = renderer.document();
     2790    return renderer.needsLayout() || document.needsStyleRecalc() || document.inRenderTreeUpdate() || (document.view() && document.view()->isInRenderTreeLayout());
     2791}
     2792
     2793void AXObjectCache::deferRecomputeIsIgnoredIfNeeded(Element* element)
     2794{
     2795    if (!element)
     2796        return;
     2797
     2798    auto* renderer = element->renderer();
     2799    if (!renderer || renderer->beingDestroyed())
     2800        return;
     2801
     2802    if (rendererNeedsDeferredUpdate(*renderer)) {
     2803        m_deferredRecomputeIsIgnoredList.add(element);
     2804        return;
     2805    }
     2806    recomputeIsIgnored(renderer);
     2807}
     2808
    27862809void AXObjectCache::deferRecomputeIsIgnored(Element* element)
    27872810{
     
    28002823        return;
    28012824
    2802     if (node->renderer() && node->renderer()->beingDestroyed())
    2803         return;
    2804 
    2805     auto& document = node->document();
    2806     // FIXME: We should just defer all text changes.
    2807     if (document.needsStyleRecalc() || document.inRenderTreeUpdate() || (document.view() && document.view()->isInRenderTreeLayout())) {
     2825    auto* renderer = node->renderer();
     2826    if (renderer && renderer->beingDestroyed())
     2827        return;
     2828
     2829    if (renderer && rendererNeedsDeferredUpdate(*renderer)) {
    28082830        m_deferredTextChangedList.add(node);
    28092831        return;
  • trunk/Source/WebCore/accessibility/AXObjectCache.h

    r222226 r222594  
    330330    static void setShouldRepostNotificationsForTests(bool value);
    331331#endif
     332    void deferRecomputeIsIgnoredIfNeeded(Element*);
    332333    void deferRecomputeIsIgnored(Element*);
    333334    void deferTextChangedIfNeeded(Node*);
     
    487488inline void AXObjectCache::childrenChanged(Node*, Node*) { }
    488489inline void AXObjectCache::childrenChanged(RenderObject*, RenderObject*) { }
     490inline void AXObjectCache::deferRecomputeIsIgnoredIfNeeded(Element*) { }
    489491inline void AXObjectCache::deferRecomputeIsIgnored(Element*) { }
    490492inline void AXObjectCache::deferTextChangedIfNeeded(Node*) { }
  • trunk/Source/WebCore/rendering/RenderImage.cpp

    r222575 r222594  
    266266        imageSizeChange = setImageSizeForAltText(cachedImage());
    267267    }
    268 
    269     if (UNLIKELY(AXObjectCache::accessibilityEnabled())) {
    270         if (AXObjectCache* cache = document().existingAXObjectCache())
    271             cache->deferRecomputeIsIgnored(element());
    272     }
    273 
    274268    repaintOrMarkForLayout(imageSizeChange, rect);
     269    if (AXObjectCache* cache = document().existingAXObjectCache())
     270        cache->deferRecomputeIsIgnoredIfNeeded(element());
    275271}
    276272
Note: See TracChangeset for help on using the changeset viewer.