Use HashMap::add instead of get/contains + set in DOMObjectCache
authorcarlosgc@webkit.org <carlosgc@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 17 Feb 2015 11:57:43 +0000 (11:57 +0000)
committercarlosgc@webkit.org <carlosgc@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 17 Feb 2015 11:57:43 +0000 (11:57 +0000)
https://bugs.webkit.org/show_bug.cgi?id=141558

Rubber-stamped by Žan Doberšek.

* bindings/gobject/DOMObjectCache.cpp:
(WebKit::getOrCreateDOMObjectCacheFrameObserver):
(WebKit::DOMObjectCache::put):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@180216 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/bindings/gobject/DOMObjectCache.cpp

index 98cbe75..cb2a85c 100644 (file)
@@ -1,5 +1,16 @@
 2015-02-17  Carlos Garcia Campos  <cgarcia@igalia.com>
 
+        Use HashMap::add instead of get/contains + set in DOMObjectCache
+        https://bugs.webkit.org/show_bug.cgi?id=141558
+
+        Rubber-stamped by Žan Doberšek.
+
+        * bindings/gobject/DOMObjectCache.cpp:
+        (WebKit::getOrCreateDOMObjectCacheFrameObserver):
+        (WebKit::DOMObjectCache::put):
+
+2015-02-17  Carlos Garcia Campos  <cgarcia@igalia.com>
+
         [GTK] GObject DOM bindings object are cached forever
         https://bugs.webkit.org/show_bug.cgi?id=141558
 
index 39865a0..b7bf3e5 100644 (file)
@@ -72,14 +72,10 @@ static DOMObjectCacheFrameObserverMap& domObjectCacheFrameObservers()
 
 static DOMObjectCacheFrameObserver& getOrCreateDOMObjectCacheFrameObserver(WebCore::Frame& frame)
 {
-    auto observerPtr = domObjectCacheFrameObservers().get(&frame);
-    if (observerPtr)
-        return *observerPtr;
-
-    std::unique_ptr<DOMObjectCacheFrameObserver> observer = std::make_unique<DOMObjectCacheFrameObserver>(frame);
-    observerPtr = observer.get();
-    domObjectCacheFrameObservers().set(&frame, WTF::move(observer));
-    return *observerPtr;
+    DOMObjectCacheFrameObserverMap::AddResult result = domObjectCacheFrameObservers().add(&frame, nullptr);
+    if (result.isNewEntry)
+        result.iterator->value = std::make_unique<DOMObjectCacheFrameObserver>(frame);
+    return *result.iterator->value;
 }
 
 class DOMObjectCacheFrameObserver final: public WebCore::FrameDestructionObserver {
@@ -161,22 +157,20 @@ void* DOMObjectCache::get(void* objectHandle)
 
 void DOMObjectCache::put(void* objectHandle, void* wrapper)
 {
-    if (domObjects().contains(objectHandle))
-        return;
-    domObjects().set(objectHandle, std::make_unique<DOMObjectCacheData>(G_OBJECT(wrapper)));
+    DOMObjectMap::AddResult result = domObjects().add(objectHandle, nullptr);
+    if (result.isNewEntry)
+        result.iterator->value = std::make_unique<DOMObjectCacheData>(G_OBJECT(wrapper));
 }
 
 void DOMObjectCache::put(WebCore::Node* objectHandle, void* wrapper)
 {
-    if (domObjects().contains(objectHandle))
+    DOMObjectMap::AddResult result = domObjects().add(objectHandle, nullptr);
+    if (!result.isNewEntry)
         return;
 
-    std::unique_ptr<DOMObjectCacheData> data = std::make_unique<DOMObjectCacheData>(G_OBJECT(wrapper));
-    auto dataPtr = data.get();
-    domObjects().set(objectHandle, WTF::move(data));
-
+    result.iterator->value = std::make_unique<DOMObjectCacheData>(G_OBJECT(wrapper));
     if (WebCore::Frame* frame = objectHandle->document().frame())
-        getOrCreateDOMObjectCacheFrameObserver(*frame).addObjectCacheData(*dataPtr);
+        getOrCreateDOMObjectCacheFrameObserver(*frame).addObjectCacheData(*result.iterator->value);
 }
 
 }