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