Skip to content
  • zimmermann@webkit.org's avatar
    2010-01-28 Nikolas Zimmermann <nzimmermann@rim.com> · 6b47683b
    zimmermann@webkit.org authored
            Reviewed by Dirk Schulze.
    
            Save additional memory in SVG*Element classes, by introducing SVGElementRareData
            https://bugs.webkit.org/show_bug.cgi?id=34268
    
            Introduce SVGElementRareData, to remove the need to store any members in SVGElement/SVGStyledElement.
            This saves some additional MB for the svg-node-count-vs-scroll.xhtml testcase.
    
            SVGElementRareData works just like NodeRareData. Unlike ElementRareData, we're not inheriting from
            NodeRareData in SVG, as we don't need all the rare data stored there, unlike Element.
    
            * GNUmakefile.am: Add SVGElementRareData.h to build.
            * WebCore.gypi: Ditto.
            * WebCore.pro: Ditto.
            * WebCore.vcproj/WebCore.vcproj: Ditto.
            * WebCore.xcodeproj/project.pbxproj: Ditto.
            * dom/Node.cpp: Use Nodes bitfield to keep track wheter a SVGElement has a SVGElementRareData object associated.
            (WebCore::Node::Node):
            * dom/Node.h: Add m_hasRareSVGData flag, merged with the existing bitfield, 10 bits remaining now.
            (WebCore::Node::hasRareSVGData):
            * svg/SVGAnimateMotionElement.cpp: SVGElement::instancesForElement() now returns a const-reference to the HashMap instead of copying.
            (WebCore::SVGAnimateMotionElement::applyResultsToTarget):
            * svg/SVGAnimateTransformElement.cpp: Ditto.
            (WebCore::SVGAnimateTransformElement::applyResultsToTarget):
            * svg/SVGAnimationElement.cpp: Ditto.
            (WebCore::SVGAnimationElement::setTargetAttributeAnimatedValue):
            * svg/SVGElement.cpp: Move the element instances HashSet and two cursor-related pointers into SVGElementRareData.
            (WebCore::SVGElement::SVGElement):
            (WebCore::SVGElement::~SVGElement):
            (WebCore::SVGElement::rareSVGData): Modelled just like Node::rareData().
            (WebCore::SVGElement::ensureRareSVGData): Dito.
            (WebCore::SVGElement::accessDocumentSVGExtensions):
            (WebCore::SVGElement::mapInstanceToElement): Route call through SVGElementRareData.
            (WebCore::SVGElement::removeInstanceMapping): Ditto.
            (WebCore::SVGElement::instancesForElement): Ditto.
            (WebCore::SVGElement::setCursorElement): Ditto.
            (WebCore::SVGElement::setCursorImageValue): Ditto.
            * svg/SVGElement.h:
            * svg/SVGElementInstance.cpp: Ditto.
            (WebCore::SVGElementInstance::invalidateAllInstancesOfElement):
            * svg/SVGElementRareData.h: Added. Based on NodeRareData - works exactly the same.
            (WebCore::SVGElementRareData::SVGElementRareData):
            (WebCore::SVGElementRareData::rareDataMap):
            (WebCore::SVGElementRareData::rareDataFromMap):
            (WebCore::SVGElementRareData::elementInstances):
            (WebCore::SVGElementRareData::instanceUpdatesBlocked):
            (WebCore::SVGElementRareData::setInstanceUpdatesBlocked):
            (WebCore::SVGElementRareData::cursorElement):
            (WebCore::SVGElementRareData::setCursorElement):
            (WebCore::SVGElementRareData::cursorImageValue):
            (WebCore::SVGElementRareData::setCursorImageValue):
            * svg/SVGStyledElement.cpp: Move m_instancesUpdatesBlocked into SVGElementRareData.
            (WebCore::SVGStyledElement::SVGStyledElement):
            (WebCore::SVGStyledElement::instanceUpdatesBlocked):
            (WebCore::SVGStyledElement::setInstanceUpdatesBlocked):
            * svg/SVGStyledElement.h:
            * svg/SVGUseElement.cpp: Adapt to element instances changes, now passed as const-reference.
            (WebCore::dumpInstanceTree):
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@54009 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    6b47683b