[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