Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 8b7bc22a8c879f1a47bd4966fa30b8a4ce3216ed
      
https://github.com/WebKit/WebKit/commit/8b7bc22a8c879f1a47bd4966fa30b8a4ce3216ed
  Author: Antti Koivisto <[email protected]>
  Date:   2023-09-03 (Sun, 03 Sep 2023)

  Changed paths:
    M Source/WebCore/css/typedom/ComputedStylePropertyMapReadOnly.cpp
    M Source/WebCore/rendering/style/StyleCustomPropertyData.cpp
    M Source/WebCore/rendering/style/StyleCustomPropertyData.h
    M Source/WebCore/style/Styleable.cpp

  Log Message:
  -----------
  Allow using longer ancestor chains in StyleCustomPropertyData
https://bugs.webkit.org/show_bug.cgi?id=261025
rdar://114815380

Reviewed by Cameron McCormack.

Currently only one ancestor is allowed. It is typical to have many properties 
defined on :root.
If we have more definitions further down the tree on multiple levels then all 
those properties get
copied and we can get large maps duplicated to many elements. This also makes 
equality comparisons slow.

* Source/WebCore/css/typedom/ComputedStylePropertyMapReadOnly.cpp:
(WebCore::ComputedStylePropertyMapReadOnly::entries const):
* Source/WebCore/rendering/style/StyleCustomPropertyData.cpp:
(WebCore::StyleCustomPropertyData::StyleCustomPropertyData):

If the parent has more than 8 own properties link to it instead of copying it 
even
if it already has a parent.
Also limit the maximum ancestor list size to 4.

(WebCore::StyleCustomPropertyData::get const):
(WebCore::StyleCustomPropertyData::set):

Add some asserts.

(WebCore::StyleCustomPropertyData::operator== const):

Shortcut the equality comparison in case the parents are the same.
Use forEach for the slow path.

(WebCore::StyleCustomPropertyData::forEachInternal const):
(WebCore::StyleCustomPropertyData::forEach const):

Traverse all ancestors.
Add IterationStatus return value so iteration can be broken early.
Add templated traversal that avoid Function<> for internal use.

(WebCore::StyleCustomPropertyData::findKeyAtIndex const):
(WebCore::StyleCustomPropertyData::size const):

We now always track the full size so no need to traverse ancestors for it.

* Source/WebCore/rendering/style/StyleCustomPropertyData.h:
* Source/WebCore/style/Styleable.cpp:
(WebCore::Styleable::updateCSSTransitions const):

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


_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to