-
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