[webkit-changes] [WebKit/WebKit] 00c545: Reduce build times by refactoring ElementIterator....
Jer Noble
noreply at github.com
Sun Feb 26 12:54:42 PST 2023
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 00c54513827af31886cebc6cb7dbd89b6ab72fa1
https://github.com/WebKit/WebKit/commit/00c54513827af31886cebc6cb7dbd89b6ab72fa1
Author: Jer Noble <jer.noble at apple.com>
Date: 2023-02-26 (Sun, 26 Feb 2023)
Changed paths:
M Source/WebCore/Headers.cmake
M Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp
M Source/WebCore/Modules/indexeddb/IDBTransaction.cpp
M Source/WebCore/Modules/model-element/HTMLModelElement.cpp
M Source/WebCore/Modules/remoteplayback/RemotePlayback.cpp
M Source/WebCore/Modules/webaudio/AudioWorkletGlobalScope.cpp
M Source/WebCore/Sources.txt
M Source/WebCore/WebCore.xcodeproj/project.pbxproj
M Source/WebCore/accessibility/AXObjectCache.cpp
M Source/WebCore/accessibility/AccessibilityNodeObject.cpp
M Source/WebCore/accessibility/AccessibilityObject.cpp
M Source/WebCore/accessibility/AccessibilityObject.h
M Source/WebCore/accessibility/AccessibilityObjectInterface.h
M Source/WebCore/accessibility/AccessibilityRenderObject.cpp
M Source/WebCore/accessibility/AccessibilitySVGRoot.cpp
M Source/WebCore/accessibility/AccessibilityTable.cpp
M Source/WebCore/accessibility/mac/AccessibilityObjectMac.mm
M Source/WebCore/animation/KeyframeEffect.cpp
M Source/WebCore/bindings/js/JSAbortSignalCustom.cpp
M Source/WebCore/bindings/js/JSAttrCustom.cpp
M Source/WebCore/bindings/js/JSCSSRuleCustom.cpp
M Source/WebCore/bindings/js/JSCSSRuleCustom.h
M Source/WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp
M Source/WebCore/bindings/js/JSCanvasRenderingContext2DCustom.cpp
M Source/WebCore/bindings/js/JSDOMQuadCustom.cpp
M Source/WebCore/bindings/js/JSDOMWindowCustom.cpp
M Source/WebCore/bindings/js/JSDocumentCustom.cpp
M Source/WebCore/bindings/js/JSFetchEventCustom.cpp
M Source/WebCore/bindings/js/JSHTMLAllCollectionCustom.cpp
M Source/WebCore/bindings/js/JSHTMLCanvasElementCustom.cpp
M Source/WebCore/bindings/js/JSHTMLCollectionCustom.cpp
M Source/WebCore/bindings/js/JSHTMLTemplateElementCustom.cpp
M Source/WebCore/bindings/js/JSIDBCursorCustom.cpp
M Source/WebCore/bindings/js/JSIntersectionObserverCustom.cpp
M Source/WebCore/bindings/js/JSIntersectionObserverEntryCustom.cpp
M Source/WebCore/bindings/js/JSMediaListCustom.h
M Source/WebCore/bindings/js/JSMessageChannelCustom.cpp
M Source/WebCore/bindings/js/JSMessagePortCustom.cpp
M Source/WebCore/bindings/js/JSNavigatorCustom.cpp
M Source/WebCore/bindings/js/JSNodeCustom.cpp
M Source/WebCore/bindings/js/JSNodeCustom.h
A Source/WebCore/bindings/js/JSNodeCustomInlines.h
M Source/WebCore/bindings/js/JSNodeIteratorCustom.cpp
M Source/WebCore/bindings/js/JSOffscreenCanvasRenderingContext2DCustom.cpp
M Source/WebCore/bindings/js/JSPaintRenderingContext2DCustom.cpp
M Source/WebCore/bindings/js/JSResizeObserverEntryCustom.cpp
M Source/WebCore/bindings/js/JSSVGViewSpecCustom.cpp
M Source/WebCore/bindings/js/JSServiceWorkerGlobalScopeCustom.cpp
M Source/WebCore/bindings/js/JSStyleSheetCustom.cpp
M Source/WebCore/bindings/js/JSStyleSheetCustom.h
M Source/WebCore/bindings/js/JSTextTrackCueCustom.cpp
M Source/WebCore/bindings/js/JSTreeWalkerCustom.cpp
M Source/WebCore/bindings/js/JSUndoItemCustom.cpp
M Source/WebCore/bindings/js/JSWebGL2RenderingContextCustom.cpp
M Source/WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp
M Source/WebCore/bindings/js/JSWebXRSessionCustom.cpp
M Source/WebCore/bindings/js/JSWorkerGlobalScopeCustom.cpp
M Source/WebCore/bindings/js/JSWorkerNavigatorCustom.cpp
M Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp
M Source/WebCore/bindings/js/JSXPathResultCustom.cpp
M Source/WebCore/bindings/js/WebCoreOpaqueRoot.h
A Source/WebCore/bindings/js/WebCoreOpaqueRootInlines.h
M Source/WebCore/bindings/scripts/CodeGenerator.pm
M Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
M Source/WebCore/bindings/scripts/test/JS/JSTestGenerateAddOpaqueRoot.cpp
M Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp
M Source/WebCore/css/SelectorChecker.cpp
M Source/WebCore/dom/AllDescendantsCollection.cpp
M Source/WebCore/dom/AllDescendantsCollection.h
M Source/WebCore/dom/ChildNodeList.cpp
M Source/WebCore/dom/ClassCollection.cpp
M Source/WebCore/dom/CollectionIndexCache.h
A Source/WebCore/dom/CollectionIndexCacheInlines.h
M Source/WebCore/dom/ContainerNode.cpp
M Source/WebCore/dom/ContainerNodeAlgorithms.cpp
M Source/WebCore/dom/CustomElementRegistry.cpp
M Source/WebCore/dom/Document.cpp
M Source/WebCore/dom/Element.cpp
M Source/WebCore/dom/ElementAncestorIterator.h
A Source/WebCore/dom/ElementAncestorIteratorInlines.h
M Source/WebCore/dom/ElementChildIterator.h
A Source/WebCore/dom/ElementChildIteratorInlines.h
M Source/WebCore/dom/ElementIterator.h
A Source/WebCore/dom/ElementIteratorInlines.h
M Source/WebCore/dom/FragmentDirectiveRangeFinder.cpp
M Source/WebCore/dom/ImageOverlay.cpp
M Source/WebCore/dom/LiveNodeList.h
A Source/WebCore/dom/LiveNodeListInlines.h
M Source/WebCore/dom/MutationObserverRegistration.cpp
M Source/WebCore/dom/MutationRecord.cpp
M Source/WebCore/dom/NameNodeList.cpp
M Source/WebCore/dom/NameNodeList.h
M Source/WebCore/dom/Node.cpp
M Source/WebCore/dom/NodeRareData.h
A Source/WebCore/dom/NodeRareDataInlines.h
M Source/WebCore/dom/Range.cpp
M Source/WebCore/dom/SelectorQuery.cpp
M Source/WebCore/dom/SlotAssignment.cpp
M Source/WebCore/dom/StaticRange.cpp
M Source/WebCore/dom/TagCollection.cpp
M Source/WebCore/dom/TreeScope.cpp
M Source/WebCore/dom/TypedElementDescendantIterator.h
A Source/WebCore/dom/TypedElementDescendantIteratorInlines.h
M Source/WebCore/dom/VisitedLinkState.cpp
M Source/WebCore/editing/ApplyStyleCommand.cpp
M Source/WebCore/editing/ChangeListTypeCommand.cpp
M Source/WebCore/editing/DeleteSelectionCommand.cpp
M Source/WebCore/editing/Editor.cpp
M Source/WebCore/editing/FrameSelection.cpp
M Source/WebCore/editing/ReplaceSelectionCommand.cpp
M Source/WebCore/editing/TextManipulationController.cpp
M Source/WebCore/editing/cocoa/DataDetection.mm
M Source/WebCore/editing/cocoa/WebContentReaderCocoa.mm
M Source/WebCore/editing/markup.cpp
M Source/WebCore/html/BaseDateAndTimeInputType.cpp
M Source/WebCore/html/CachedHTMLCollection.h
A Source/WebCore/html/CachedHTMLCollectionInlines.h
M Source/WebCore/html/CollectionTraversal.h
A Source/WebCore/html/CollectionTraversalInlines.h
M Source/WebCore/html/CollectionType.h
M Source/WebCore/html/ColorInputType.cpp
M Source/WebCore/html/FileInputType.cpp
M Source/WebCore/html/FormAssociatedCustomElement.cpp
A Source/WebCore/html/FormAssociatedElement.cpp
M Source/WebCore/html/FormAssociatedElement.h
M Source/WebCore/html/FormController.cpp
M Source/WebCore/html/FormListedElement.cpp
M Source/WebCore/html/GenericCachedHTMLCollection.cpp
M Source/WebCore/html/GenericCachedHTMLCollection.h
M Source/WebCore/html/HTMLAllCollection.cpp
M Source/WebCore/html/HTMLAllCollection.h
M Source/WebCore/html/HTMLCanvasElement.cpp
M Source/WebCore/html/HTMLCollection.cpp
M Source/WebCore/html/HTMLCollection.h
A Source/WebCore/html/HTMLCollectionInlines.h
M Source/WebCore/html/HTMLDataListElement.cpp
M Source/WebCore/html/HTMLDataListElement.h
M Source/WebCore/html/HTMLDetailsElement.cpp
M Source/WebCore/html/HTMLDialogElement.cpp
M Source/WebCore/html/HTMLDocument.cpp
M Source/WebCore/html/HTMLElement.cpp
M Source/WebCore/html/HTMLEmbedElement.cpp
M Source/WebCore/html/HTMLFieldSetElement.cpp
M Source/WebCore/html/HTMLFormControlsCollection.cpp
M Source/WebCore/html/HTMLFormControlsCollection.h
M Source/WebCore/html/HTMLFormElement.cpp
M Source/WebCore/html/HTMLImageElement.cpp
M Source/WebCore/html/HTMLInputElement.cpp
M Source/WebCore/html/HTMLLIElement.cpp
M Source/WebCore/html/HTMLMapElement.cpp
M Source/WebCore/html/HTMLMediaElement.cpp
M Source/WebCore/html/HTMLMenuElement.cpp
M Source/WebCore/html/HTMLNameCollection.cpp
M Source/WebCore/html/HTMLNameCollection.h
A Source/WebCore/html/HTMLNameCollectionInlines.h
M Source/WebCore/html/HTMLObjectElement.cpp
M Source/WebCore/html/HTMLOptGroupElement.cpp
M Source/WebCore/html/HTMLOptionElement.cpp
M Source/WebCore/html/HTMLOptionsCollection.cpp
M Source/WebCore/html/HTMLOptionsCollection.h
A Source/WebCore/html/HTMLOptionsCollectionInlines.h
M Source/WebCore/html/HTMLPictureElement.cpp
M Source/WebCore/html/HTMLPlugInImageElement.cpp
M Source/WebCore/html/HTMLSelectElement.cpp
M Source/WebCore/html/HTMLTableElement.cpp
M Source/WebCore/html/HTMLTablePartElement.cpp
M Source/WebCore/html/HTMLTableRowsCollection.cpp
M Source/WebCore/html/HTMLTextAreaElement.cpp
M Source/WebCore/html/HTMLTextFormControlElement.cpp
M Source/WebCore/html/LabelsNodeList.cpp
M Source/WebCore/html/LinkIconCollector.cpp
M Source/WebCore/html/MediaDocument.cpp
M Source/WebCore/html/RadioInputType.cpp
M Source/WebCore/html/RadioNodeList.cpp
M Source/WebCore/html/RangeInputType.cpp
M Source/WebCore/html/TextFieldInputType.cpp
M Source/WebCore/html/ValidatedFormListedElement.cpp
M Source/WebCore/html/ValidatedFormListedElement.h
M Source/WebCore/html/canvas/WebGL2RenderingContext.cpp
M Source/WebCore/html/canvas/WebGLFramebuffer.cpp
M Source/WebCore/html/canvas/WebGLProgram.cpp
M Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp
M Source/WebCore/html/canvas/WebGLTransformFeedback.cpp
M Source/WebCore/html/canvas/WebGLVertexArrayObjectBase.cpp
M Source/WebCore/html/parser/HTMLDocumentParserFastPath.cpp
M Source/WebCore/html/shadow/MediaControlTextTrackContainerElement.cpp
M Source/WebCore/html/track/VTTRegion.cpp
M Source/WebCore/inspector/InspectorAuditAccessibilityObject.cpp
M Source/WebCore/inspector/WebInjectedScriptHost.cpp
M Source/WebCore/inspector/agents/InspectorCSSAgent.cpp
M Source/WebCore/loader/DocumentLoader.cpp
M Source/WebCore/loader/cache/CachedFont.cpp
M Source/WebCore/loader/cache/CachedSVGFont.cpp
M Source/WebCore/mathml/MathMLPresentationElement.cpp
M Source/WebCore/page/DragController.cpp
M Source/WebCore/page/ImageAnalysisQueue.cpp
M Source/WebCore/page/InteractionRegion.cpp
M Source/WebCore/page/IntersectionObserver.cpp
M Source/WebCore/page/ModalContainerObserver.cpp
M Source/WebCore/page/PageConsoleClient.cpp
M Source/WebCore/page/ResizeObserver.cpp
M Source/WebCore/page/TextIndicator.cpp
M Source/WebCore/page/mac/ImageOverlayControllerMac.mm
M Source/WebCore/page/scrolling/ScrollSnapOffsetsInfo.cpp
M Source/WebCore/rendering/AttachmentLayout.mm
M Source/WebCore/rendering/EventRegion.cpp
M Source/WebCore/rendering/RenderElement.cpp
M Source/WebCore/rendering/RenderObject.cpp
M Source/WebCore/rendering/RenderTheme.cpp
M Source/WebCore/rendering/RenderThemeIOS.mm
M Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp
M Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp
M Source/WebCore/rendering/svg/SVGRenderSupport.cpp
M Source/WebCore/style/ChildChangeInvalidation.cpp
M Source/WebCore/style/ClassChangeInvalidation.cpp
M Source/WebCore/style/HasSelectorFilter.cpp
M Source/WebCore/style/IdChangeInvalidation.cpp
M Source/WebCore/style/PseudoClassChangeInvalidation.cpp
M Source/WebCore/style/StyleBuilderCustom.h
M Source/WebCore/style/StyleInvalidator.cpp
M Source/WebCore/style/StyleScope.cpp
M Source/WebCore/style/StyleTreeResolver.cpp
M Source/WebCore/svg/SVGAltGlyphDefElement.cpp
M Source/WebCore/svg/SVGAnimateMotionElement.cpp
M Source/WebCore/svg/SVGElement.cpp
M Source/WebCore/svg/SVGFEComponentTransferElement.cpp
M Source/WebCore/svg/SVGFELightElement.cpp
M Source/WebCore/svg/SVGFontFaceElement.cpp
M Source/WebCore/svg/SVGFontFaceSrcElement.cpp
M Source/WebCore/svg/SVGGradientElement.cpp
M Source/WebCore/svg/SVGSVGElement.cpp
M Source/WebCore/svg/SVGSwitchElement.cpp
M Source/WebCore/svg/SVGToOTFFontConversion.cpp
M Source/WebCore/svg/SVGUseElement.cpp
M Source/WebCore/svg/animation/SMILTimeContainer.cpp
M Source/WebCore/svg/graphics/SVGImage.cpp
M Source/WebCore/svg/graphics/filters/SVGFilter.cpp
M Source/WebCore/xml/parser/XMLDocumentParser.cpp
M Source/WebKit/WebProcess/Automation/WebAutomationSessionProxy.cpp
M Source/WebKit/WebProcess/FullScreen/WebFullScreenManager.cpp
M Source/WebKit/WebProcess/InjectedBundle/API/glib/WebKitWebHitTestResult.cpp
M Source/WebKit/WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMPrivateGtk.cpp
M Source/WebKit/WebProcess/WebPage/WebFrame.cpp
M Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm
M Source/WebKitLegacy/mac/DOM/DOMHTML.mm
M Source/WebKitLegacy/mac/DOM/DOMHTMLAreaElement.mm
M Source/WebKitLegacy/mac/DOM/DOMHTMLButtonElement.mm
M Source/WebKitLegacy/mac/DOM/DOMHTMLDListElement.mm
M Source/WebKitLegacy/mac/DOM/DOMHTMLDirectoryElement.mm
M Source/WebKitLegacy/mac/DOM/DOMHTMLElement.mm
M Source/WebKitLegacy/mac/DOM/DOMHTMLFormElement.mm
M Source/WebKitLegacy/mac/DOM/DOMHTMLFrameElement.mm
M Source/WebKitLegacy/mac/DOM/DOMHTMLHRElement.mm
M Source/WebKitLegacy/mac/DOM/DOMHTMLImageElement.mm
M Source/WebKitLegacy/mac/DOM/DOMHTMLInputElement.mm
M Source/WebKitLegacy/mac/DOM/DOMHTMLLinkElement.mm
M Source/WebKitLegacy/mac/DOM/DOMHTMLMarqueeElement.mm
M Source/WebKitLegacy/mac/DOM/DOMHTMLMediaElement.mm
M Source/WebKitLegacy/mac/DOM/DOMHTMLMenuElement.mm
M Source/WebKitLegacy/mac/DOM/DOMHTMLOListElement.mm
M Source/WebKitLegacy/mac/DOM/DOMHTMLObjectElement.mm
M Source/WebKitLegacy/mac/DOM/DOMHTMLOptGroupElement.mm
M Source/WebKitLegacy/mac/DOM/DOMHTMLOptionElement.mm
M Source/WebKitLegacy/mac/DOM/DOMHTMLPreElement.mm
M Source/WebKitLegacy/mac/DOM/DOMHTMLScriptElement.mm
M Source/WebKitLegacy/mac/DOM/DOMHTMLSelectElement.mm
M Source/WebKitLegacy/mac/DOM/DOMHTMLTableCellElement.mm
M Source/WebKitLegacy/mac/DOM/DOMHTMLTextAreaElement.mm
M Source/WebKitLegacy/mac/DOM/DOMHTMLUListElement.mm
M Source/WebKitLegacy/mac/DOM/DOMHTMLVideoElement.mm
M Source/WebKitLegacy/mac/DOM/DOMNode.mm
Log Message:
-----------
Reduce build times by refactoring ElementIterator.h and friends
https://bugs.webkit.org/show_bug.cgi?id=252107
Reviewed by Simon Fraser.
ElementIterator.h is a common cause of ElementInlines.h being unnecessarily included. A common
strategy to mitigate this kind of header include pattern is to move the implementations of inlined
methods into an ElementIteratorInlines.h file, and include ElementInlines.h from that file instead.
This allows ElementIterator.h to be included by files who need to reference the type itself, but
don't need to call methods of that type. (Or at least, not the inlined methods).
Howevwer, this spawned a hydra-like situation where moving inlined methods into an Inlines.h file
caused downstream headers with their own inlines to pull in this new Inlines.h file, which is
mitigated by moving those inlined methods into their own Inlines.h file, and so on ad nauseum.
Build times are improved minorly by this change; the number of times ElementInlines.h is included in
a Unified Build of WebCore dropped from 220 to 180, the cost of including ElementIterator.h dropped
by about 80%, the number of times it is included dropped from 113 to 106, but many files (about 90)
do end up needing to include various *IteratorInlines.h headers, which limits the savings to an extent.
Canonical link: https://commits.webkit.org/260856@main
More information about the webkit-changes
mailing list