Changeset 88357 in webkit


Ignore:
Timestamp:
Jun 8, 2011 10:31:03 AM (13 years ago)
Author:
commit-queue@webkit.org
Message:

2011-06-08 Dmitry Lomov <dslomov@google.com>

Reviewed by Adam Barth.

https://bugs.webkit.org/show_bug.cgi?id=62164
Remove "multi-threaded" logic in V8 DOMData, DOMDataStore and friends
This functionality is untested and unused:
This is an old code from Lockers-based implementation of WebWorkers in
V8 bindings, to make sure that DOM objects are released on the right thread
even though GC could have happened on any thread. It is currently unused (since
current model is one worker per process) and is being removed because new implementation
of WebWorkers will be using V8 isolates.

  • WebCore.gypi:
  • WebCore.pro:
  • bindings/v8/ChildThreadDOMData.cpp: Removed.
  • bindings/v8/ChildThreadDOMData.h: Removed.
  • bindings/v8/DOMData.cpp: (WebCore::DOMData::DOMData): (WebCore::DOMData::getCurrent): (WebCore::DOMData::getMainThreadStore):
  • bindings/v8/DOMData.h: (WebCore::DOMData::getStore): (WebCore::DOMData::getCurrentMainThreadStore): (WebCore::DOMData::handleWeakObject):
  • bindings/v8/DOMDataStore.cpp: (WebCore::DOMDataStore::DOMDataStore): (WebCore::DOMDataStore::~DOMDataStore): (WebCore::DOMDataStore::weakNodeCallback):
  • bindings/v8/DOMDataStore.h:
  • bindings/v8/MainThreadDOMData.cpp: Removed.
  • bindings/v8/MainThreadDOMData.h: Removed.
  • bindings/v8/V8DOMMap.cpp: (WebCore::getDOMDataStore): (WebCore::removeAllDOMObjects): (WebCore::visitDOMNodes): (WebCore::visitDOMObjects): (WebCore::visitActiveDOMObjects): (WebCore::visitDOMSVGElementInstances):
  • bindings/v8/V8DOMMap.h:
  • bindings/v8/V8GCController.cpp: (WebCore::V8GCController::gcPrologue): (WebCore::V8GCController::gcEpilogue):
  • bindings/v8/WorkerScriptController.cpp: (WebCore::WorkerScriptController::~WorkerScriptController):
Location:
trunk/Source/WebCore
Files:
4 deleted
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r88350 r88357  
     12011-06-08  Dmitry Lomov  <dslomov@google.com>
     2
     3        Reviewed by Adam Barth.
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=62164
     6        Remove "multi-threaded" logic in V8 DOMData, DOMDataStore and friends
     7        This functionality is untested and unused:
     8        This is an old code from Lockers-based implementation of WebWorkers in
     9        V8 bindings, to make sure that DOM objects are released on the right thread
     10        even though GC could have happened on any thread. It is currently unused (since
     11        current model is one worker per process) and is being removed because new implementation
     12        of WebWorkers will be using V8 isolates.
     13
     14        * WebCore.gypi:
     15        * WebCore.pro:
     16        * bindings/v8/ChildThreadDOMData.cpp: Removed.
     17        * bindings/v8/ChildThreadDOMData.h: Removed.
     18        * bindings/v8/DOMData.cpp:
     19        (WebCore::DOMData::DOMData):
     20        (WebCore::DOMData::getCurrent):
     21        (WebCore::DOMData::getMainThreadStore):
     22        * bindings/v8/DOMData.h:
     23        (WebCore::DOMData::getStore):
     24        (WebCore::DOMData::getCurrentMainThreadStore):
     25        (WebCore::DOMData::handleWeakObject):
     26        * bindings/v8/DOMDataStore.cpp:
     27        (WebCore::DOMDataStore::DOMDataStore):
     28        (WebCore::DOMDataStore::~DOMDataStore):
     29        (WebCore::DOMDataStore::weakNodeCallback):
     30        * bindings/v8/DOMDataStore.h:
     31        * bindings/v8/MainThreadDOMData.cpp: Removed.
     32        * bindings/v8/MainThreadDOMData.h: Removed.
     33        * bindings/v8/V8DOMMap.cpp:
     34        (WebCore::getDOMDataStore):
     35        (WebCore::removeAllDOMObjects):
     36        (WebCore::visitDOMNodes):
     37        (WebCore::visitDOMObjects):
     38        (WebCore::visitActiveDOMObjects):
     39        (WebCore::visitDOMSVGElementInstances):
     40        * bindings/v8/V8DOMMap.h:
     41        * bindings/v8/V8GCController.cpp:
     42        (WebCore::V8GCController::gcPrologue):
     43        (WebCore::V8GCController::gcEpilogue):
     44        * bindings/v8/WorkerScriptController.cpp:
     45        (WebCore::WorkerScriptController::~WorkerScriptController):
     46
    1472011-06-08  Yael Aharon  <yael.aharon@nokia.com>
    248
  • trunk/Source/WebCore/WebCore.gypi

    r88348 r88357  
    19541954            'bindings/objc/PublicDOMInterfaces.h',
    19551955            'bindings/objc/WebScriptObject.mm',
    1956             'bindings/v8/ChildThreadDOMData.cpp',
    1957             'bindings/v8/ChildThreadDOMData.h',
    19581956            'bindings/v8/DOMData.cpp',
    19591957            'bindings/v8/DOMData.h',
     
    19711969            'bindings/v8/JavaScriptCallFrame.cpp',
    19721970            'bindings/v8/JavaScriptCallFrame.h',
    1973             'bindings/v8/MainThreadDOMData.cpp',
    1974             'bindings/v8/MainThreadDOMData.h',
    19751971            'bindings/v8/NPV8Object.cpp',
    19761972            'bindings/v8/NPV8Object.h',
  • trunk/Source/WebCore/WebCore.pro

    r88343 r88357  
    8989        bindings/v8/custom/V8Uint32ArrayCustom.cpp \
    9090        \
    91         bindings/v8/ChildThreadDOMData.cpp \
    9291        bindings/v8/DateExtension.cpp \
    9392        bindings/v8/DOMData.cpp \
    9493        bindings/v8/DOMDataStore.cpp \
    95         bindings/v8/MainThreadDOMData.cpp \
    9694        bindings/v8/NPV8Object.cpp \
    9795        bindings/v8/PageScriptDebugServer.cpp \
  • trunk/Source/WebCore/bindings/v8/DOMData.cpp

    r88273 r88357  
    3131#include "config.h"
    3232#include "DOMData.h"
    33 
    34 #include "ChildThreadDOMData.h"
    35 #include "MainThreadDOMData.h"
     33#include "V8IsolatedContext.h"
    3634#include "WebGLContextAttributes.h"
    3735#include "WebGLUniformLocation.h"
     
    4038
    4139DOMData::DOMData()
    42     : m_owningThread(WTF::currentThread())
     40    : m_defaultStore(this)
    4341{
    4442}
     
    5048DOMData* DOMData::getCurrent()
    5149{
    52     if (WTF::isMainThread())
    53         return MainThreadDOMData::getCurrent();
     50    DEFINE_STATIC_LOCAL(DOMData, mainThreadDOMData, ());
     51    return &mainThreadDOMData;
     52}
    5453
    55     DEFINE_STATIC_LOCAL(WTF::ThreadSpecific<ChildThreadDOMData>, childThreadDOMData, ());
    56     return childThreadDOMData;
     54DOMDataStore& DOMData::getMainThreadStore()
     55{
     56    // This is broken out as a separate non-virtual method from getStore()
     57    // so that it can be inlined by getCurrentMainThreadStore, which is
     58    // a hot spot in Dromaeo DOM tests.
     59    V8IsolatedContext* context = V8IsolatedContext::getEntered();
     60    if (UNLIKELY(context != 0))
     61        return *context->world()->domDataStore();
     62    return m_defaultStore;
    5763}
    5864
     
    6268}
    6369
     70
     71
    6472} // namespace WebCore
  • trunk/Source/WebCore/bindings/v8/DOMData.h

    r88273 r88357  
    3333
    3434#include "DOMDataStore.h"
     35#include "StaticDOMDataStore.h"
    3536#include "V8DOMWrapper.h"
    3637
     
    5152
    5253        static DOMData* getCurrent();
    53         virtual DOMDataStore& getStore() = 0;
     54        DOMDataStore& getStore() { return getMainThreadStore(); }
    5455
    5556        template<typename T>
     
    5960        static void removeObjectsFromWrapperMap(DOMDataStore* store, AbstractWeakReferenceMap<T, v8::Object>& domMap);
    6061
    61         ThreadIdentifier owningThread() const { return m_owningThread; }
     62        static DOMDataStore& getCurrentMainThreadStore() { return getCurrent()->getMainThreadStore(); }
    6263
    6364    private:
     
    7576        };
    7677
    77         ThreadIdentifier m_owningThread;
     78        DOMDataStore& getMainThreadStore();
     79        StaticDOMDataStore m_defaultStore;
    7880    };
    7981
     
    8688        for (size_t i = 0; i < list.size(); ++i) {
    8789            DOMDataStore* store = list[i];
    88             ASSERT(store->domData()->owningThread() == WTF::currentThread());
    8990
    9091            DOMWrapperMap<T>* domMap = static_cast<DOMWrapperMap<T>*>(store->getDOMWrapperMap(mapType));
  • trunk/Source/WebCore/bindings/v8/DOMDataStore.cpp

    r88273 r88357  
    9292    , m_domData(domData)
    9393{
    94     WTF::MutexLocker locker(DOMDataStore::allStoresMutex());
    9594    DOMDataStore::allStores().append(this);
    9695}
     
    9897DOMDataStore::~DOMDataStore()
    9998{
    100     WTF::MutexLocker locker(DOMDataStore::allStoresMutex());
    10199    DOMDataStore::allStores().remove(DOMDataStore::allStores().find(this));
    102100}
     
    106104  DEFINE_STATIC_LOCAL(DOMDataList, staticDOMDataList, ());
    107105  return staticDOMDataList;
    108 }
    109 
    110 WTF::Mutex& DOMDataStore::allStoresMutex()
    111 {
    112     DEFINE_STATIC_LOCAL(WTF::Mutex, staticDOMDataListMutex, ());
    113     return staticDOMDataListMutex;
    114106}
    115107
     
    157149    v8::Persistent<v8::Object> v8Object = v8::Persistent<v8::Object>::Cast(value);
    158150
    159     WTF::MutexLocker locker(DOMDataStore::allStoresMutex());
    160151    DOMDataList& list = DOMDataStore::allStores();
    161152    for (size_t i = 0; i < list.size(); ++i) {
    162153        DOMDataStore* store = list[i];
    163154        if (store->domNodeMap().removeIfPresent(node, v8Object)) {
    164             ASSERT(store->domData()->owningThread() == WTF::currentThread());
    165155            node->deref(); // Nobody overrides Node::deref so it's safe
    166156            return; // There might be at most one wrapper for the node in world's maps
  • trunk/Source/WebCore/bindings/v8/DOMDataStore.h

    r88273 r88357  
    7878        // A list of all DOMDataStore objects in the current V8 instance (thread). Normally, each World has a DOMDataStore.
    7979        static DOMDataList& allStores();
    80         // Mutex to protect against concurrent access of DOMDataList.
    81         static WTF::Mutex& allStoresMutex();
    8280
    8381        DOMData* domData() const { return m_domData; }
  • trunk/Source/WebCore/bindings/v8/V8DOMMap.cpp

    r88273 r88357  
    3434#include "DOMData.h"
    3535#include "DOMDataStore.h"
    36 #include "MainThreadDOMData.h"
    3736#include "ScopedDOMDataStore.h"
    3837
     
    5251static inline DOMDataStore& getDOMDataStore()
    5352{
    54     if (LIKELY(fasterDOMStoreAccess)) {
    55         ASSERT(WTF::isMainThread());
    56         return MainThreadDOMData::getCurrentMainThreadStore();
    57     }
    58 
    59     return DOMData::getCurrent()->getStore();
     53    return DOMData::getCurrentMainThreadStore();
    6054}
    6155
     
    8983#endif // ENABLE(SVG)
    9084
    91 void removeAllDOMObjectsInCurrentThread()
     85void removeAllDOMObjects()
    9286{
    9387    DOMDataStore& store = getDOMDataStore();
     
    113107}
    114108
    115 void visitDOMNodesInCurrentThread(DOMWrapperMap<Node>::Visitor* visitor)
     109void visitDOMNodes(DOMWrapperMap<Node>::Visitor* visitor)
    116110{
    117111    v8::HandleScope scope;
    118112
    119     WTF::MutexLocker locker(DOMDataStore::allStoresMutex());
    120113    DOMDataList& list = DOMDataStore::allStores();
    121114    for (size_t i = 0; i < list.size(); ++i) {
    122115        DOMDataStore* store = list[i];
    123         if (!store->domData()->owningThread() == WTF::currentThread())
    124             continue;
    125116
    126117        store->domNodeMap().visit(store, visitor);
     
    128119}
    129120
    130 void visitDOMObjectsInCurrentThread(DOMWrapperMap<void>::Visitor* visitor)
     121void visitDOMObjects(DOMWrapperMap<void>::Visitor* visitor)
    131122{
    132123    v8::HandleScope scope;
    133124
    134     WTF::MutexLocker locker(DOMDataStore::allStoresMutex());
    135125    DOMDataList& list = DOMDataStore::allStores();
    136126    for (size_t i = 0; i < list.size(); ++i) {
    137127        DOMDataStore* store = list[i];
    138         if (!store->domData()->owningThread() == WTF::currentThread())
    139             continue;
    140128
    141129        store->domObjectMap().visit(store, visitor);
     
    143131}
    144132
    145 void visitActiveDOMObjectsInCurrentThread(DOMWrapperMap<void>::Visitor* visitor)
     133void visitActiveDOMObjects(DOMWrapperMap<void>::Visitor* visitor)
    146134{
    147135    v8::HandleScope scope;
    148136
    149     WTF::MutexLocker locker(DOMDataStore::allStoresMutex());
    150137    DOMDataList& list = DOMDataStore::allStores();
    151138    for (size_t i = 0; i < list.size(); ++i) {
    152139        DOMDataStore* store = list[i];
    153         if (!store->domData()->owningThread() == WTF::currentThread())
    154             continue;
    155140
    156141        store->activeDomObjectMap().visit(store, visitor);
     
    160145#if ENABLE(SVG)
    161146
    162 void visitDOMSVGElementInstancesInCurrentThread(DOMWrapperMap<SVGElementInstance>::Visitor* visitor)
     147void visitDOMSVGElementInstances(DOMWrapperMap<SVGElementInstance>::Visitor* visitor)
    163148{
    164149    v8::HandleScope scope;
    165150
    166     WTF::MutexLocker locker(DOMDataStore::allStoresMutex());
    167151    DOMDataList& list = DOMDataStore::allStores();
    168152    for (size_t i = 0; i < list.size(); ++i) {
    169153        DOMDataStore* store = list[i];
    170         if (!store->domData()->owningThread() == WTF::currentThread())
    171             continue;
    172154
    173155        store->domSvgElementInstanceMap().visit(store, visitor);
  • trunk/Source/WebCore/bindings/v8/V8DOMMap.h

    r88273 r88357  
    159159    // A map from DOM node to its JS wrapper.
    160160    DOMNodeMapping& getDOMNodeMap();
    161     void visitDOMNodesInCurrentThread(DOMWrapperMap<Node>::Visitor*);
     161    void visitDOMNodes(DOMWrapperMap<Node>::Visitor*);
    162162
    163163    // A map from a DOM object (non-node) to its JS wrapper. This map does not contain the DOM objects which can have pending activity (active dom objects).
    164164    DOMWrapperMap<void>& getDOMObjectMap();
    165     void visitDOMObjectsInCurrentThread(DOMWrapperMap<void>::Visitor*);
     165    void visitDOMObjects(DOMWrapperMap<void>::Visitor*);
    166166
    167167    // A map from a DOM object to its JS wrapper for DOM objects which can have pending activity.
    168168    DOMWrapperMap<void>& getActiveDOMObjectMap();
    169     void visitActiveDOMObjectsInCurrentThread(DOMWrapperMap<void>::Visitor*);
     169    void visitActiveDOMObjects(DOMWrapperMap<void>::Visitor*);
    170170
    171171    // This should be called to remove all DOM objects associated with the current thread when it is tearing down.
    172     void removeAllDOMObjectsInCurrentThread();
     172    void removeAllDOMObjects();
    173173
    174174#if ENABLE(SVG)
    175175    // A map for SVGElementInstances to its JS wrapper.
    176176    DOMWrapperMap<SVGElementInstance>& getDOMSVGElementInstanceMap();
    177     void visitSVGElementInstancesInCurrentThread(DOMWrapperMap<SVGElementInstance>::Visitor*);
     177    void visitSVGElementInstances(DOMWrapperMap<SVGElementInstance>::Visitor*);
    178178#endif
    179179
  • trunk/Source/WebCore/bindings/v8/V8GCController.cpp

    r88273 r88357  
    453453#ifndef NDEBUG
    454454    DOMObjectVisitor domObjectVisitor;
    455     visitDOMObjectsInCurrentThread(&domObjectVisitor);
     455    visitDOMObjects(&domObjectVisitor);
    456456#endif
    457457
     
    459459    // wrappers non weak if there is pending activity.
    460460    GCPrologueVisitor prologueVisitor;
    461     visitActiveDOMObjectsInCurrentThread(&prologueVisitor);
     461    visitActiveDOMObjects(&prologueVisitor);
    462462
    463463    // Create object groups.
    464464    GrouperVisitor grouperVisitor;
    465     visitDOMNodesInCurrentThread(&grouperVisitor);
    466     visitDOMObjectsInCurrentThread(&grouperVisitor);
     465    visitDOMNodes(&grouperVisitor);
     466    visitDOMObjects(&grouperVisitor);
    467467    grouperVisitor.applyGrouping();
    468468
     
    530530    // again.
    531531    GCEpilogueVisitor epilogueVisitor;
    532     visitActiveDOMObjectsInCurrentThread(&epilogueVisitor);
     532    visitActiveDOMObjects(&epilogueVisitor);
    533533
    534534    workingSetEstimateMB = getActualMemoryUsageInMB();
     
    537537    // Check all survivals are weak.
    538538    DOMObjectVisitor domObjectVisitor;
    539     visitDOMObjectsInCurrentThread(&domObjectVisitor);
     539    visitDOMObjects(&domObjectVisitor);
    540540
    541541    EnsureWeakDOMNodeVisitor weakDOMNodeVisitor;
    542     visitDOMNodesInCurrentThread(&weakDOMNodeVisitor);
     542    visitDOMNodes(&weakDOMNodeVisitor);
    543543
    544544    enumerateGlobalHandles();
  • trunk/Source/WebCore/bindings/v8/WorkerScriptController.cpp

    r88273 r88357  
    5959WorkerScriptController::~WorkerScriptController()
    6060{
    61     removeAllDOMObjectsInCurrentThread();
     61    removeAllDOMObjects();
    6262}
    6363
Note: See TracChangeset for help on using the changeset viewer.