Title: [90931] trunk/Source/WebCore
Revision
90931
Author
dslo...@google.com
Date
2011-07-13 10:49:11 -0700 (Wed, 13 Jul 2011)

Log Message

2011-07-12  Dmitry Lomov  <dslo...@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=63041
        [Chromium][V8] Make DOMDataStore per-isolate
        This patch:
         - makes DOMData class an utility class with static members only
         - adds an isolate-specific DOMDataStore in V8BindingPerIsolateData.
        Dromaeo benchmarks are not affected.

        Reviewed by Adam Barth.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (90930 => 90931)


--- trunk/Source/WebCore/ChangeLog	2011-07-13 17:36:43 UTC (rev 90930)
+++ trunk/Source/WebCore/ChangeLog	2011-07-13 17:49:11 UTC (rev 90931)
@@ -1,3 +1,39 @@
+2011-07-12  Dmitry Lomov  <dslo...@google.com>
+
+        https://bugs.webkit.org/show_bug.cgi?id=63041
+        [Chromium][V8] Make DOMDataStore per-isolate
+        This patch:
+         - makes DOMData class an utility class with static members only
+         - adds an isolate-specific DOMDataStore in V8BindingPerIsolateData.
+        Dromaeo benchmarks are not affected.
+
+        Reviewed by Adam Barth.
+
+        * bindings/v8/DOMData.cpp:
+        (WebCore::getDefaultStore):
+        (WebCore::DOMData::getCurrentStore):
+        * bindings/v8/DOMData.h:
+        * bindings/v8/DOMDataStore.cpp:
+        (WebCore::DOMDataStore::DOMDataStore):
+        (WebCore::DOMDataStore::allStores):
+        * bindings/v8/DOMDataStore.h:
+        * bindings/v8/ScopedDOMDataStore.cpp:
+        (WebCore::ScopedDOMDataStore::ScopedDOMDataStore):
+        * bindings/v8/ScopedDOMDataStore.h:
+        * bindings/v8/StaticDOMDataStore.cpp:
+        (WebCore::StaticDOMDataStore::StaticDOMDataStore):
+        * bindings/v8/StaticDOMDataStore.h:
+        * bindings/v8/V8Binding.h:
+        (WebCore::V8BindingPerIsolateData::allStores):
+        (WebCore::V8BindingPerIsolateData::getDOMDataStore):
+        (WebCore::V8BindingPerIsolateData::setDOMDataStore):
+        * bindings/v8/V8Binding.cpp:
+        (WebCore::V8BindingPerIsolateData::V8BindingPerIsolateData):
+        * bindings/v8/V8DOMMap.cpp:
+        (WebCore::DOMDataStoreHandle::DOMDataStoreHandle):
+        (WebCore::getDOMDataStore):
+        (WebCore::enableFasterDOMStoreAccess):
+
 2011-07-12  Simon Fraser  <simon.fra...@apple.com>
 
         Rename compositing-related updateContentsScale() methods

Modified: trunk/Source/WebCore/bindings/v8/DOMData.cpp (90930 => 90931)


--- trunk/Source/WebCore/bindings/v8/DOMData.cpp	2011-07-13 17:36:43 UTC (rev 90930)
+++ trunk/Source/WebCore/bindings/v8/DOMData.cpp	2011-07-13 17:49:11 UTC (rev 90931)
@@ -30,36 +30,28 @@
 
 #include "config.h"
 #include "DOMData.h"
+#include "V8Binding.h"
 #include "V8IsolatedContext.h"
 #include "WebGLContextAttributes.h"
 #include "WebGLUniformLocation.h"
 
 namespace WebCore {
 
-DOMData::DOMData()
-    : m_defaultStore(this)
+static StaticDOMDataStore& getDefaultStore() 
 {
+    DEFINE_STATIC_LOCAL(StaticDOMDataStore, defaultStore, ());
+    return defaultStore;
 }
 
-DOMData::~DOMData()
+DOMDataStore& DOMData::getCurrentStore()
 {
-}
-
-DOMData* DOMData::getCurrent()
-{
-    DEFINE_STATIC_LOCAL(DOMData, mainThreadDOMData, ());
-    return &mainThreadDOMData;
-}
-
-DOMDataStore& DOMData::getMainThreadStore()
-{
-    // This is broken out as a separate non-virtual method from getStore()
-    // so that it can be inlined by getCurrentMainThreadStore, which is
-    // a hot spot in Dromaeo DOM tests.
+    V8BindingPerIsolateData* data = ""
+    if (UNLIKELY(data->domDataStore() != 0))
+        return *data->domDataStore();
     V8IsolatedContext* context = V8IsolatedContext::getEntered();
     if (UNLIKELY(context != 0))
         return *context->world()->domDataStore();
-    return m_defaultStore;
+    return getDefaultStore();
 }
 
 void DOMData::derefObject(WrapperTypeInfo* type, void* domObject)

Modified: trunk/Source/WebCore/bindings/v8/DOMData.h (90930 => 90931)


--- trunk/Source/WebCore/bindings/v8/DOMData.h	2011-07-13 17:36:43 UTC (rev 90930)
+++ trunk/Source/WebCore/bindings/v8/DOMData.h	2011-07-13 17:49:11 UTC (rev 90931)
@@ -45,23 +45,17 @@
     // use different subclasses.
     //
     class DOMData {
-        WTF_MAKE_NONCOPYABLE(DOMData);
     public:
-        DOMData();
-        virtual ~DOMData();
-
-        static DOMData* getCurrent();
-        DOMDataStore& getStore() { return getMainThreadStore(); }
-
         template<typename T>
         static void handleWeakObject(DOMDataStore::DOMWrapperMapType, v8::Persistent<v8::Object>, T* domObject);
 
         template<typename T>
         static void removeObjectsFromWrapperMap(DOMDataStore* store, AbstractWeakReferenceMap<T, v8::Object>& domMap);
 
-        static DOMDataStore& getCurrentMainThreadStore() { return getCurrent()->getMainThreadStore(); }
 
+        static DOMDataStore& getCurrentStore();
     private:
+        DOMData();
         static void derefObject(WrapperTypeInfo* type, void* domObject);
 
         template<typename T>
@@ -74,9 +68,6 @@
                 v8Object.Dispose();
             }
         };
-
-        DOMDataStore& getMainThreadStore();
-        StaticDOMDataStore m_defaultStore;
     };
 
     template<typename T>

Modified: trunk/Source/WebCore/bindings/v8/DOMDataStore.cpp (90930 => 90931)


--- trunk/Source/WebCore/bindings/v8/DOMDataStore.cpp	2011-07-13 17:36:43 UTC (rev 90930)
+++ trunk/Source/WebCore/bindings/v8/DOMDataStore.cpp	2011-07-13 17:49:11 UTC (rev 90931)
@@ -32,6 +32,7 @@
 #include "DOMDataStore.h"
 
 #include "DOMData.h"
+#include "V8Binding.h"
 
 namespace WebCore {
 
@@ -82,14 +83,13 @@
 //    them.
 
 
-DOMDataStore::DOMDataStore(DOMData* domData)
+DOMDataStore::DOMDataStore()
     : m_domNodeMap(0)
     , m_domObjectMap(0)
     , m_activeDomObjectMap(0)
 #if ENABLE(SVG)
     , m_domSvgElementInstanceMap(0)
 #endif
-    , m_domData(domData)
 {
     DOMDataStore::allStores().append(this);
 }
@@ -101,8 +101,7 @@
 
 DOMDataList& DOMDataStore::allStores()
 {
-  DEFINE_STATIC_LOCAL(DOMDataList, staticDOMDataList, ());
-  return staticDOMDataList;
+    return V8BindingPerIsolateData::current()->allStores();
 }
 
 void* DOMDataStore::getDOMWrapperMap(DOMWrapperMapType type)

Modified: trunk/Source/WebCore/bindings/v8/DOMDataStore.h (90930 => 90931)


--- trunk/Source/WebCore/bindings/v8/DOMDataStore.h	2011-07-13 17:36:43 UTC (rev 90930)
+++ trunk/Source/WebCore/bindings/v8/DOMDataStore.h	2011-07-13 17:49:11 UTC (rev 90931)
@@ -72,14 +72,12 @@
 #endif
         };
 
-        DOMDataStore(DOMData*);
+        DOMDataStore();
         virtual ~DOMDataStore();
 
         // A list of all DOMDataStore objects in the current V8 instance (thread). Normally, each World has a DOMDataStore.
         static DOMDataList& allStores();
 
-        DOMData* domData() const { return m_domData; }
-
         void* getDOMWrapperMap(DOMWrapperMapType);
 
         DOMNodeMapping& domNodeMap() { return *m_domNodeMap; }
@@ -105,10 +103,6 @@
 #if ENABLE(SVG)
         DOMWrapperMap<SVGElementInstance>* m_domSvgElementInstanceMap;
 #endif
-
-    private:
-        // A back-pointer to the DOMData to which we belong.
-        DOMData* m_domData;
     };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/bindings/v8/ScopedDOMDataStore.cpp (90930 => 90931)


--- trunk/Source/WebCore/bindings/v8/ScopedDOMDataStore.cpp	2011-07-13 17:36:43 UTC (rev 90930)
+++ trunk/Source/WebCore/bindings/v8/ScopedDOMDataStore.cpp	2011-07-13 17:49:11 UTC (rev 90931)
@@ -33,8 +33,8 @@
 
 namespace WebCore {
 
-ScopedDOMDataStore::ScopedDOMDataStore(DOMData* domData)
-    : DOMDataStore(domData)
+ScopedDOMDataStore::ScopedDOMDataStore()
+    : DOMDataStore()
 {
     m_domNodeMap = new DOMWrapperMap<Node>(&DOMDataStore::weakNodeCallback);
     m_domObjectMap = new DOMWrapperMap<void>(&DOMDataStore::weakDOMObjectCallback);

Modified: trunk/Source/WebCore/bindings/v8/ScopedDOMDataStore.h (90930 => 90931)


--- trunk/Source/WebCore/bindings/v8/ScopedDOMDataStore.h	2011-07-13 17:36:43 UTC (rev 90930)
+++ trunk/Source/WebCore/bindings/v8/ScopedDOMDataStore.h	2011-07-13 17:49:11 UTC (rev 90931)
@@ -44,7 +44,7 @@
     //
     class ScopedDOMDataStore : public DOMDataStore {
     public:
-        ScopedDOMDataStore(DOMData*);
+        ScopedDOMDataStore();
 
         // This can be called when WTF thread is tearing down.
         // We assume that all child threads running V8 instances are created by WTF.

Modified: trunk/Source/WebCore/bindings/v8/StaticDOMDataStore.cpp (90930 => 90931)


--- trunk/Source/WebCore/bindings/v8/StaticDOMDataStore.cpp	2011-07-13 17:36:43 UTC (rev 90930)
+++ trunk/Source/WebCore/bindings/v8/StaticDOMDataStore.cpp	2011-07-13 17:49:11 UTC (rev 90931)
@@ -33,8 +33,8 @@
 
 namespace WebCore {
 
-StaticDOMDataStore::StaticDOMDataStore(DOMData* domData)
-    : DOMDataStore(domData)
+StaticDOMDataStore::StaticDOMDataStore()
+    : DOMDataStore()
     , m_staticDomNodeMap(&DOMDataStore::weakNodeCallback)
     , m_staticDomObjectMap(&DOMDataStore::weakDOMObjectCallback)
     , m_staticActiveDomObjectMap(&DOMDataStore::weakActiveDOMObjectCallback)

Modified: trunk/Source/WebCore/bindings/v8/StaticDOMDataStore.h (90930 => 90931)


--- trunk/Source/WebCore/bindings/v8/StaticDOMDataStore.h	2011-07-13 17:36:43 UTC (rev 90930)
+++ trunk/Source/WebCore/bindings/v8/StaticDOMDataStore.h	2011-07-13 17:49:11 UTC (rev 90931)
@@ -46,7 +46,7 @@
 //
 class StaticDOMDataStore : public DOMDataStore {
 public:
-    StaticDOMDataStore(DOMData*);
+    StaticDOMDataStore();
 
 private:
     IntrusiveDOMWrapperMap m_staticDomNodeMap;
@@ -60,4 +60,3 @@
 } // namespace WebCore
 
 #endif // StaticDOMDataStore_h
-

Modified: trunk/Source/WebCore/bindings/v8/V8Binding.cpp (90930 => 90931)


--- trunk/Source/WebCore/bindings/v8/V8Binding.cpp	2011-07-13 17:36:43 UTC (rev 90930)
+++ trunk/Source/WebCore/bindings/v8/V8Binding.cpp	2011-07-13 17:49:11 UTC (rev 90931)
@@ -49,6 +49,7 @@
 
 
 V8BindingPerIsolateData::V8BindingPerIsolateData(v8::Isolate* isolate)
+    : m_DOMDataStore(0)
 {
 }
 

Modified: trunk/Source/WebCore/bindings/v8/V8Binding.h (90930 => 90931)


--- trunk/Source/WebCore/bindings/v8/V8Binding.h	2011-07-13 17:36:43 UTC (rev 90930)
+++ trunk/Source/WebCore/bindings/v8/V8Binding.h	2011-07-13 17:49:11 UTC (rev 90931)
@@ -32,6 +32,7 @@
 #define V8Binding_h
 
 #include "BindingSecurity.h"
+#include "DOMDataStore.h"
 #include "MathExtras.h"
 #include "PlatformString.h"
 #include "V8DOMWrapper.h"
@@ -108,6 +109,12 @@
         v8::Persistent<v8::FunctionTemplate>& toStringTemplate() { return m_toStringTemplate; }
         StringCache* stringCache() { return &m_stringCache; }
 
+        DOMDataList& allStores() { return m_DOMDataList; }
+
+        DOMDataStore* domDataStore() { return m_DOMDataStore; }
+        // DOMDataStore is owned outside V8BindingPerIsolateData.
+        void setDOMDataStore(DOMDataStore* store) { m_DOMDataStore = store; }
+
     private:
         explicit V8BindingPerIsolateData(v8::Isolate*);
         ~V8BindingPerIsolateData();
@@ -117,6 +124,9 @@
         v8::Persistent<v8::String> m_toStringName;
         v8::Persistent<v8::FunctionTemplate> m_toStringTemplate;
         StringCache m_stringCache;
+
+        DOMDataList m_DOMDataList;
+        DOMDataStore* m_DOMDataStore;
     };
 
 

Modified: trunk/Source/WebCore/bindings/v8/V8DOMMap.cpp (90930 => 90931)


--- trunk/Source/WebCore/bindings/v8/V8DOMMap.cpp	2011-07-13 17:36:43 UTC (rev 90930)
+++ trunk/Source/WebCore/bindings/v8/V8DOMMap.cpp	2011-07-13 17:49:11 UTC (rev 90931)
@@ -38,7 +38,7 @@
 namespace WebCore {
 
 DOMDataStoreHandle::DOMDataStoreHandle()
-    : m_store(adoptPtr(new ScopedDOMDataStore(DOMData::getCurrent())))
+    : m_store(adoptPtr(new ScopedDOMDataStore()))
 {
 }
 
@@ -46,16 +46,13 @@
 {
 }
 
-static bool fasterDOMStoreAccess = false;
-
 static inline DOMDataStore& getDOMDataStore()
 {
-    return DOMData::getCurrentMainThreadStore();
+    return DOMData::getCurrentStore();
 }
 
 void enableFasterDOMStoreAccess()
 {
-    fasterDOMStoreAccess = true;
 }
 
 DOMNodeMapping& getDOMNodeMap()
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to