In bug 238345 I plan to sort deferred properties after normal properties, since they cascade in a special way. Something similar could be done for shorthands. StyleBuilder.cpp does something like applyProperties(firstCSSProperty, lastHighPriorityProperty); applyProperties(firstLowPriorityProperty, lastCSSProperty); inline void Builder::applyPropertiesImpl(int firstProperty, int lastProperty) { for (int id = firstProperty; id <= lastProperty; ++id) { CSSPropertyID propertyID = static_cast<CSSPropertyID>(id); if (!m_cascade.hasProperty(propertyID)) continue; Currently, shorthand properties are mixed among longhands, so they are iterated, but hasProperty() will be false. Then they are wasting some memory in PropertyCascade.h: Property m_properties[numCSSProperties + 2]; std::bitset<numCSSProperties + 2> m_propertyIsPresent; So I think CSSPropertyID could be sorted as such: 1. Special meaning (CSSPropertyInvalid and CSSPropertyCustom) 2. High priority longhands 3. Low priority longhands 4. Deferred longhands 5. Shorthands About a 15-20% of the properties seem to be shorthands, so it may be worth trying.
<rdar://problem/91712874>
Created attachment 458446 [details] Patch
Created attachment 458509 [details] Patch
Committed r293622 (250128@main): <https://commits.webkit.org/250128@main> All reviewed patches have been landed. Closing bug and clearing flags on attachment 458509 [details].