Index: third_party/WebKit/Source/core/workers/WorkerBackingThread.h |
diff --git a/third_party/WebKit/Source/core/workers/WorkerBackingThread.h b/third_party/WebKit/Source/core/workers/WorkerBackingThread.h |
index 3895867064b04b7f498ad5f0bde168e433827cbd..afbc4a0509ac1bdcb64a2d2d4975bd60f1734183 100644 |
--- a/third_party/WebKit/Source/core/workers/WorkerBackingThread.h |
+++ b/third_party/WebKit/Source/core/workers/WorkerBackingThread.h |
@@ -18,8 +18,8 @@ |
class WebThreadSupportingGC; |
// WorkerBackingThread represents a WebThread with Oilpan and V8 potentially |
-// shared by multiple WebWorker scripts. A WebWorker needs to call initialize() |
-// to using V8 and Oilpan functionalities, and call detach() when the script |
+// shared by multiple WebWorker scripts. A WebWorker needs to call attach() when |
+// attaching itself to the backing thread, and call detach() when the script |
// no longer needs the thread. |
// A WorkerBackingThread represents a WebThread while a WorkerThread corresponds |
// to a web worker. There is one-to-one correspondence between WorkerThread and |
@@ -37,12 +37,21 @@ |
~WorkerBackingThread(); |
- // initialize() and shutdown() attaches and detaches Oilpan and V8 to / from |
- // the caller worker script, respectively. A worker script must not call |
- // any function after calling shutdown(). |
+ // attach() and detach() attaches and detaches Oilpan and V8 to / from |
+ // the caller worker script, respectively. attach() and detach() increments |
+ // and decrements m_workerScriptCount. attach() initializes Oilpan and V8 |
+ // when m_workerScriptCount is 0. detach() terminates Oilpan and V8 when |
+ // m_workerScriptCount is 1. A worker script must not call any function |
+ // after calling detach(). |
// They should be called from |this| thread. |
- void initialize(); |
- void shutdown(); |
+ void attach(); |
+ void detach(); |
+ |
+ unsigned workerScriptCount() |
+ { |
+ MutexLocker locker(m_mutex); |
+ return m_workerScriptCount; |
+ } |
WebThreadSupportingGC& backingThread() |
{ |
@@ -58,9 +67,14 @@ |
private: |
WorkerBackingThread(const char* name, bool shouldCallGCOnShutdown); |
WorkerBackingThread(WebThread*, bool shouldCallGCOnSHutdown); |
+ void initialize(); |
+ void shutdown(); |
+ // Protects |m_workerScriptCount|. |
+ Mutex m_mutex; |
OwnPtr<WebThreadSupportingGC> m_backingThread; |
v8::Isolate* m_isolate = nullptr; |
+ unsigned m_workerScriptCount = 0; |
bool m_isOwningThread; |
bool m_shouldCallGCOnShutdown; |
}; |