Title: [222594] trunk
Revision
222594
Author
[email protected]
Date
2017-09-27 18:38:18 -0700 (Wed, 27 Sep 2017)

Log 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:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (222593 => 222594)


--- trunk/LayoutTests/ChangeLog	2017-09-28 01:29:14 UTC (rev 222593)
+++ trunk/LayoutTests/ChangeLog	2017-09-28 01:38:18 UTC (rev 222594)
@@ -1,3 +1,13 @@
+2017-09-27  Zalan Bujtas  <[email protected]>
+
+        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.
+
+        * platform/mac/TestExpectations:
+
 2017-09-27  Myles C. Maxfield  <[email protected]>
 
         Minimum font size may cause elements to have an infinite line-height

Modified: trunk/LayoutTests/platform/mac/TestExpectations (222593 => 222594)


--- trunk/LayoutTests/platform/mac/TestExpectations	2017-09-28 01:29:14 UTC (rev 222593)
+++ trunk/LayoutTests/platform/mac/TestExpectations	2017-09-28 01:38:18 UTC (rev 222594)
@@ -1771,7 +1771,5 @@
 
 webkit.org/b/177323 imported/w3c/web-platform-tests/fetch/security/embedded-credentials.tentative.sub.html [ Pass Failure ]
 
-webkit.org/b/177520 accessibility/image-load-on-delay.html [ Pass Failure ]
-
 webkit.org/b/177388 inspector/canvas/shaderProgram-add-remove-webgl.html [ Pass Failure ]
 

Modified: trunk/Source/WebCore/ChangeLog (222593 => 222594)


--- trunk/Source/WebCore/ChangeLog	2017-09-28 01:29:14 UTC (rev 222593)
+++ trunk/Source/WebCore/ChangeLog	2017-09-28 01:38:18 UTC (rev 222594)
@@ -1,3 +1,22 @@
+2017-09-27  Zalan Bujtas  <[email protected]>
+
+        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.
+
+        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):
+
 2017-09-27  Tim Horton  <[email protected]>
 
         Try to fix the Mac CMake build

Modified: trunk/Source/WebCore/accessibility/AXObjectCache.cpp (222593 => 222594)


--- trunk/Source/WebCore/accessibility/AXObjectCache.cpp	2017-09-28 01:29:14 UTC (rev 222593)
+++ trunk/Source/WebCore/accessibility/AXObjectCache.cpp	2017-09-28 01:38:18 UTC (rev 222594)
@@ -2783,6 +2783,29 @@
     m_deferredRecomputeIsIgnoredList.clear();
 }
 
+static bool rendererNeedsDeferredUpdate(RenderObject& renderer)
+{
+    ASSERT(!renderer.beingDestroyed());
+    auto& document = renderer.document();
+    return renderer.needsLayout() || document.needsStyleRecalc() || document.inRenderTreeUpdate() || (document.view() && document.view()->isInRenderTreeLayout());
+}
+
+void AXObjectCache::deferRecomputeIsIgnoredIfNeeded(Element* element)
+{
+    if (!element)
+        return;
+
+    auto* renderer = element->renderer();
+    if (!renderer || renderer->beingDestroyed())
+        return;
+
+    if (rendererNeedsDeferredUpdate(*renderer)) {
+        m_deferredRecomputeIsIgnoredList.add(element);
+        return;
+    }
+    recomputeIsIgnored(renderer);
+}
+
 void AXObjectCache::deferRecomputeIsIgnored(Element* element)
 {
     if (!element)
@@ -2799,12 +2822,11 @@
     if (!node)
         return;
 
-    if (node->renderer() && node->renderer()->beingDestroyed())
+    auto* renderer = node->renderer();
+    if (renderer && renderer->beingDestroyed())
         return;
 
-    auto& document = node->document();
-    // FIXME: We should just defer all text changes.
-    if (document.needsStyleRecalc() || document.inRenderTreeUpdate() || (document.view() && document.view()->isInRenderTreeLayout())) {
+    if (renderer && rendererNeedsDeferredUpdate(*renderer)) {
         m_deferredTextChangedList.add(node);
         return;
     }

Modified: trunk/Source/WebCore/accessibility/AXObjectCache.h (222593 => 222594)


--- trunk/Source/WebCore/accessibility/AXObjectCache.h	2017-09-28 01:29:14 UTC (rev 222593)
+++ trunk/Source/WebCore/accessibility/AXObjectCache.h	2017-09-28 01:38:18 UTC (rev 222594)
@@ -329,6 +329,7 @@
 #if PLATFORM(MAC)
     static void setShouldRepostNotificationsForTests(bool value);
 #endif
+    void deferRecomputeIsIgnoredIfNeeded(Element*);
     void deferRecomputeIsIgnored(Element*);
     void deferTextChangedIfNeeded(Node*);
     void performDeferredCacheUpdate();
@@ -486,6 +487,7 @@
 inline void AXObjectCache::childrenChanged(AccessibilityObject*) { }
 inline void AXObjectCache::childrenChanged(Node*, Node*) { }
 inline void AXObjectCache::childrenChanged(RenderObject*, RenderObject*) { }
+inline void AXObjectCache::deferRecomputeIsIgnoredIfNeeded(Element*) { }
 inline void AXObjectCache::deferRecomputeIsIgnored(Element*) { }
 inline void AXObjectCache::deferTextChangedIfNeeded(Node*) { }
 inline void AXObjectCache::detachWrapper(AccessibilityObject*, AccessibilityDetachmentType) { }

Modified: trunk/Source/WebCore/rendering/RenderImage.cpp (222593 => 222594)


--- trunk/Source/WebCore/rendering/RenderImage.cpp	2017-09-28 01:29:14 UTC (rev 222593)
+++ trunk/Source/WebCore/rendering/RenderImage.cpp	2017-09-28 01:38:18 UTC (rev 222594)
@@ -265,13 +265,9 @@
         }
         imageSizeChange = setImageSizeForAltText(cachedImage());
     }
-
-    if (UNLIKELY(AXObjectCache::accessibilityEnabled())) {
-        if (AXObjectCache* cache = document().existingAXObjectCache())
-            cache->deferRecomputeIsIgnored(element());
-    }
-
     repaintOrMarkForLayout(imageSizeChange, rect);
+    if (AXObjectCache* cache = document().existingAXObjectCache())
+        cache->deferRecomputeIsIgnoredIfNeeded(element());
 }
 
 void RenderImage::updateIntrinsicSizeIfNeeded(const LayoutSize& newSize)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to