diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog index 7017d0ec535dea74bc0723b96bf231bb0be8d028..c91521d291874c6f713492d70579369a2b411b97 100644 --- a/Source/WebCore/ChangeLog +++ b/Source/WebCore/ChangeLog @@ -1,3 +1,33 @@ +2013-09-11 Anders Carlsson + + Stop using deleteAllValues in SVG code + https://bugs.webkit.org/show_bug.cgi?id=121172 + + Reviewed by Antti Koivisto. + + Use OwnPtr for values instead. + + * rendering/svg/RenderSVGResourceClipper.cpp: + (WebCore::RenderSVGResourceClipper::~RenderSVGResourceClipper): + (WebCore::RenderSVGResourceClipper::removeAllClientsFromCache): + (WebCore::RenderSVGResourceClipper::removeClientFromCache): + (WebCore::RenderSVGResourceClipper::applyClippingToContext): + * rendering/svg/RenderSVGResourceClipper.h: + * rendering/svg/RenderSVGResourceFilter.cpp: + (WebCore::RenderSVGResourceFilter::~RenderSVGResourceFilter): + (WebCore::RenderSVGResourceFilter::removeAllClientsFromCache): + (WebCore::RenderSVGResourceFilter::removeClientFromCache): + (WebCore::RenderSVGResourceFilter::applyResource): + (WebCore::RenderSVGResourceFilter::postApplyResource): + (WebCore::RenderSVGResourceFilter::primitiveAttributeChanged): + * rendering/svg/RenderSVGResourceFilter.h: + * rendering/svg/RenderSVGResourceMasker.cpp: + (WebCore::RenderSVGResourceMasker::~RenderSVGResourceMasker): + (WebCore::RenderSVGResourceMasker::removeAllClientsFromCache): + (WebCore::RenderSVGResourceMasker::removeClientFromCache): + (WebCore::RenderSVGResourceMasker::applyResource): + * rendering/svg/RenderSVGResourceMasker.h: + 2013-09-10 Simon Fraser REGRESSION (143483): overflow:hidden doesn't quash big repaints from text-indent: -9999px diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp index 14710033cc383804fc09e53d0cf1fca8c27ac368..57e94bddf954da956584f16c9a8c68c67ee2396a 100644 --- a/Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp @@ -60,20 +60,12 @@ RenderSVGResourceClipper::RenderSVGResourceClipper(SVGClipPathElement* node) RenderSVGResourceClipper::~RenderSVGResourceClipper() { - if (m_clipper.isEmpty()) - return; - - deleteAllValues(m_clipper); - m_clipper.clear(); } void RenderSVGResourceClipper::removeAllClientsFromCache(bool markForInvalidation) { m_clipBoundaries = FloatRect(); - if (!m_clipper.isEmpty()) { - deleteAllValues(m_clipper); - m_clipper.clear(); - } + m_clipper.clear(); markAllClientsForInvalidation(markForInvalidation ? LayoutAndBoundariesInvalidation : ParentOnlyInvalidation); } @@ -81,8 +73,7 @@ void RenderSVGResourceClipper::removeAllClientsFromCache(bool markForInvalidatio void RenderSVGResourceClipper::removeClientFromCache(RenderObject* client, bool markForInvalidation) { ASSERT(client); - if (m_clipper.contains(client)) - delete m_clipper.take(client); + m_clipper.remove(client); markClientForInvalidation(client, markForInvalidation ? BoundariesInvalidation : ParentOnlyInvalidation); } @@ -156,7 +147,7 @@ bool RenderSVGResourceClipper::applyClippingToContext(RenderObject* object, cons { bool missingClipperData = !m_clipper.contains(object); if (missingClipperData) - m_clipper.set(object, new ClipperData); + m_clipper.set(object, createOwned().release()); bool shouldCreateClipData = false; AffineTransform animatedLocalTransform = toSVGClipPathElement(element())->animatedLocalTransform(); diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceClipper.h b/Source/WebCore/rendering/svg/RenderSVGResourceClipper.h index 2277ba44a3b1d9596c77adb66d7f034e062c0008..aab3c2941e9f292b41e17f61f354ab06fddd0183 100644 --- a/Source/WebCore/rendering/svg/RenderSVGResourceClipper.h +++ b/Source/WebCore/rendering/svg/RenderSVGResourceClipper.h @@ -71,7 +71,7 @@ private: void calculateClipContentRepaintRect(); FloatRect m_clipBoundaries; - HashMap m_clipper; + HashMap> m_clipper; }; } diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp index 08d732cba5876daab4452c17d3daa6d452f74ef3..b5b03769b13342f79524426b9c226db2a654c67b 100644 --- a/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp @@ -65,19 +65,11 @@ RenderSVGResourceFilter::RenderSVGResourceFilter(SVGFilterElement* node) RenderSVGResourceFilter::~RenderSVGResourceFilter() { - if (m_filter.isEmpty()) - return; - - deleteAllValues(m_filter); - m_filter.clear(); } void RenderSVGResourceFilter::removeAllClientsFromCache(bool markForInvalidation) { - if (!m_filter.isEmpty()) { - deleteAllValues(m_filter); - m_filter.clear(); - } + m_filter.clear(); markAllClientsForInvalidation(markForInvalidation ? LayoutAndBoundariesInvalidation : ParentOnlyInvalidation); } @@ -90,7 +82,7 @@ void RenderSVGResourceFilter::removeClientFromCache(RenderObject* client, bool m if (filterData->savedContext) filterData->state = FilterData::MarkedForRemoval; else - delete m_filter.take(client); + m_filter.remove(client); } markClientForInvalidation(client, markForInvalidation ? BoundariesInvalidation : ParentOnlyInvalidation); @@ -155,7 +147,7 @@ bool RenderSVGResourceFilter::applyResource(RenderObject* object, RenderStyle*, return false; // Already built, or we're in a cycle, or we're marked for removal. Regardless, just do nothing more now. } - OwnPtr filterData(adoptPtr(new FilterData)); + auto filterData = createOwned(); FloatRect targetBoundingBox = object->objectBoundingBox(); SVGFilterElement* filterElement = toSVGFilterElement(element()); @@ -224,7 +216,7 @@ bool RenderSVGResourceFilter::applyResource(RenderObject* object, RenderStyle*, if (filterData->drawingRegion.isEmpty()) { ASSERT(!m_filter.contains(object)); filterData->savedContext = context; - m_filter.set(object, filterData.leakPtr()); + m_filter.set(object, filterData.release()); return false; } @@ -238,7 +230,7 @@ bool RenderSVGResourceFilter::applyResource(RenderObject* object, RenderStyle*, if (!SVGRenderingContext::createImageBuffer(filterData->drawingRegion, effectiveTransform, sourceGraphic, ColorSpaceLinearRGB, renderingMode)) { ASSERT(!m_filter.contains(object)); filterData->savedContext = context; - m_filter.set(object, filterData.leakPtr()); + m_filter.set(object, filterData.release()); return false; } @@ -254,7 +246,7 @@ bool RenderSVGResourceFilter::applyResource(RenderObject* object, RenderStyle*, context = sourceGraphicContext; ASSERT(!m_filter.contains(object)); - m_filter.set(object, filterData.leakPtr()); + m_filter.set(object, filterData.release()); return true; } @@ -271,7 +263,7 @@ void RenderSVGResourceFilter::postApplyResource(RenderObject* object, GraphicsCo switch (filterData->state) { case FilterData::MarkedForRemoval: - delete m_filter.take(object); + m_filter.remove(object); return; case FilterData::CycleDetected: @@ -338,12 +330,10 @@ FloatRect RenderSVGResourceFilter::resourceBoundingBox(RenderObject* object) void RenderSVGResourceFilter::primitiveAttributeChanged(RenderObject* object, const QualifiedName& attribute) { - HashMap::iterator it = m_filter.begin(); - HashMap::iterator end = m_filter.end(); SVGFilterPrimitiveStandardAttributes* primitve = static_cast(object->node()); - for (; it != end; ++it) { - FilterData* filterData = it->value; + for (auto it = m_filter.begin(), end = m_filter.end(); it != end; ++it) { + const auto &filterData = it->value; if (filterData->state != FilterData::Built) continue; diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceFilter.h b/Source/WebCore/rendering/svg/RenderSVGResourceFilter.h index 97b93043c0876fee54113da3e2ca69c3b36744a0..09fbe2ac8301a8ee673ed31a252d46f20b023fd8 100644 --- a/Source/WebCore/rendering/svg/RenderSVGResourceFilter.h +++ b/Source/WebCore/rendering/svg/RenderSVGResourceFilter.h @@ -93,7 +93,7 @@ public: private: bool fitsInMaximumImageSize(const FloatSize&, FloatSize&); - HashMap m_filter; + HashMap> m_filter; }; inline RenderSVGResourceFilter* toRenderSVGFilter(RenderObject* object) diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp index dc102837b6eeeb29fcbc34efef0eecebc3f84e2f..20ffbd0d3092dc22f59ea18cb230638e21d59a3d 100644 --- a/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp @@ -48,20 +48,12 @@ RenderSVGResourceMasker::RenderSVGResourceMasker(SVGMaskElement* node) RenderSVGResourceMasker::~RenderSVGResourceMasker() { - if (m_masker.isEmpty()) - return; - - deleteAllValues(m_masker); - m_masker.clear(); } void RenderSVGResourceMasker::removeAllClientsFromCache(bool markForInvalidation) { m_maskContentBoundaries = FloatRect(); - if (!m_masker.isEmpty()) { - deleteAllValues(m_masker); - m_masker.clear(); - } + m_masker.clear(); markAllClientsForInvalidation(markForInvalidation ? LayoutAndBoundariesInvalidation : ParentOnlyInvalidation); } @@ -69,9 +61,7 @@ void RenderSVGResourceMasker::removeAllClientsFromCache(bool markForInvalidation void RenderSVGResourceMasker::removeClientFromCache(RenderObject* client, bool markForInvalidation) { ASSERT(client); - - if (m_masker.contains(client)) - delete m_masker.take(client); + m_masker.remove(client); markClientForInvalidation(client, markForInvalidation ? BoundariesInvalidation : ParentOnlyInvalidation); } @@ -84,7 +74,7 @@ bool RenderSVGResourceMasker::applyResource(RenderObject* object, RenderStyle*, bool missingMaskerData = !m_masker.contains(object); if (missingMaskerData) - m_masker.set(object, new MaskerData); + m_masker.set(object, createOwned().release()); MaskerData* maskerData = m_masker.get(object); diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceMasker.h b/Source/WebCore/rendering/svg/RenderSVGResourceMasker.h index a88bb2f84bbe0939e9eba25dd9132a935d55daf0..1331c51be4c0b4a6e64aa3324c955897abc3bd4b 100644 --- a/Source/WebCore/rendering/svg/RenderSVGResourceMasker.h +++ b/Source/WebCore/rendering/svg/RenderSVGResourceMasker.h @@ -61,7 +61,7 @@ private: void calculateMaskContentRepaintRect(); FloatRect m_maskContentBoundaries; - HashMap m_masker; + HashMap> m_masker; }; }