Changeset 54341 in webkit
- Timestamp:
- Feb 4, 2010 4:57:15 AM (14 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r54337 r54341 1 2010-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 1 17 2010-02-04 Holger Hans Peter Freyther <zecke@selfish.org> 2 18 -
trunk/WebCore/bindings/v8/DOMData.h
r53944 r54341 113 113 } 114 114 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 123 115 } // namespace WebCore 124 116 -
trunk/WebCore/bindings/v8/DOMDataStore.h
r53944 r54341 85 85 } 86 86 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 108 87 void visit(typename Traits::Visitor* visitor) 109 88 { … … 122 101 T m_entries[CHUNK_SIZE]; 123 102 }; 124 125 static void clearEntries(T* first, T* last)126 {127 for (T* entry = first; entry < last; entry++)128 Traits::clear(entry);129 }130 103 131 104 static void visitEntries(T* first, T* last, typename Traits::Visitor* visitor) … … 209 182 virtual bool removeIfPresent(Node* key, v8::Persistent<v8::Data> value); 210 183 211 virtual void clear()212 {213 m_table.clear();214 }215 216 184 private: 217 185 static int const numberOfEntries = (1 << 10) - 1; … … 228 196 } 229 197 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 239 198 static void visit(v8::Persistent<v8::Object>* entry, Visitor* visitor) 240 199 { -
trunk/WebCore/bindings/v8/V8DOMMap.cpp
r53944 r54341 96 96 #endif // ENABLE(SVG) 97 97 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 #endif117 }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 } else133 removeAllDOMObjectsInCurrentThreadHelper();134 }135 136 137 98 void visitDOMNodesInCurrentThread(DOMWrapperMap<Node>::Visitor* visitor) 138 99 { -
trunk/WebCore/bindings/v8/V8DOMMap.h
r54218 r54341 59 59 virtual void visit(Visitor* visitor) = 0; 60 60 virtual bool removeIfPresent(KeyType* key, v8::Persistent<v8::Data> value) = 0; 61 virtual void clear() = 0;62 61 63 62 v8::WeakReferenceCallback weakReferenceCallback() { return m_weakReferenceCallback; } … … 120 119 } 121 120 122 void clear()123 {124 m_map.clear();125 }126 127 121 bool contains(KeyType* obj) { return m_map.contains(obj); } 128 122 … … 171 165 void visitActiveDOMObjectsInCurrentThread(DOMWrapperMap<void>::Visitor*); 172 166 173 // This should be called to remove all DOM objects associated with the current thread when it is tearing down.174 void removeAllDOMObjectsInCurrentThread();175 176 167 #if ENABLE(SVG) 177 168 // A map for SVGElementInstances to its JS wrapper. -
trunk/WebCore/bindings/v8/WorkerScriptController.cpp
r46507 r54341 58 58 WorkerScriptController::~WorkerScriptController() 59 59 { 60 removeAllDOMObjectsInCurrentThread();61 60 } 62 61
Note: See TracChangeset
for help on using the changeset viewer.