Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 0c32fdb167371576029b2ffb6d99aa9f720989c8
      
https://github.com/WebKit/WebKit/commit/0c32fdb167371576029b2ffb6d99aa9f720989c8
  Author: Simon Fraser <[email protected]>
  Date:   2025-09-29 (Mon, 29 Sep 2025)

  Changed paths:
    M LayoutTests/TestExpectations
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/animated/observe-non-animated-image.tentative-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/contracted-image-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/cross-origin-image.sub-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/expanded-image-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/image-TAO.sub-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/image-inside-svg-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/image-not-fully-visible-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/image-removed-before-load-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/image-src-change-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/invisible-images-composited-1-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/invisible-images-composited-2-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/loadTime-after-appendChild-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/multiple-image-same-src-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/multiple-redirects-TAO-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/observe-after-untrusted-scroll-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/observe-css-generated-image-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/observe-image-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/observe-svg-background-image-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/observe-svg-data-uri-background-image-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/observe-svg-data-uri-image-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/observe-svg-image-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/placeholder-image-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/progressively-loaded-image-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/redirects-tao-star-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/repeated-image-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/resized-image-not-reconsidered-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/same-origin-redirects-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/toJSON-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/transparent-text-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/video-poster-expected.txt
    M Source/WebCore/dom/Document.cpp
    M Source/WebCore/dom/Document.h
    M Source/WebCore/page/LargestContentfulPaintData.cpp
    M Source/WebCore/page/LargestContentfulPaintData.h
    M Source/WebCore/rendering/BackgroundPainter.cpp
    M Source/WebCore/rendering/RenderBox.cpp
    M Source/WebCore/rendering/RenderImage.cpp
    M Source/WebCore/rendering/RenderInline.cpp
    M Source/WebCore/rendering/svg/RenderSVGImage.cpp
    M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGImage.cpp
    M Source/WebCore/style/Styleable.h
    M Source/WebCore/style/values/backgrounds/StyleFillLayers.h

  Log Message:
  -----------
  [LCP] Implement `loadTime` for image paints
https://bugs.webkit.org/show_bug.cgi?id=299556
rdar://161361009

Reviewed by Ryosuke Niwa.

The LargestContentfulPaint entry for an image includes `loadTime`[1], which 
indicates the time
at which the image became available to paint, as specified by paint-timing [2]. 
This is not the resource load time, and there's
some ambiguity about what it means for elements that are appended to the DOM 
after the image
load is complete [3], but we'll track it as the time that 
`CachedImageClient::imageChanged()` is called, and if the
image is already available for a new renderer, use the paint time.

Bottleneck through `Document::didLoadImage()` which checks the setting.

Have RenderBox, RenderInline, RenderSVGImage and LegacyRenderSVGImage call 
imageDidLoad.

Move `findLayerUsedImage()` to StyleFillLayers since both RenderBox and 
RenderInline use it now.

Track `loadTime` and match it with a subsequent image paint by having 
`LargestContentfulPaintData`
store it in the per-element image->PendingImageData hash set.

[1] 
https://w3c.github.io/largest-contentful-paint/#dom-largestcontentfulpaint-loadtime
[2] https://w3c.github.io/paint-timing/#process-image-that-finished-loading
[3] https://github.com/w3c/largest-contentful-paint/issues/146

Tested by `-platform-tests/largest-contentful-paint` tests.

* LayoutTests/TestExpectations:
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/animated/observe-non-animated-image.tentative-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/contracted-image-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/cross-origin-image.sub-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/expanded-image-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/image-TAO.sub-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/image-inside-svg-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/image-not-fully-visible-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/image-removed-before-load-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/image-src-change-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/invisible-images-composited-1-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/invisible-images-composited-2-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/loadTime-after-appendChild-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/multiple-image-same-src-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/multiple-redirects-TAO-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/observe-after-untrusted-scroll-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/observe-css-generated-image-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/observe-image-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/observe-svg-background-image-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/observe-svg-data-uri-background-image-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/observe-svg-data-uri-image-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/observe-svg-image-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/placeholder-image-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/progressively-loaded-image-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/redirects-tao-star-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/repeated-image-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/resized-image-not-reconsidered-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/same-origin-redirects-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/toJSON-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/transparent-text-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/largest-contentful-paint/video-poster-expected.txt:
 Added.
* Source/WebCore/dom/Document.cpp:
(WebCore::Document::didLoadImage const):
* Source/WebCore/dom/Document.h:
* Source/WebCore/page/LargestContentfulPaintData.cpp:
(WebCore::LargestContentfulPaintData::potentiallyAddLargestContentfulPaintEntry):
(WebCore::LargestContentfulPaintData::takePendingEntry):
(WebCore::LargestContentfulPaintData::didLoadImage):
(WebCore::LargestContentfulPaintData::didPaintImage):
* Source/WebCore/page/LargestContentfulPaintData.h:
* Source/WebCore/rendering/BackgroundPainter.cpp:
(WebCore::BackgroundPainter::paintFillLayerImpl const): Call 
currentFrameIsComplete() to only count fully
renderable images for LCP.
* Source/WebCore/rendering/RenderBox.cpp:
(WebCore::RenderBox::imageChanged):
(WebCore::findLayerUsedImage): Deleted.
* Source/WebCore/rendering/RenderImage.cpp:
(WebCore::RenderImage::imageChanged):
(WebCore::RenderImage::paintReplaced):
* Source/WebCore/rendering/RenderInline.cpp:
(WebCore::RenderInline::imageChanged):
* Source/WebCore/rendering/svg/RenderSVGImage.cpp:
(WebCore::RenderSVGImage::imageChanged):
* Source/WebCore/rendering/svg/legacy/LegacyRenderSVGImage.cpp:
(WebCore::LegacyRenderSVGImage::imageChanged):
* Source/WebCore/style/Styleable.h:
(WebCore::Styleable::protectedElement const): Add to fix some Safer Cpp 
warnings.
* Source/WebCore/style/values/backgrounds/StyleFillLayers.h:
(WebCore::Style::FillLayers<Layer>::findLayerUsedImage const):

Canonical link: https://commits.webkit.org/300723@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to