Title: [133823] trunk/Source/WebCore
Revision
133823
Author
aba...@webkit.org
Date
2012-11-07 16:56:20 -0800 (Wed, 07 Nov 2012)

Log Message

[V8] Prepare DOMDataStore to be able to store ScriptWrappable wrappers inline
https://bugs.webkit.org/show_bug.cgi?id=101523

Unreviewed. Technically this patch hasn't been reviewed, but it is part
of a patch that was reviewed by Kentaro Hara.

Sadly, my patch for bug 101110 triggered the regression again. This
patch is a smaller incremental step towards the patch in bug 101110. It
doesn't make that much sense on its own, but it will help me isolate
the source of the regression.

* bindings/v8/DOMDataStore.h:
(WebCore::DOMDataStore::get):
(DOMDataStore):
(WebCore::DOMDataStore::set):
(WebCore::DOMDataStore::wrapperIsStoredInObject):
(WebCore::DOMDataStore::getWrapperFromObject):
(WebCore::DOMDataStore::setWrapperInObject):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (133822 => 133823)


--- trunk/Source/WebCore/ChangeLog	2012-11-08 00:52:38 UTC (rev 133822)
+++ trunk/Source/WebCore/ChangeLog	2012-11-08 00:56:20 UTC (rev 133823)
@@ -1,3 +1,24 @@
+2012-11-07  Adam Barth  <aba...@webkit.org>
+
+        [V8] Prepare DOMDataStore to be able to store ScriptWrappable wrappers inline
+        https://bugs.webkit.org/show_bug.cgi?id=101523
+
+        Unreviewed. Technically this patch hasn't been reviewed, but it is part
+        of a patch that was reviewed by Kentaro Hara.
+
+        Sadly, my patch for bug 101110 triggered the regression again. This
+        patch is a smaller incremental step towards the patch in bug 101110. It
+        doesn't make that much sense on its own, but it will help me isolate
+        the source of the regression.
+
+        * bindings/v8/DOMDataStore.h:
+        (WebCore::DOMDataStore::get):
+        (DOMDataStore):
+        (WebCore::DOMDataStore::set):
+        (WebCore::DOMDataStore::wrapperIsStoredInObject):
+        (WebCore::DOMDataStore::getWrapperFromObject):
+        (WebCore::DOMDataStore::setWrapperInObject):
+
 2012-11-05  Ryosuke Niwa  <rn...@webkit.org>
 
         SimplifyMarkupCommand takes a disproportionally long time to run when there are many nodes to remove

Modified: trunk/Source/WebCore/bindings/v8/DOMDataStore.h (133822 => 133823)


--- trunk/Source/WebCore/bindings/v8/DOMDataStore.h	2012-11-08 00:52:38 UTC (rev 133822)
+++ trunk/Source/WebCore/bindings/v8/DOMDataStore.h	2012-11-08 00:56:20 UTC (rev 133823)
@@ -59,29 +59,51 @@
 
     static DOMDataStore* current(v8::Isolate*);
 
-    inline v8::Handle<v8::Object> get(void* object) const { return m_domObjectMap->get(object); }
-    inline v8::Handle<v8::Object> get(Node* object) const
+    template<typename T>
+    inline v8::Handle<v8::Object> get(T* object) const
     {
-        if (m_type == MainWorld)
-            return object->wrapper();
+        if (wrapperIsStoredInObject(object))
+            return getWrapperFromObject(object);
         return m_domObjectMap->get(object);
     }
 
-    inline void set(void* object, v8::Persistent<v8::Object> wrapper) { m_domObjectMap->set(object, wrapper); }
-    inline void set(Node* object, v8::Persistent<v8::Object> wrapper)
+    template<typename T>
+    inline void set(T* object, v8::Persistent<v8::Object> wrapper)
     {
-        if (m_type == MainWorld) {
-            ASSERT(object->wrapper().IsEmpty());
-            object->setWrapper(wrapper);
-            wrapper.MakeWeak(object, weakCallback);
+        if (setWrapperInObject(object, wrapper))
             return;
-        }
         m_domObjectMap->set(object, wrapper);
     }
 
     void reportMemoryUsage(MemoryObjectInfo*) const;
 
 private:
+    bool wrapperIsStoredInObject(void*) const { return false; }
+    bool wrapperIsStoredInObject(Node*) const { return m_type == MainWorld; }
+
+    v8::Handle<v8::Object> getWrapperFromObject(void*) const
+    {
+        ASSERT_NOT_REACHED();
+        return v8::Handle<v8::Object>();
+    }
+
+    v8::Handle<v8::Object> getWrapperFromObject(Node* object) const
+    {
+        ASSERT(m_type == MainWorld);
+        return object->wrapper();
+    }
+
+    bool setWrapperInObject(void*, v8::Persistent<v8::Object>) { return false; }
+    bool setWrapperInObject(Node* object, v8::Persistent<v8::Object> wrapper)
+    {
+        if (m_type != MainWorld)
+            return false;
+        ASSERT(object->wrapper().IsEmpty());
+        object->setWrapper(wrapper);
+        wrapper.MakeWeak(object, weakCallback);
+        return true;
+    }
+
     static void weakCallback(v8::Persistent<v8::Value>, void* context);
 
     Type m_type;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to