From 534f3bb5a6990368e8bbf1fba56a48875e0fd94c Mon Sep 17 00:00:00 2001 From: "caio.oliveira@openbossa.org" Date: Mon, 2 Jan 2012 14:07:53 +0000 Subject: [PATCH] Use HashMap in RenderSVGResourceGradient https://bugs.webkit.org/show_bug.cgi?id=75364 Reviewed by Daniel Bates. * rendering/svg/RenderSVGResourceGradient.cpp: (WebCore::RenderSVGResourceGradient::removeAllClientsFromCache): (WebCore::RenderSVGResourceGradient::removeClientFromCache): (WebCore::RenderSVGResourceGradient::applyResource): avoid looking up the hash twice by using HashMap::add(). * rendering/svg/RenderSVGResourceGradient.h: rename m_gradient to m_gradientMap. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@103905 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- Source/WebCore/ChangeLog | 14 +++++++++ .../rendering/svg/RenderSVGResourceGradient.cpp | 33 ++++++---------------- .../rendering/svg/RenderSVGResourceGradient.h | 3 +- 3 files changed, 23 insertions(+), 27 deletions(-) diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog index 223248b..093cfc5 100644 --- a/Source/WebCore/ChangeLog +++ b/Source/WebCore/ChangeLog @@ -1,3 +1,17 @@ +2011-12-29 Caio Marcelo de Oliveira Filho + + Use HashMap in RenderSVGResourceGradient + https://bugs.webkit.org/show_bug.cgi?id=75364 + + Reviewed by Daniel Bates. + + * rendering/svg/RenderSVGResourceGradient.cpp: + (WebCore::RenderSVGResourceGradient::removeAllClientsFromCache): + (WebCore::RenderSVGResourceGradient::removeClientFromCache): + (WebCore::RenderSVGResourceGradient::applyResource): avoid looking + up the hash twice by using HashMap::add(). + * rendering/svg/RenderSVGResourceGradient.h: rename m_gradient to m_gradientMap. + 2012-01-02 Tor Arne Vestbø [Qt] Fix qmake warning about unescaped backslashes diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp index b5373e4..66d454b 100644 --- a/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp @@ -44,22 +44,9 @@ RenderSVGResourceGradient::RenderSVGResourceGradient(SVGGradientElement* node) { } -RenderSVGResourceGradient::~RenderSVGResourceGradient() -{ - if (m_gradient.isEmpty()) - return; - - deleteAllValues(m_gradient); - m_gradient.clear(); -} - void RenderSVGResourceGradient::removeAllClientsFromCache(bool markForInvalidation) { - if (!m_gradient.isEmpty()) { - deleteAllValues(m_gradient); - m_gradient.clear(); - } - + m_gradientMap.clear(); m_shouldCollectGradientAttributes = true; markAllClientsForInvalidation(markForInvalidation ? RepaintInvalidation : ParentOnlyInvalidation); } @@ -67,10 +54,7 @@ void RenderSVGResourceGradient::removeAllClientsFromCache(bool markForInvalidati void RenderSVGResourceGradient::removeClientFromCache(RenderObject* client, bool markForInvalidation) { ASSERT(client); - - if (m_gradient.contains(client)) - delete m_gradient.take(client); - + m_gradientMap.remove(client); markClientForInvalidation(client, markForInvalidation ? RepaintInvalidation : ParentOnlyInvalidation); } @@ -168,15 +152,15 @@ bool RenderSVGResourceGradient::applyResource(RenderObject* object, RenderStyle* if (gradientUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX && objectBoundingBox.isEmpty()) return false; - if (!m_gradient.contains(object)) - m_gradient.set(object, new GradientData); + OwnPtr& gradientData = m_gradientMap.add(object, nullptr).first->second; + if (!gradientData) + gradientData = adoptPtr(new GradientData); - GradientData* gradientData = m_gradient.get(object); bool isPaintingText = resourceMode & ApplyToTextMode; // Create gradient object if (!gradientData->gradient) { - buildGradient(gradientData); + buildGradient(gradientData.get()); // CG platforms will handle the gradient space transform for text after applying the // resource, so don't apply it here. For non-CG platforms, we want the text bounding @@ -240,9 +224,8 @@ void RenderSVGResourceGradient::postApplyResource(RenderObject* object, Graphics if (resourceMode & ApplyToTextMode) { #if USE(CG) // CG requires special handling for gradient on text - if (m_savedContext && m_gradient.contains(object)) { - GradientData* gradientData = m_gradient.get(object); - + GradientData* gradientData; + if (m_savedContext && gradientData = m_gradientMap.get(object)) { // Restore on-screen drawing context context = m_savedContext; m_savedContext = 0; diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceGradient.h b/Source/WebCore/rendering/svg/RenderSVGResourceGradient.h index b7e780c..d30a6b3 100644 --- a/Source/WebCore/rendering/svg/RenderSVGResourceGradient.h +++ b/Source/WebCore/rendering/svg/RenderSVGResourceGradient.h @@ -44,7 +44,6 @@ class GraphicsContext; class RenderSVGResourceGradient : public RenderSVGResourceContainer { public: RenderSVGResourceGradient(SVGGradientElement*); - virtual ~RenderSVGResourceGradient(); virtual void removeAllClientsFromCache(bool markForInvalidation = true); virtual void removeClientFromCache(RenderObject*, bool markForInvalidation = true); @@ -65,7 +64,7 @@ protected: private: bool m_shouldCollectGradientAttributes : 1; - HashMap m_gradient; + HashMap > m_gradientMap; #if USE(CG) GraphicsContext* m_savedContext; -- 2.7.4