Changeset 91814 in webkit
- Timestamp:
- Jul 26, 2011 7:41:13 PM (13 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r91812 r91814 1 2011-07-26 Dmitry Lomov <dslomov@google.com> 2 3 [V8][Chromium] Run workers in a separate v8::Isolate 4 https://bugs.webkit.org/show_bug.cgi?id=65004 5 This patch allocates a new v8::Isolate for every worker and enters it on worker thread. 6 7 Reviewed by David Levin. 8 9 Covered by existing chromium tests. 10 11 * bindings/v8/DOMDataStore.cpp: 12 (WebCore::DOMDataStore::DOMDataStore): 13 (WebCore::DOMDataStore::~DOMDataStore): 14 * bindings/v8/StaticDOMDataStore.cpp: 15 (WebCore::StaticDOMDataStore::StaticDOMDataStore): 16 (WebCore::StaticDOMDataStore::~StaticDOMDataStore): 17 * bindings/v8/StaticDOMDataStore.h: 18 * bindings/v8/V8Binding.h: 19 (WebCore::V8BindingPerIsolateData::registerDOMDataStore): 20 (WebCore::V8BindingPerIsolateData::unregisterDOMDataStore): 21 * bindings/v8/V8DOMMap.cpp: 22 (WebCore::DOMDataStoreHandle::DOMDataStoreHandle): 23 (WebCore::DOMDataStoreHandle::~DOMDataStoreHandle): 24 * bindings/v8/WorkerContextExecutionProxy.cpp: 25 (WebCore::WorkerContextExecutionProxy::WorkerContextExecutionProxy): 26 (WebCore::WorkerContextExecutionProxy::initV8): 27 * bindings/v8/WorkerContextExecutionProxy.h: 28 * bindings/v8/WorkerScriptController.cpp: 29 (WebCore::WorkerScriptController::WorkerScriptController): 30 (WebCore::WorkerScriptController::~WorkerScriptController): 31 * bindings/v8/WorkerScriptController.h: 32 1 33 2011-07-26 James Robinson <jamesr@chromium.org> 2 34 -
trunk/Source/WebCore/bindings/v8/DOMDataStore.cpp
r91641 r91814 92 92 #endif 93 93 { 94 DOMDataStore::allStores().append(this);95 94 } 96 95 97 96 DOMDataStore::~DOMDataStore() 98 97 { 99 DOMDataStore::allStores().remove(DOMDataStore::allStores().find(this));100 98 } 101 99 -
trunk/Source/WebCore/bindings/v8/StaticDOMDataStore.cpp
r90931 r91814 31 31 #include "config.h" 32 32 #include "StaticDOMDataStore.h" 33 #include "V8Binding.h" 33 34 34 35 namespace WebCore { … … 49 50 m_domSvgElementInstanceMap = &m_staticDomSvgElementInstanceMap; 50 51 #endif 52 V8BindingPerIsolateData::current()->registerDOMDataStore(this); 53 } 54 55 StaticDOMDataStore::~StaticDOMDataStore() 56 { 57 V8BindingPerIsolateData::current()->unregisterDOMDataStore(this); 51 58 } 52 59 -
trunk/Source/WebCore/bindings/v8/StaticDOMDataStore.h
r90931 r91814 48 48 public: 49 49 StaticDOMDataStore(); 50 virtual ~StaticDOMDataStore(); 50 51 51 52 private: -
trunk/Source/WebCore/bindings/v8/V8Binding.cpp
r91641 r91814 50 50 51 51 V8BindingPerIsolateData::V8BindingPerIsolateData(v8::Isolate* isolate) 52 : m_ DOMDataStore(0)52 : m_domDataStore(0) 53 53 { 54 54 } -
trunk/Source/WebCore/bindings/v8/V8Binding.h
r91300 r91814 110 110 StringCache* stringCache() { return &m_stringCache; } 111 111 112 DOMDataList& allStores() { return m_DOMDataList; } 113 114 DOMDataStore* domDataStore() { return m_DOMDataStore; } 112 DOMDataList& allStores() { return m_domDataList; } 113 114 void registerDOMDataStore(DOMDataStore* domDataStore) 115 { 116 m_domDataList.append(domDataStore); 117 } 118 119 void unregisterDOMDataStore(DOMDataStore* domDataStore) 120 { 121 ASSERT(m_domDataList.find(domDataStore)); 122 m_domDataList.remove(m_domDataList.find(domDataStore)); 123 } 124 125 126 DOMDataStore* domDataStore() { return m_domDataStore; } 115 127 // DOMDataStore is owned outside V8BindingPerIsolateData. 116 void setDOMDataStore(DOMDataStore* store) { m_ DOMDataStore = store; }128 void setDOMDataStore(DOMDataStore* store) { m_domDataStore = store; } 117 129 118 130 private: … … 126 138 StringCache m_stringCache; 127 139 128 DOMDataList m_ DOMDataList;129 DOMDataStore* m_ DOMDataStore;140 DOMDataList m_domDataList; 141 DOMDataStore* m_domDataStore; 130 142 }; 131 143 -
trunk/Source/WebCore/bindings/v8/V8DOMMap.cpp
r91641 r91814 35 35 #include "DOMDataStore.h" 36 36 #include "ScopedDOMDataStore.h" 37 #include "V8Binding.h" 37 38 38 39 namespace WebCore { … … 41 42 : m_store(adoptPtr(new ScopedDOMDataStore())) 42 43 { 44 V8BindingPerIsolateData::current()->registerDOMDataStore(m_store.get()); 43 45 } 44 46 45 47 DOMDataStoreHandle::~DOMDataStoreHandle() 46 48 { 49 V8BindingPerIsolateData::current()->unregisterDOMDataStore(m_store.get()); 47 50 } 48 51 -
trunk/Source/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp
r89390 r91814 84 84 , m_recursion(0) 85 85 { 86 initV8 IfNeeded();86 initV8(); 87 87 } 88 88 … … 109 109 } 110 110 111 void WorkerContextExecutionProxy::initV8IfNeeded() 112 { 113 static bool v8Initialized = false; 114 115 if (v8Initialized) 116 return; 117 111 void WorkerContextExecutionProxy::initV8() 112 { 118 113 // Tell V8 not to call the default OOM handler, binding code will handle it. 119 114 v8::V8::IgnoreOutOfMemoryException(); … … 126 121 127 122 V8BindingPerIsolateData::ensureInitialized(v8::Isolate::GetCurrent()); 128 129 v8Initialized = true;130 123 } 131 124 -
trunk/Source/WebCore/bindings/v8/WorkerContextExecutionProxy.h
r71735 r91814 74 74 75 75 private: 76 void initV8 IfNeeded();76 void initV8(); 77 77 bool initContextIfNeeded(); 78 78 void dispose(); -
trunk/Source/WebCore/bindings/v8/WorkerScriptController.cpp
r88357 r91814 52 52 WorkerScriptController::WorkerScriptController(WorkerContext* workerContext) 53 53 : m_workerContext(workerContext) 54 , m_ proxy(adoptPtr(new WorkerContextExecutionProxy(workerContext)))54 , m_isolate(v8::Isolate::New()) 55 55 , m_executionForbidden(false) 56 56 { 57 V8BindingPerIsolateData* data = V8BindingPerIsolateData::create(m_isolate); 58 data->allStores().append(&m_DOMDataStore); 59 data->setDOMDataStore(&m_DOMDataStore); 60 m_isolate->Enter(); 61 m_proxy = adoptPtr(new WorkerContextExecutionProxy(workerContext)); 57 62 } 58 63 … … 60 65 { 61 66 removeAllDOMObjects(); 67 m_proxy.clear(); 68 m_isolate->Exit(); 69 V8BindingPerIsolateData::dispose(m_isolate); 70 m_isolate->Dispose(); 62 71 } 63 72 -
trunk/Source/WebCore/bindings/v8/WorkerScriptController.h
r83900 r91814 34 34 #if ENABLE(WORKERS) 35 35 36 #include "ScopedDOMDataStore.h" 37 #include "V8Binding.h" 38 39 #include <v8.h> 36 40 #include <wtf/OwnPtr.h> 37 41 #include <wtf/Threading.h> … … 75 79 WorkerContext* m_workerContext; 76 80 OwnPtr<WorkerContextExecutionProxy> m_proxy; 81 v8::Isolate* m_isolate; 82 ScopedDOMDataStore m_DOMDataStore; 77 83 bool m_executionForbidden; 78 84 };
Note: See TracChangeset
for help on using the changeset viewer.