Changeset 54009 in webkit


Ignore:
Timestamp:
Jan 28, 2010 12:27:38 PM (14 years ago)
Author:
Nikolas Zimmermann
Message:

2010-01-28 Nikolas Zimmermann <nzimmermann@rim.com>

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):
Location:
trunk/WebCore
Files:
1 added
17 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r54008 r54009  
     12010-01-28  Nikolas Zimmermann  <nzimmermann@rim.com>
     2
     3        Reviewed by Dirk Schulze.
     4
     5        Save additional memory in SVG*Element classes, by introducing SVGElementRareData
     6        https://bugs.webkit.org/show_bug.cgi?id=34268
     7
     8        Introduce SVGElementRareData, to remove the need to store any members in SVGElement/SVGStyledElement.
     9        This saves some additional MB for the svg-node-count-vs-scroll.xhtml testcase.
     10
     11        SVGElementRareData works just like NodeRareData. Unlike ElementRareData, we're not inheriting from
     12        NodeRareData in SVG, as we don't need all the rare data stored there, unlike Element.
     13
     14        * GNUmakefile.am: Add SVGElementRareData.h to build.
     15        * WebCore.gypi: Ditto.
     16        * WebCore.pro: Ditto.
     17        * WebCore.vcproj/WebCore.vcproj: Ditto.
     18        * WebCore.xcodeproj/project.pbxproj: Ditto.
     19        * dom/Node.cpp: Use Nodes bitfield to keep track wheter a SVGElement has a SVGElementRareData object associated.
     20        (WebCore::Node::Node):
     21        * dom/Node.h: Add m_hasRareSVGData flag, merged with the existing bitfield, 10 bits remaining now.
     22        (WebCore::Node::hasRareSVGData):
     23        * svg/SVGAnimateMotionElement.cpp: SVGElement::instancesForElement() now returns a const-reference to the HashMap instead of copying.
     24        (WebCore::SVGAnimateMotionElement::applyResultsToTarget):
     25        * svg/SVGAnimateTransformElement.cpp: Ditto.
     26        (WebCore::SVGAnimateTransformElement::applyResultsToTarget):
     27        * svg/SVGAnimationElement.cpp: Ditto.
     28        (WebCore::SVGAnimationElement::setTargetAttributeAnimatedValue):
     29        * svg/SVGElement.cpp: Move the element instances HashSet and two cursor-related pointers into SVGElementRareData.
     30        (WebCore::SVGElement::SVGElement):
     31        (WebCore::SVGElement::~SVGElement):
     32        (WebCore::SVGElement::rareSVGData): Modelled just like Node::rareData().
     33        (WebCore::SVGElement::ensureRareSVGData): Dito.
     34        (WebCore::SVGElement::accessDocumentSVGExtensions):
     35        (WebCore::SVGElement::mapInstanceToElement): Route call through SVGElementRareData.
     36        (WebCore::SVGElement::removeInstanceMapping): Ditto.
     37        (WebCore::SVGElement::instancesForElement): Ditto.
     38        (WebCore::SVGElement::setCursorElement): Ditto.
     39        (WebCore::SVGElement::setCursorImageValue): Ditto.
     40        * svg/SVGElement.h:
     41        * svg/SVGElementInstance.cpp: Ditto.
     42        (WebCore::SVGElementInstance::invalidateAllInstancesOfElement):
     43        * svg/SVGElementRareData.h: Added. Based on NodeRareData - works exactly the same.
     44        (WebCore::SVGElementRareData::SVGElementRareData):
     45        (WebCore::SVGElementRareData::rareDataMap):
     46        (WebCore::SVGElementRareData::rareDataFromMap):
     47        (WebCore::SVGElementRareData::elementInstances):
     48        (WebCore::SVGElementRareData::instanceUpdatesBlocked):
     49        (WebCore::SVGElementRareData::setInstanceUpdatesBlocked):
     50        (WebCore::SVGElementRareData::cursorElement):
     51        (WebCore::SVGElementRareData::setCursorElement):
     52        (WebCore::SVGElementRareData::cursorImageValue):
     53        (WebCore::SVGElementRareData::setCursorImageValue):
     54        * svg/SVGStyledElement.cpp: Move m_instancesUpdatesBlocked into SVGElementRareData.
     55        (WebCore::SVGStyledElement::SVGStyledElement):
     56        (WebCore::SVGStyledElement::instanceUpdatesBlocked):
     57        (WebCore::SVGStyledElement::setInstanceUpdatesBlocked):
     58        * svg/SVGStyledElement.h:
     59        * svg/SVGUseElement.cpp: Adapt to element instances changes, now passed as const-reference.
     60        (WebCore::dumpInstanceTree):
     61
    1622010-01-28  Aaron Boodman  <aa@chromium.org>
    263
  • trunk/WebCore/GNUmakefile.am

    r54003 r54009  
    30503050        WebCore/svg/SVGElementInstanceList.cpp \
    30513051        WebCore/svg/SVGElementInstanceList.h \
     3052        WebCore/svg/SVGElementRareData.h \
    30523053        WebCore/svg/SVGEllipseElement.cpp \
    30533054        WebCore/svg/SVGEllipseElement.h \
  • trunk/WebCore/WebCore.gypi

    r54003 r54009  
    33463346            'svg/SVGElementInstanceList.cpp',
    33473347            'svg/SVGElementInstanceList.h',
     3348            'svg/SVGElementRareData.h',
    33483349            'svg/SVGEllipseElement.cpp',
    33493350            'svg/SVGEllipseElement.h',
  • trunk/WebCore/WebCore.pro

    r54003 r54009  
    17631763    svg/SVGElementInstance.h \
    17641764    svg/SVGElementInstanceList.h \
     1765    svg/SVGElementRareData.h \
    17651766    svg/SVGEllipseElement.h \
    17661767    svg/SVGExternalResourcesRequired.h \
  • trunk/WebCore/WebCore.vcproj/WebCore.vcproj

    r54003 r54009  
    4083840838                        </File>
    4083940839                        <File
     40840                                RelativePath="..\svg\SVGElementRareData.h"
     40841                                >
     40842                        </File>
     40843                        <File
    4084040844                                RelativePath="..\svg\SVGEllipseElement.h"
    4084140845                                >
  • trunk/WebCore/WebCore.xcodeproj/project.pbxproj

    r54003 r54009  
    5555                0818AEE20EDB86BC00647B66 /* WMLEventHandlingElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0818AEE00EDB86BC00647B66 /* WMLEventHandlingElement.cpp */; };
    5656                0818AEE30EDB86BC00647B66 /* WMLEventHandlingElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 0818AEE10EDB86BC00647B66 /* WMLEventHandlingElement.h */; };
     57                081AA8DA1111237E002AB06E /* SVGElementRareData.h in Headers */ = {isa = PBXBuildFile; fileRef = 081AA8D91111237E002AB06E /* SVGElementRareData.h */; };
    5758                081D81310EE0E74D00D73689 /* WMLTimerElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 081D812F0EE0E74D00D73689 /* WMLTimerElement.cpp */; };
    5859                081D81320EE0E74D00D73689 /* WMLTimerElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 081D81300EE0E74D00D73689 /* WMLTimerElement.h */; };
     
    53235324                0818AEE00EDB86BC00647B66 /* WMLEventHandlingElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLEventHandlingElement.cpp; sourceTree = "<group>"; };
    53245325                0818AEE10EDB86BC00647B66 /* WMLEventHandlingElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLEventHandlingElement.h; sourceTree = "<group>"; };
     5326                081AA8D91111237E002AB06E /* SVGElementRareData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGElementRareData.h; sourceTree = "<group>"; };
    53255327                081D812F0EE0E74D00D73689 /* WMLTimerElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLTimerElement.cpp; sourceTree = "<group>"; };
    53265328                081D81300EE0E74D00D73689 /* WMLTimerElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLTimerElement.h; sourceTree = "<group>"; };
     
    1385713859                                B22278270D00BF1F0071B782 /* SVGElementInstanceList.h */,
    1385813860                                B22278280D00BF1F0071B782 /* SVGElementInstanceList.idl */,
     13861                                081AA8D91111237E002AB06E /* SVGElementRareData.h */,
    1385913862                                B22278290D00BF1F0071B782 /* SVGEllipseElement.cpp */,
    1386013863                                B222782A0D00BF1F0071B782 /* SVGEllipseElement.h */,
     
    1846318466                                59E842661109E5A2000305AD /* JNIBridgeJSC.h in Headers */,
    1846418467                                E1A1470811102B1500EEC0F3 /* ContainerNodeAlgorithms.h in Headers */,
     18468                                081AA8DA1111237E002AB06E /* SVGElementRareData.h in Headers */,
    1846518469                        );
    1846618470                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/WebCore/dom/Node.cpp

    r53809 r54009  
    423423    , m_areSVGAttributesValid(true)
    424424    , m_synchronizingSVGAttributes(false)
     425    , m_hasRareSVGData(false)
    425426#endif
    426427{
  • trunk/WebCore/dom/Node.h

    r53809 r54009  
    572572   
    573573    bool hasRareData() const { return m_hasRareData; }
    574    
     574#if ENABLE(SVG)
     575    bool hasRareSVGData() const { return m_hasRareSVGData; }
     576#endif
     577
    575578    NodeRareData* rareData() const;
    576579    NodeRareData* ensureRareData();
     
    636639    mutable bool m_areSVGAttributesValid : 1; // Element
    637640    mutable bool m_synchronizingSVGAttributes : 1; // SVGElement
    638 #endif
    639 
    640     // 11 bits remaining
     641    bool m_hasRareSVGData : 1; // SVGElement
     642#endif
     643
     644    // 10 bits remaining
    641645};
    642646
  • trunk/WebCore/svg/SVGAnimateMotionElement.cpp

    r43187 r54009  
    216216   
    217217    // ...except in case where we have additional instances in <use> trees.
    218     HashSet<SVGElementInstance*> instances = targetElement->instancesForElement();
    219     HashSet<SVGElementInstance*>::iterator end = instances.end();
    220     for (HashSet<SVGElementInstance*>::iterator it = instances.begin(); it != end; ++it) {
     218    const HashSet<SVGElementInstance*>& instances = targetElement->instancesForElement();
     219    const HashSet<SVGElementInstance*>::const_iterator end = instances.end();
     220    for (HashSet<SVGElementInstance*>::const_iterator it = instances.begin(); it != end; ++it) {
    221221        SVGElement* shadowTreeElement = (*it)->shadowTreeElement();
    222222        ASSERT(shadowTreeElement);
  • trunk/WebCore/svg/SVGAnimateTransformElement.cpp

    r53879 r54009  
    164164   
    165165    // ...except in case where we have additional instances in <use> trees.
    166     HashSet<SVGElementInstance*> instances = targetElement->instancesForElement();
     166    const HashSet<SVGElementInstance*>& instances = targetElement->instancesForElement();
    167167    RefPtr<SVGTransformList> transformList = transformListFor(targetElement);
    168     HashSet<SVGElementInstance*>::iterator end = instances.end();
    169     for (HashSet<SVGElementInstance*>::iterator it = instances.begin(); it != end; ++it) {
     168    const HashSet<SVGElementInstance*>::const_iterator end = instances.end();
     169    for (HashSet<SVGElementInstance*>::const_iterator it = instances.begin(); it != end; ++it) {
    170170        SVGElement* shadowTreeElement = (*it)->shadowTreeElement();
    171171        ASSERT(shadowTreeElement);
  • trunk/WebCore/svg/SVGAnimationElement.cpp

    r53879 r54009  
    317317   
    318318    // If the target element is used in an <use> instance tree, update that as well.
    319     HashSet<SVGElementInstance*> instances = target->instancesForElement();
    320     HashSet<SVGElementInstance*>::iterator end = instances.end();
    321     for (HashSet<SVGElementInstance*>::iterator it = instances.begin(); it != end; ++it) {
     319    const HashSet<SVGElementInstance*>& instances = target->instancesForElement();
     320    const HashSet<SVGElementInstance*>::const_iterator end = instances.end();
     321    for (HashSet<SVGElementInstance*>::const_iterator it = instances.begin(); it != end; ++it) {
    322322        SVGElement* shadowTreeElement = (*it)->shadowTreeElement();
    323323        ASSERT(shadowTreeElement);
  • trunk/WebCore/svg/SVGElement.cpp

    r53879 r54009  
    4040#include "SVGCursorElement.h"
    4141#include "SVGElementInstance.h"
     42#include "SVGElementRareData.h"
    4243#include "SVGNames.h"
    4344#include "SVGResource.h"
     
    5455SVGElement::SVGElement(const QualifiedName& tagName, Document* document)
    5556    : StyledElement(tagName, document, CreateElementZeroRefCount)
    56     , m_cursorElement(0)
    57     , m_cursorImageValue(0)
    5857{
    5958}
     
    6665SVGElement::~SVGElement()
    6766{
    68     if (m_cursorElement)
    69         m_cursorElement->removeClient(this);
    70     if (m_cursorImageValue)
    71         m_cursorImageValue->removeReferencedElement(this);
     67    if (!hasRareSVGData())
     68        ASSERT(!SVGElementRareData::rareDataMap().contains(this));
     69    else {
     70        SVGElementRareData::SVGElementRareDataMap& rareDataMap = SVGElementRareData::rareDataMap();
     71        SVGElementRareData::SVGElementRareDataMap::iterator it = rareDataMap.find(this);
     72        ASSERT(it != rareDataMap.end());
     73
     74        SVGElementRareData* rareData = it->second;
     75        if (SVGCursorElement* cursorElement = rareData->cursorElement())
     76            cursorElement->removeClient(this);
     77        if (CSSCursorImageValue* cursorImageValue = rareData->cursorImageValue())
     78            cursorImageValue->removeReferencedElement(this);
     79
     80        delete rareData;
     81        rareDataMap.remove(it);
     82    }
     83}
     84
     85SVGElementRareData* SVGElement::rareSVGData() const
     86{
     87    ASSERT(hasRareSVGData());
     88    return SVGElementRareData::rareDataFromMap(this);
     89}
     90
     91SVGElementRareData* SVGElement::ensureRareSVGData()
     92{
     93    if (hasRareSVGData())
     94        return rareSVGData();
     95
     96    ASSERT(!SVGElementRareData::rareDataMap().contains(this));
     97    SVGElementRareData* data = new SVGElementRareData;
     98    SVGElementRareData::rareDataMap().set(this, data);
     99    m_hasRareSVGData = true;
     100    return data;
    72101}
    73102
     
    117146SVGDocumentExtensions* SVGElement::accessDocumentSVGExtensions() const
    118147{
    119 
    120148    // This function is provided for use by SVGAnimatedProperty to avoid
    121149    // global inclusion of Document.h in SVG code.
     
    126154{
    127155    ASSERT(instance);
    128     ASSERT(!m_elementInstances.contains(instance));
    129     m_elementInstances.add(instance);
     156
     157    HashSet<SVGElementInstance*>& instances = ensureRareSVGData()->elementInstances();
     158    ASSERT(!instances.contains(instance));
     159
     160    instances.add(instance);
    130161}
    131162 
     
    133164{
    134165    ASSERT(instance);
    135     ASSERT(m_elementInstances.contains(instance));
    136     m_elementInstances.remove(instance);
    137 }
    138 
    139 HashSet<SVGElementInstance*> SVGElement::instancesForElement() const
    140 {
    141     return m_elementInstances;
     166    ASSERT(hasRareSVGData());
     167
     168    HashSet<SVGElementInstance*>& instances = rareSVGData()->elementInstances();
     169    ASSERT(instances.contains(instance));
     170
     171    instances.remove(instance);
     172}
     173
     174const HashSet<SVGElementInstance*>& SVGElement::instancesForElement() const
     175{
     176    if (!hasRareSVGData()) {
     177        DEFINE_STATIC_LOCAL(HashSet<SVGElementInstance*>, emptyInstances, ());
     178        return emptyInstances;
     179    }
     180    return rareSVGData()->elementInstances();
     181}
     182
     183void SVGElement::setCursorElement(SVGCursorElement* cursorElement)
     184{
     185    ensureRareSVGData()->setCursorElement(cursorElement);
     186}
     187
     188void SVGElement::setCursorImageValue(CSSCursorImageValue* cursorImageValue)
     189{
     190    ensureRareSVGData()->setCursorImageValue(cursorImageValue);
    142191}
    143192
  • trunk/WebCore/svg/SVGElement.h

    r53879 r54009  
    3333    class SVGCursorElement;
    3434    class SVGElementInstance;
     35    class SVGElementRareData;
    3536    class SVGSVGElement;
    3637    class TransformationMatrix;
     
    7475        void setSynchronizedSVGAttributes(bool value) { m_areSVGAttributesValid = value; }
    7576
    76         HashSet<SVGElementInstance*> instancesForElement() const;
     77        const HashSet<SVGElementInstance*>& instancesForElement() const;
    7778
    78         void setCursorElement(SVGCursorElement* cursorElement) { m_cursorElement = cursorElement; }
    79         void setCursorImageValue(CSSCursorImageValue* cursorImageValue) { m_cursorImageValue = cursorImageValue; }
     79        void setCursorElement(SVGCursorElement*);
     80        void setCursorImageValue(CSSCursorImageValue*);
    8081
    8182    protected:
     
    8687        virtual void attributeChanged(Attribute*, bool preserveDecls = false);
    8788        virtual void updateAnimatedSVGAttribute(const QualifiedName&) const;
     89
     90        SVGElementRareData* rareSVGData() const;
     91        SVGElementRareData* ensureRareSVGData();
    8892
    8993    private:
     
    100104
    101105        virtual bool haveLoadedRequiredResources();
    102 
    103         SVGCursorElement* m_cursorElement;
    104         CSSCursorImageValue* m_cursorImageValue;
    105 
    106         HashSet<SVGElementInstance*> m_elementInstances;
    107106    };
    108107
  • trunk/WebCore/svg/SVGElementInstance.cpp

    r53564 r54009  
    9696        return;
    9797
    98     HashSet<SVGElementInstance*> set = element->instancesForElement();
     98    const HashSet<SVGElementInstance*>& set = element->instancesForElement();
    9999    if (set.isEmpty())
    100100        return;
    101101
    102102    // Mark all use elements referencing 'element' for rebuilding
    103     HashSet<SVGElementInstance*>::const_iterator it = set.begin();
    104103    const HashSet<SVGElementInstance*>::const_iterator end = set.end();
    105 
    106     for (; it != end; ++it) {
     104    for (HashSet<SVGElementInstance*>::const_iterator it = set.begin(); it != end; ++it) {
    107105        ASSERT((*it)->correspondingElement() == element);
    108106        (*it)->correspondingUseElement()->invalidateShadowTree();
  • trunk/WebCore/svg/SVGStyledElement.cpp

    r53879 r54009  
    3535#include "SVGElement.h"
    3636#include "SVGElementInstance.h"
     37#include "SVGElementRareData.h"
    3738#include "SVGNames.h"
    3839#include "SVGRenderStyle.h"
     
    5657SVGStyledElement::SVGStyledElement(const QualifiedName& tagName, Document* doc)
    5758    : SVGElement(tagName, doc)
    58     , m_instanceUpdatesBlocked(false)
    5959{
    6060}
     
    306306    SVGElement::detach();
    307307}
    308    
     308
     309bool SVGStyledElement::instanceUpdatesBlocked() const
     310{
     311    return hasRareSVGData() && rareSVGData()->instanceUpdatesBlocked();
     312}
     313
     314void SVGStyledElement::setInstanceUpdatesBlocked(bool value)
     315{
     316    if (hasRareSVGData())
     317        rareSVGData()->setInstanceUpdatesBlocked(value);
     318}
     319
    309320}
    310321
  • trunk/WebCore/svg/SVGStyledElement.h

    r53879 r54009  
    6666        virtual void detach();
    6767
    68         bool instanceUpdatesBlocked() const { return m_instanceUpdatesBlocked; }
    69         void setInstanceUpdatesBlocked(bool value) { m_instanceUpdatesBlocked = value; }
     68        bool instanceUpdatesBlocked() const;
     69        void setInstanceUpdatesBlocked(bool);
    7070
    7171    protected:
     
    7474    private:
    7575        DECLARE_ANIMATED_PROPERTY(SVGStyledElement, HTMLNames::classAttr, String, ClassName, className)
    76         bool m_instanceUpdatesBlocked;
    7776    };
    7877
  • trunk/WebCore/svg/SVGUseElement.cpp

    r53879 r54009  
    356356        text += "  ";
    357357
    358     HashSet<SVGElementInstance*> elementInstances = element->instancesForElement();
     358    const HashSet<SVGElementInstance*>& elementInstances = element->instancesForElement();
    359359    text += String::format("Corresponding element is associated with %i instance(s):\n", elementInstances.size());
    360360
    361     HashSet<SVGElementInstance*>::iterator end = elementInstances.end();
    362     for (HashSet<SVGElementInstance*>::iterator it = elementInstances.begin(); it != end; ++it) {
     361    const HashSet<SVGElementInstance*>::const_iterator end = elementInstances.end();
     362    for (HashSet<SVGElementInstance*>::const_iterator it = elementInstances.begin(); it != end; ++it) {
    363363        for (unsigned int i = 0; i < depth; ++i)
    364364            text += "  ";
Note: See TracChangeset for help on using the changeset viewer.