[SCM] WebKit Debian packaging branch, webkit-1.2, updated. upstream/1.1.90-6072-g9a69373

dimich at chromium.org dimich at chromium.org
Thu Apr 8 02:20:14 UTC 2010


The following commit has been merged in the webkit-1.2 branch:
commit 9b5c51367dbc3eac764887796c9702690953c064
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