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()