Title: [149684] trunk/Source/WebCore
Revision
149684
Author
[email protected]
Date
2013-05-07 11:42:52 -0700 (Tue, 07 May 2013)

Log Message

Use OwnPtr instead of deleteAllValues in SVGResourcesCache
https://bugs.webkit.org/show_bug.cgi?id=115729

Reviewed by Benjamin Poulain.

* rendering/svg/SVGResourcesCache.cpp:
(WebCore::SVGResourcesCache::~SVGResourcesCache): Removed call to deleteAllValues.
(WebCore::SVGResourcesCache::addResourcesFromRenderObject): Use adoptPtr and release
to create new SVGResources object.
(WebCore::SVGResourcesCache::removeResourcesFromRenderObject): Use take to remove
the SVGResources from the map rather than a get combined with delete/take.
(WebCore::SVGResourcesCache::cachedResourcesForRenderObject): Removed unneeded
call to contains, since get already returns 0 if there is no item in the map.
(WebCore::SVGResourcesCache::resourceDestroyed): Use typedef for the map type so
we don't have to repeat the type.

* rendering/svg/SVGResourcesCache.h: Added typedef CacheMap, and changed value
type to OwnPtr.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (149683 => 149684)


--- trunk/Source/WebCore/ChangeLog	2013-05-07 18:30:19 UTC (rev 149683)
+++ trunk/Source/WebCore/ChangeLog	2013-05-07 18:42:52 UTC (rev 149684)
@@ -1,3 +1,24 @@
+2013-05-07  Darin Adler  <[email protected]>
+
+        Use OwnPtr instead of deleteAllValues in SVGResourcesCache
+        https://bugs.webkit.org/show_bug.cgi?id=115729
+
+        Reviewed by Benjamin Poulain.
+
+        * rendering/svg/SVGResourcesCache.cpp:
+        (WebCore::SVGResourcesCache::~SVGResourcesCache): Removed call to deleteAllValues.
+        (WebCore::SVGResourcesCache::addResourcesFromRenderObject): Use adoptPtr and release
+        to create new SVGResources object.
+        (WebCore::SVGResourcesCache::removeResourcesFromRenderObject): Use take to remove
+        the SVGResources from the map rather than a get combined with delete/take.
+        (WebCore::SVGResourcesCache::cachedResourcesForRenderObject): Removed unneeded
+        call to contains, since get already returns 0 if there is no item in the map.
+        (WebCore::SVGResourcesCache::resourceDestroyed): Use typedef for the map type so
+        we don't have to repeat the type.
+
+        * rendering/svg/SVGResourcesCache.h: Added typedef CacheMap, and changed value
+        type to OwnPtr.
+
 2013-05-07  Anders Carlsson  <[email protected]>
 
         REGRESSION(r149647): Assertion failure in LocalStorageDatabaseTracker::setLocalStorageDirectoryInternal

Modified: trunk/Source/WebCore/rendering/svg/SVGResourcesCache.cpp (149683 => 149684)


--- trunk/Source/WebCore/rendering/svg/SVGResourcesCache.cpp	2013-05-07 18:30:19 UTC (rev 149683)
+++ trunk/Source/WebCore/rendering/svg/SVGResourcesCache.cpp	2013-05-07 18:42:52 UTC (rev 149684)
@@ -36,7 +36,6 @@
 
 SVGResourcesCache::~SVGResourcesCache()
 {
-    deleteAllValues(m_cache);
 }
 
 void SVGResourcesCache::addResourcesFromRenderObject(RenderObject* object, const RenderStyle* style)
@@ -49,14 +48,12 @@
     ASSERT(svgStyle);
 
     // Build a list of all resources associated with the passed RenderObject
-    SVGResources* resources = new SVGResources;
-    if (!resources->buildCachedResources(object, svgStyle)) {
-        delete resources;
+    OwnPtr<SVGResources> newResources = adoptPtr(new SVGResources);
+    if (!newResources->buildCachedResources(object, svgStyle))
         return;
-    }
 
     // Put object in cache.
-    m_cache.set(object, resources);
+    SVGResources* resources = m_cache.set(object, newResources.release()).iterator->value.get();
 
     // Run cycle-detection _afterwards_, so self-references can be caught as well.
     SVGResourcesCycleSolver solver(object, resources);
@@ -76,7 +73,7 @@
     if (!m_cache.contains(object))
         return;
 
-    SVGResources* resources = m_cache.get(object);
+    OwnPtr<SVGResources> resources = m_cache.take(object);
 
     // Walk resources and register the render object at each resources.
     HashSet<RenderSVGResourceContainer*> resourceSet;
@@ -85,8 +82,6 @@
     HashSet<RenderSVGResourceContainer*>::iterator end = resourceSet.end();
     for (HashSet<RenderSVGResourceContainer*>::iterator it = resourceSet.begin(); it != end; ++it)
         (*it)->removeClient(object);
-
-    delete m_cache.take(object);
 }
 
 static inline SVGResourcesCache* resourcesCacheFromRenderObject(const RenderObject* renderer)
@@ -106,11 +101,7 @@
 SVGResources* SVGResourcesCache::cachedResourcesForRenderObject(const RenderObject* renderer)
 {
     ASSERT(renderer);
-    SVGResourcesCache* cache = resourcesCacheFromRenderObject(renderer);
-    if (!cache->m_cache.contains(renderer))
-        return 0;
-
-    return cache->m_cache.get(renderer);
+    return resourcesCacheFromRenderObject(renderer)->m_cache.get(renderer);
 }
 
 void SVGResourcesCache::clientLayoutChanged(RenderObject* object)
@@ -200,8 +191,8 @@
     // The resource itself may have clients, that need to be notified.
     cache->removeResourcesFromRenderObject(resource);
 
-    HashMap<const RenderObject*, SVGResources*>::iterator end = cache->m_cache.end();
-    for (HashMap<const RenderObject*, SVGResources*>::iterator it = cache->m_cache.begin(); it != end; ++it) {
+    CacheMap::iterator end = cache->m_cache.end();
+    for (CacheMap::iterator it = cache->m_cache.begin(); it != end; ++it) {
         it->value->resourceDestroyed(resource);
 
         // Mark users of destroyed resources as pending resolution based on the id of the old resource.

Modified: trunk/Source/WebCore/rendering/svg/SVGResourcesCache.h (149683 => 149684)


--- trunk/Source/WebCore/rendering/svg/SVGResourcesCache.h	2013-05-07 18:30:19 UTC (rev 149683)
+++ trunk/Source/WebCore/rendering/svg/SVGResourcesCache.h	2013-05-07 18:42:52 UTC (rev 149684)
@@ -23,6 +23,7 @@
 #if ENABLE(SVG)
 #include "RenderStyleConstants.h"
 #include <wtf/HashMap.h>
+#include <wtf/OwnPtr.h>
 
 namespace WebCore {
 
@@ -61,7 +62,8 @@
     void addResourcesFromRenderObject(RenderObject*, const RenderStyle*);
     void removeResourcesFromRenderObject(RenderObject*);
 
-    HashMap<const RenderObject*, SVGResources*> m_cache;
+    typedef HashMap<const RenderObject*, OwnPtr<SVGResources> > CacheMap;
+    CacheMap m_cache;
 };
 
 }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to