[SCM] WebKit Debian packaging branch, webkit-1.1, updated. upstream/1.1.22-985-g3c00f00
dimich at chromium.org
dimich at chromium.org
Wed Mar 17 18:35:13 UTC 2010
The following commit has been merged in the webkit-1.1 branch:
commit 22b1e66a92116576e368ab300348ac60d0e70c72
Author: dimich at chromium.org <dimich at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Fri Mar 12 03:51:43 2010 +0000
[v8] Remove obsolete code for delayed dereferencing of DOM objects for single-heap, multithread v8 usage.
https://bugs.webkit.org/show_bug.cgi?id=36043
Reviewed by David Levin.
No new tests, no changes in functionality.
* bindings/v8/DOMData.cpp:
(WebCore::DOMData::DOMData):
* bindings/v8/DOMData.h:
(WebCore::DOMData::handleWeakObject):
* bindings/v8/DOMDataStore.cpp:
* bindings/v8/DOMDataStore.h:
(WebCore::DOMDataStore::domObjectMap):
(WebCore::DOMDataStore::activeDomObjectMap):
(WebCore::DOMDataStore::domSvgElementInstanceMap):
(WebCore::DOMDataStore::domSvgObjectWithContextMap):
* bindings/v8/ScopedDOMDataStore.cpp:
(WebCore::ScopedDOMDataStore::ScopedDOMDataStore):
* bindings/v8/StaticDOMDataStore.cpp:
(WebCore::StaticDOMDataStore::StaticDOMDataStore):
* bindings/v8/StaticDOMDataStore.h:
* bindings/v8/V8DOMMap.cpp:
(WebCore::removeAllDOMObjectsInCurrentThread):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@55882 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index f41415c..7df6dd3 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,30 @@
+2010-03-11 Dmitry Titov <dimich at chromium.org>
+
+ Reviewed by David Levin.
+
+ [v8] Remove obsolete code for delayed dereferencing of DOM objects for single-heap, multithread v8 usage.
+ https://bugs.webkit.org/show_bug.cgi?id=36043
+
+ No new tests, no changes in functionality.
+
+ * bindings/v8/DOMData.cpp:
+ (WebCore::DOMData::DOMData):
+ * bindings/v8/DOMData.h:
+ (WebCore::DOMData::handleWeakObject):
+ * bindings/v8/DOMDataStore.cpp:
+ * bindings/v8/DOMDataStore.h:
+ (WebCore::DOMDataStore::domObjectMap):
+ (WebCore::DOMDataStore::activeDomObjectMap):
+ (WebCore::DOMDataStore::domSvgElementInstanceMap):
+ (WebCore::DOMDataStore::domSvgObjectWithContextMap):
+ * bindings/v8/ScopedDOMDataStore.cpp:
+ (WebCore::ScopedDOMDataStore::ScopedDOMDataStore):
+ * bindings/v8/StaticDOMDataStore.cpp:
+ (WebCore::StaticDOMDataStore::StaticDOMDataStore):
+ * bindings/v8/StaticDOMDataStore.h:
+ * bindings/v8/V8DOMMap.cpp:
+ (WebCore::removeAllDOMObjectsInCurrentThread):
+
2010-03-11 Gavin Barraclough <barraclough at apple.com>
Rubber stamped by Oliver Hunt.
diff --git a/WebCore/bindings/v8/DOMData.cpp b/WebCore/bindings/v8/DOMData.cpp
index 666326b..568fc2c 100644
--- a/WebCore/bindings/v8/DOMData.cpp
+++ b/WebCore/bindings/v8/DOMData.cpp
@@ -39,9 +39,7 @@
namespace WebCore {
DOMData::DOMData()
- : m_delayedProcessingScheduled(false)
- , m_isMainThread(WTF::isMainThread())
- , m_owningThread(WTF::currentThread())
+ : m_owningThread(WTF::currentThread())
{
}
@@ -58,46 +56,9 @@ DOMData* DOMData::getCurrent()
return childThreadDOMData;
}
-void DOMData::ensureDeref(WrapperTypeInfo* type, void* domObject)
-{
- if (m_owningThread == WTF::currentThread()) {
- // No need to delay the work. We can deref right now.
- derefObject(type, domObject);
- return;
- }
-
- // We need to do the deref on the correct thread.
- m_delayedObjectMap.set(domObject, type);
-
- // Post a task to the owning thread in order to process the delayed queue.
- // FIXME: For now, we can only post to main thread due to WTF task posting limitation. We will fix this when we work on nested worker.
- if (!m_delayedProcessingScheduled) {
- m_delayedProcessingScheduled = true;
- if (isMainThread())
- WTF::callOnMainThread(&derefDelayedObjectsInCurrentThread, 0);
- }
-}
-
void DOMData::derefObject(WrapperTypeInfo* type, void* domObject)
{
type->derefObject(domObject);
}
-void DOMData::derefDelayedObjects()
-{
- WTF::MutexLocker locker(DOMDataStore::allStoresMutex());
-
- m_delayedProcessingScheduled = false;
-
- for (DelayedObjectMap::iterator iter(m_delayedObjectMap.begin()); iter != m_delayedObjectMap.end(); ++iter)
- derefObject(iter->second, iter->first);
-
- m_delayedObjectMap.clear();
-}
-
-void DOMData::derefDelayedObjectsInCurrentThread(void*)
-{
- getCurrent()->derefDelayedObjects();
-}
-
} // namespace WebCore
diff --git a/WebCore/bindings/v8/DOMData.h b/WebCore/bindings/v8/DOMData.h
index 70e1749..4d7331b 100644
--- a/WebCore/bindings/v8/DOMData.h
+++ b/WebCore/bindings/v8/DOMData.h
@@ -54,23 +54,12 @@ namespace WebCore {
template<typename T>
static void handleWeakObject(DOMDataStore::DOMWrapperMapType, v8::Persistent<v8::Object>, T* domObject);
- void forgetDelayedObject(void* object) { m_delayedObjectMap.take(object); }
-
- // This is to ensure that we will deref DOM objects from the owning thread,
- // not the GC thread. The helper function will be scheduled by the GC
- // thread to get called from the owning thread.
- static void derefDelayedObjectsInCurrentThread(void*);
- void derefDelayedObjects();
-
template<typename T>
static void removeObjectsFromWrapperMap(AbstractWeakReferenceMap<T, v8::Object>& domMap);
ThreadIdentifier owningThread() const { return m_owningThread; }
private:
- typedef WTF::HashMap<void*, WrapperTypeInfo*> DelayedObjectMap;
-
- void ensureDeref(WrapperTypeInfo* type, void* domObject);
static void derefObject(WrapperTypeInfo* type, void* domObject);
template<typename T>
@@ -84,15 +73,6 @@ namespace WebCore {
}
};
- // Stores all the DOM objects that are delayed to be processed when the
- // owning thread gains control.
- DelayedObjectMap m_delayedObjectMap;
-
- // The flag to indicate if the task to do the delayed process has
- // already been posted.
- bool m_delayedProcessingScheduled;
-
- bool m_isMainThread;
ThreadIdentifier m_owningThread;
};
@@ -104,7 +84,7 @@ namespace WebCore {
DOMDataStore* store = list[i];
ASSERT(store->domData()->owningThread() == WTF::currentThread());
- DOMDataStore::InternalDOMWrapperMap<T>* domMap = static_cast<DOMDataStore::InternalDOMWrapperMap<T>*>(store->getDOMWrapperMap(mapType));
+ DOMWrapperMap<T>* domMap = static_cast<DOMWrapperMap<T>*>(store->getDOMWrapperMap(mapType));
if (domMap->removeIfPresent(domObject, v8Object))
store->domData()->derefObject(V8DOMWrapper::domWrapperType(v8Object), domObject);
}
diff --git a/WebCore/bindings/v8/DOMDataStore.cpp b/WebCore/bindings/v8/DOMDataStore.cpp
index e181ebc..5d609d8 100644
--- a/WebCore/bindings/v8/DOMDataStore.cpp
+++ b/WebCore/bindings/v8/DOMDataStore.cpp
@@ -114,11 +114,6 @@ WTF::Mutex& DOMDataStore::allStoresMutex()
return staticDOMDataListMutex;
}
-void DOMDataStore::forgetDelayedObject(DOMData* domData, void* object)
-{
- domData->forgetDelayedObject(object);
-}
-
void* DOMDataStore::getDOMWrapperMap(DOMWrapperMapType type)
{
switch (type) {
diff --git a/WebCore/bindings/v8/DOMDataStore.h b/WebCore/bindings/v8/DOMDataStore.h
index 2333a48..c39a0ed 100644
--- a/WebCore/bindings/v8/DOMDataStore.h
+++ b/WebCore/bindings/v8/DOMDataStore.h
@@ -161,22 +161,6 @@ namespace WebCore {
#endif
};
- template <class KeyType>
- class InternalDOMWrapperMap : public DOMWrapperMap<KeyType> {
- public:
- InternalDOMWrapperMap(DOMData* domData, v8::WeakReferenceCallback callback)
- : DOMWrapperMap<KeyType>(callback), m_domData(domData) { }
-
- virtual void forget(KeyType* object)
- {
- DOMWrapperMap<KeyType>::forget(object);
- forgetDelayedObject(m_domData, object);
- }
-
- private:
- DOMData* m_domData;
- };
-
class IntrusiveDOMWrapperMap : public AbstractWeakReferenceMap<Node, v8::Object> {
public:
IntrusiveDOMWrapperMap(v8::WeakReferenceCallback callback)
@@ -253,25 +237,21 @@ namespace WebCore {
DOMDataStore(DOMData*);
virtual ~DOMDataStore();
- // A list of all DOMDataStore objects. Traversed during GC to find a thread-specific map that
- // contains the object - so we can schedule the object to be deleted on the thread which created it.
+ // A list of all DOMDataStore objects in the current V8 instance (thread). Normally, each World has a DOMDataStore.
static DOMDataList& allStores();
// Mutex to protect against concurrent access of DOMDataList.
static WTF::Mutex& allStoresMutex();
- // Helper function to avoid circular includes.
- static void forgetDelayedObject(DOMData*, void* object);
-
DOMData* domData() const { return m_domData; }
void* getDOMWrapperMap(DOMWrapperMapType);
DOMNodeMapping& domNodeMap() { return *m_domNodeMap; }
- InternalDOMWrapperMap<void>& domObjectMap() { return *m_domObjectMap; }
- InternalDOMWrapperMap<void>& activeDomObjectMap() { return *m_activeDomObjectMap; }
+ DOMWrapperMap<void>& domObjectMap() { return *m_domObjectMap; }
+ DOMWrapperMap<void>& activeDomObjectMap() { return *m_activeDomObjectMap; }
#if ENABLE(SVG)
- InternalDOMWrapperMap<SVGElementInstance>& domSvgElementInstanceMap() { return *m_domSvgElementInstanceMap; }
- InternalDOMWrapperMap<void>& domSvgObjectWithContextMap() { return *m_domSvgObjectWithContextMap; }
+ DOMWrapperMap<SVGElementInstance>& domSvgElementInstanceMap() { return *m_domSvgElementInstanceMap; }
+ DOMWrapperMap<void>& domSvgObjectWithContextMap() { return *m_domSvgObjectWithContextMap; }
#endif
// Need by V8GCController.
@@ -287,11 +267,11 @@ namespace WebCore {
#endif
DOMNodeMapping* m_domNodeMap;
- InternalDOMWrapperMap<void>* m_domObjectMap;
- InternalDOMWrapperMap<void>* m_activeDomObjectMap;
+ DOMWrapperMap<void>* m_domObjectMap;
+ DOMWrapperMap<void>* m_activeDomObjectMap;
#if ENABLE(SVG)
- InternalDOMWrapperMap<SVGElementInstance>* m_domSvgElementInstanceMap;
- InternalDOMWrapperMap<void>* m_domSvgObjectWithContextMap;
+ DOMWrapperMap<SVGElementInstance>* m_domSvgElementInstanceMap;
+ DOMWrapperMap<void>* m_domSvgObjectWithContextMap;
#endif
private:
diff --git a/WebCore/bindings/v8/ScopedDOMDataStore.cpp b/WebCore/bindings/v8/ScopedDOMDataStore.cpp
index 19cd545..df4a63a 100644
--- a/WebCore/bindings/v8/ScopedDOMDataStore.cpp
+++ b/WebCore/bindings/v8/ScopedDOMDataStore.cpp
@@ -36,12 +36,12 @@ namespace WebCore {
ScopedDOMDataStore::ScopedDOMDataStore(DOMData* domData)
: DOMDataStore(domData)
{
- m_domNodeMap = new InternalDOMWrapperMap<Node>(domData, &DOMDataStore::weakNodeCallback);
- m_domObjectMap = new InternalDOMWrapperMap<void>(domData, &DOMDataStore::weakDOMObjectCallback);
- m_activeDomObjectMap = new InternalDOMWrapperMap<void>(domData, &DOMDataStore::weakActiveDOMObjectCallback);
+ m_domNodeMap = new DOMWrapperMap<Node>(&DOMDataStore::weakNodeCallback);
+ m_domObjectMap = new DOMWrapperMap<void>(&DOMDataStore::weakDOMObjectCallback);
+ m_activeDomObjectMap = new DOMWrapperMap<void>(&DOMDataStore::weakActiveDOMObjectCallback);
#if ENABLE(SVG)
- m_domSvgElementInstanceMap = new InternalDOMWrapperMap<SVGElementInstance>(domData, &DOMDataStore::weakSVGElementInstanceCallback);
- m_domSvgObjectWithContextMap = new InternalDOMWrapperMap<void>(domData, &DOMDataStore::weakSVGObjectWithContextCallback);
+ m_domSvgElementInstanceMap = new DOMWrapperMap<SVGElementInstance>(&DOMDataStore::weakSVGElementInstanceCallback);
+ m_domSvgObjectWithContextMap = new DOMWrapperMap<void>(&DOMDataStore::weakSVGObjectWithContextCallback);
#endif
}
diff --git a/WebCore/bindings/v8/StaticDOMDataStore.cpp b/WebCore/bindings/v8/StaticDOMDataStore.cpp
index 722051b..0b0d531 100644
--- a/WebCore/bindings/v8/StaticDOMDataStore.cpp
+++ b/WebCore/bindings/v8/StaticDOMDataStore.cpp
@@ -36,11 +36,11 @@ namespace WebCore {
StaticDOMDataStore::StaticDOMDataStore(DOMData* domData)
: DOMDataStore(domData)
, m_staticDomNodeMap(&DOMDataStore::weakNodeCallback)
- , m_staticDomObjectMap(domData, &DOMDataStore::weakDOMObjectCallback)
- , m_staticActiveDomObjectMap(domData, &DOMDataStore::weakActiveDOMObjectCallback)
+ , m_staticDomObjectMap(&DOMDataStore::weakDOMObjectCallback)
+ , m_staticActiveDomObjectMap(&DOMDataStore::weakActiveDOMObjectCallback)
#if ENABLE(SVG)
- , m_staticDomSvgElementInstanceMap(domData, &DOMDataStore::weakSVGElementInstanceCallback)
- , m_staticDomSvgObjectWithContextMap(domData, &DOMDataStore::weakSVGObjectWithContextCallback)
+ , m_staticDomSvgElementInstanceMap(&DOMDataStore::weakSVGElementInstanceCallback)
+ , m_staticDomSvgObjectWithContextMap(&DOMDataStore::weakSVGObjectWithContextCallback)
#endif
{
m_domNodeMap = &m_staticDomNodeMap;
diff --git a/WebCore/bindings/v8/StaticDOMDataStore.h b/WebCore/bindings/v8/StaticDOMDataStore.h
index 64a90e0..d1e5a30 100644
--- a/WebCore/bindings/v8/StaticDOMDataStore.h
+++ b/WebCore/bindings/v8/StaticDOMDataStore.h
@@ -49,11 +49,11 @@ public:
private:
IntrusiveDOMWrapperMap m_staticDomNodeMap;
- InternalDOMWrapperMap<void> m_staticDomObjectMap;
- InternalDOMWrapperMap<void> m_staticActiveDomObjectMap;
+ DOMWrapperMap<void> m_staticDomObjectMap;
+ DOMWrapperMap<void> m_staticActiveDomObjectMap;
#if ENABLE(SVG)
- InternalDOMWrapperMap<SVGElementInstance> m_staticDomSvgElementInstanceMap;
- InternalDOMWrapperMap<void> m_staticDomSvgObjectWithContextMap;
+ DOMWrapperMap<SVGElementInstance> m_staticDomSvgElementInstanceMap;
+ DOMWrapperMap<void> m_staticDomSvgObjectWithContextMap;
#endif
};
diff --git a/WebCore/bindings/v8/V8DOMMap.cpp b/WebCore/bindings/v8/V8DOMMap.cpp
index 3c5e92c..b478d06 100644
--- a/WebCore/bindings/v8/V8DOMMap.cpp
+++ b/WebCore/bindings/v8/V8DOMMap.cpp
@@ -94,13 +94,10 @@ DOMWrapperMap<void>& getDOMSVGObjectWithContextMap()
#endif // ENABLE(SVG)
-static void removeAllDOMObjectsInCurrentThreadHelper()
+void removeAllDOMObjectsInCurrentThread()
{
v8::HandleScope scope;
- // Deref all objects in the delayed queue.
- DOMData::getCurrent()->derefDelayedObjects();
-
// The DOM objects with the following types only exist on the main thread.
if (WTF::isMainThread()) {
// Remove all DOM nodes.
@@ -122,17 +119,6 @@ static void removeAllDOMObjectsInCurrentThreadHelper()
DOMData::removeObjectsFromWrapperMap<void>(getActiveDOMObjectMap());
}
-void removeAllDOMObjectsInCurrentThread()
-{
- // Use the locker only if it has already been invoked before, as by worker thread.
- if (v8::Locker::IsActive()) {
- v8::Locker locker;
- removeAllDOMObjectsInCurrentThreadHelper();
- } else
- removeAllDOMObjectsInCurrentThreadHelper();
-}
-
-
void visitDOMNodesInCurrentThread(DOMWrapperMap<Node>::Visitor* visitor)
{
v8::HandleScope scope;
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list