Changeset 54341 in webkit


Ignore:
Timestamp:
Feb 4, 2010 4:57:15 AM (14 years ago)
Author:
eric@webkit.org
Message:

2010-02-04 Anton Muhin <antonm@chromium.org>

Reviewed by Adam Barth.

[v8] Remove clear method from DOM object maps
https://bugs.webkit.org/show_bug.cgi?id=34530

No new tests. Should be covered by existent testing infrastructure.

  • bindings/v8/DOMData.h:
  • bindings/v8/DOMDataStore.h:
  • bindings/v8/V8DOMMap.cpp:
  • bindings/v8/V8DOMMap.h:
  • bindings/v8/WorkerScriptController.cpp: (WebCore::WorkerScriptController::~WorkerScriptController):
Location:
trunk/WebCore
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r54337 r54341  
     12010-02-04  Anton Muhin  <antonm@chromium.org>
     2
     3        Reviewed by Adam Barth.
     4
     5        [v8] Remove clear method from DOM object maps
     6        https://bugs.webkit.org/show_bug.cgi?id=34530
     7
     8        No new tests. Should be covered by existent testing infrastructure.
     9
     10        * bindings/v8/DOMData.h:
     11        * bindings/v8/DOMDataStore.h:
     12        * bindings/v8/V8DOMMap.cpp:
     13        * bindings/v8/V8DOMMap.h:
     14        * bindings/v8/WorkerScriptController.cpp:
     15        (WebCore::WorkerScriptController::~WorkerScriptController):
     16
    1172010-02-04  Holger Hans Peter Freyther  <zecke@selfish.org>
    218
  • trunk/WebCore/bindings/v8/DOMData.h

    r53944 r54341  
    113113    }
    114114
    115     template<typename T>
    116     void DOMData::removeObjectsFromWrapperMap(AbstractWeakReferenceMap<T, v8::Object>& domMap)
    117     {
    118         WrapperMapObjectRemover<T> remover;
    119         domMap.visit(&remover);
    120         domMap.clear();
    121     }
    122 
    123115} // namespace WebCore
    124116
  • trunk/WebCore/bindings/v8/DOMDataStore.h

    r53944 r54341  
    8585        }
    8686
    87         void clear()
    88         {
    89             if (!m_chunks)
    90                 return;
    91 
    92             clearEntries(m_chunks->m_entries, m_current);
    93             Chunk* last = m_chunks;
    94             while (true) {
    95                 Chunk* previous = last->m_previous;
    96                 if (!previous)
    97                     break;
    98                 delete last;
    99                 clearEntries(previous->m_entries, previous->m_entries + CHUNK_SIZE);
    100                 last = previous;
    101             }
    102 
    103             m_chunks = last;
    104             m_current = m_chunks->m_entries;
    105             m_last = m_current + CHUNK_SIZE;
    106         }
    107 
    10887        void visit(typename Traits::Visitor* visitor)
    10988        {
     
    122101            T m_entries[CHUNK_SIZE];
    123102        };
    124 
    125         static void clearEntries(T* first, T* last)
    126         {
    127             for (T* entry = first; entry < last; entry++)
    128                 Traits::clear(entry);
    129         }
    130103
    131104        static void visitEntries(T* first, T* last, typename Traits::Visitor* visitor)
     
    209182            virtual bool removeIfPresent(Node* key, v8::Persistent<v8::Data> value);
    210183
    211             virtual void clear()
    212             {
    213                 m_table.clear();
    214             }
    215 
    216184        private:
    217185            static int const numberOfEntries = (1 << 10) - 1;
     
    228196                }
    229197
    230                 static void clear(v8::Persistent<v8::Object>* entry)
    231                 {
    232                     Node* node = V8Node::toNative(*entry);
    233                     ASSERT(node->wrapper() == entry);
    234 
    235                     node->clearWrapper();
    236                     entry->Dispose();
    237                 }
    238 
    239198                static void visit(v8::Persistent<v8::Object>* entry, Visitor* visitor)
    240199                {
  • trunk/WebCore/bindings/v8/V8DOMMap.cpp

    r53944 r54341  
    9696#endif // ENABLE(SVG)
    9797
    98 static void removeAllDOMObjectsInCurrentThreadHelper()
    99 {
    100     v8::HandleScope scope;
    101 
    102     // Deref all objects in the delayed queue.
    103     DOMData::getCurrent()->derefDelayedObjects();
    104 
    105     // The DOM objects with the following types only exist on the main thread.
    106     if (WTF::isMainThread()) {
    107         // Remove all DOM nodes.
    108         DOMData::removeObjectsFromWrapperMap<Node>(getDOMNodeMap());
    109 
    110 #if ENABLE(SVG)
    111         // Remove all SVG element instances in the wrapper map.
    112         DOMData::removeObjectsFromWrapperMap<SVGElementInstance>(getDOMSVGElementInstanceMap());
    113 
    114         // Remove all SVG objects with context in the wrapper map.
    115         DOMData::removeObjectsFromWrapperMap<void>(getDOMSVGObjectWithContextMap());
    116 #endif
    117     }
    118 
    119     // Remove all DOM objects in the wrapper map.
    120     DOMData::removeObjectsFromWrapperMap<void>(getDOMObjectMap());
    121 
    122     // Remove all active DOM objects in the wrapper map.
    123     DOMData::removeObjectsFromWrapperMap<void>(getActiveDOMObjectMap());
    124 }
    125 
    126 void removeAllDOMObjectsInCurrentThread()
    127 {
    128     // Use the locker only if it has already been invoked before, as by worker thread.
    129     if (v8::Locker::IsActive()) {
    130         v8::Locker locker;
    131         removeAllDOMObjectsInCurrentThreadHelper();
    132     } else
    133         removeAllDOMObjectsInCurrentThreadHelper();
    134 }
    135 
    136 
    13798void visitDOMNodesInCurrentThread(DOMWrapperMap<Node>::Visitor* visitor)
    13899{
  • trunk/WebCore/bindings/v8/V8DOMMap.h

    r54218 r54341  
    5959        virtual void visit(Visitor* visitor) = 0;
    6060        virtual bool removeIfPresent(KeyType* key, v8::Persistent<v8::Data> value) = 0;
    61         virtual void clear() = 0;
    6261
    6362        v8::WeakReferenceCallback weakReferenceCallback() { return m_weakReferenceCallback; }
     
    120119        }
    121120
    122         void clear()
    123         {
    124             m_map.clear();
    125         }
    126 
    127121        bool contains(KeyType* obj) { return m_map.contains(obj); }
    128122
     
    171165    void visitActiveDOMObjectsInCurrentThread(DOMWrapperMap<void>::Visitor*);
    172166
    173     // This should be called to remove all DOM objects associated with the current thread when it is tearing down.
    174     void removeAllDOMObjectsInCurrentThread();
    175 
    176167#if ENABLE(SVG)
    177168    // A map for SVGElementInstances to its JS wrapper.
  • trunk/WebCore/bindings/v8/WorkerScriptController.cpp

    r46507 r54341  
    5858WorkerScriptController::~WorkerScriptController()
    5959{
    60     removeAllDOMObjectsInCurrentThread();
    6160}
    6261
Note: See TracChangeset for help on using the changeset viewer.