Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 6cbd9be5b0cdb8c19994ec061b24460e70da260e
      
https://github.com/WebKit/WebKit/commit/6cbd9be5b0cdb8c19994ec061b24460e70da260e
  Author: Simon Fraser <[email protected]>
  Date:   2025-10-16 (Thu, 16 Oct 2025)

  Changed paths:
    M Source/WebCore/dom/Element.cpp
    M Source/WebCore/dom/Element.h
    M Source/WebCore/dom/ElementRareData.cpp
    M Source/WebCore/dom/ElementRareData.h
    M Source/WebCore/html/HTMLImageElement.cpp
    M Source/WebCore/html/HTMLImageElement.h
    M Source/WebCore/page/LargestContentfulPaintData.cpp
    M Source/WebCore/page/LargestContentfulPaintData.h

  Log Message:
  -----------
  [LCP] Use ElementRareData to store LCP-related data
https://bugs.webkit.org/show_bug.cgi?id=300945
rdar://162818522

Reviewed by Ryosuke Niwa.

We can save a few weak hash map/set lookups and traversals by storing 
LCP-related
data in ElementRareData, so make `ElementLargestContentfulPaintData` accessible 
from
Element just like `ResizeObserverData` and `IntersectionObserverData` (while 
fixing
their accessors to be const).

LCP for images requires storing data per CachedImage on each element, so use a 
Vector
to hold per-image data (since there will be few, a HashMap is overkill). 
Usually,
`didLoadImage` will append data for an image to this vector with `loadTime`, 
and `didPaintImage`
will annotate it with a rectangle.

A minor optimization is to call `scheduleRenderingUpdate` just once for both 
new image
and text paints, via the `m_haveNewCandidate` flag.

Tested by WPTs.

* Source/WebCore/dom/Element.cpp:
(WebCore::Element::intersectionObserverDataIfExists const):
(WebCore::Element::resizeObserverDataIfExists const):
(WebCore::Element::ensureLargestContentfulPaintData):
(WebCore::Element::largestContentfulPaintDataIfExists const):
(WebCore::Element::intersectionObserverDataIfExists): Deleted.
(WebCore::Element::resizeObserverDataIfExists): Deleted.
* Source/WebCore/dom/Element.h:
* Source/WebCore/dom/ElementRareData.cpp:
* Source/WebCore/dom/ElementRareData.h:
(WebCore::ElementRareData::largestContentfulPaintData):
(WebCore::ElementRareData::setLargestContentfulPaintData):
* Source/WebCore/html/HTMLImageElement.cpp:
(WebCore::HTMLImageElement::intersectionObserverDataIfExists const):
(WebCore::HTMLImageElement::intersectionObserverDataIfExists): Deleted.
* Source/WebCore/html/HTMLImageElement.h:
* Source/WebCore/page/LargestContentfulPaintData.cpp:
(WebCore::LargestContentfulPaintData::potentiallyAddLargestContentfulPaintEntry):
(WebCore::LargestContentfulPaintData::generateLargestContentfulPaintEntry):
(WebCore::LargestContentfulPaintData::didLoadImage):
(WebCore::LargestContentfulPaintData::didPaintImage):
(WebCore::LargestContentfulPaintData::didPaintText):
(WebCore::LargestContentfulPaintData::scheduleRenderingUpdateIfNecessary):
* Source/WebCore/page/LargestContentfulPaintData.h:

Canonical link: https://commits.webkit.org/301688@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