Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(641)

Unified Diff: src/v8threads.h

Issue 435003: Patch for allowing several V8 instances in process:... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 11 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/v8-global-context.cc ('k') | src/v8threads.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/v8threads.h
===================================================================
--- src/v8threads.h (revision 3427)
+++ src/v8threads.h (working copy)
@@ -68,17 +68,65 @@
char* data_;
ThreadState* next_;
ThreadState* previous_;
+ friend class ThreadManagerData;
+};
+// The ContextSwitcher thread is used to schedule regular preemptions to
+// multiple running V8 threads. Generally it is necessary to call
+// StartPreemption if there is more than one thread running. If not, a single
+// JavaScript can take full control of V8 and not allow other threads to run.
+class ContextSwitcher: public Thread {
+ public:
+ // Set the preemption interval for the ContextSwitcher thread.
+ static void StartPreemption(int every_n_ms);
+
+ // Stop sending preemption requests to threads.
+ static void StopPreemption();
+
+ // Preempted thread needs to call back to the ContextSwitcher to acknowledge
+ // the handling of a preemption request.
+ static void PreemptionReceived();
+
+ private:
+ explicit ContextSwitcher(int every_n_ms);
+
+ void Run();
+
+ bool keep_going_;
+ int sleep_ms_;
+};
+
+class ThreadManagerData {
+ int last_id_; // V8 threads are identified through an integer.
+ Mutex* mutex_;
+ ThreadHandle mutex_owner_;
+ ThreadHandle lazily_archived_thread_;
+ ThreadState* lazily_archived_thread_state_;
+
// In the following two lists there is always at least one object on the list.
// The first object is a flying anchor that is only there to simplify linking
// and unlinking.
// Head of linked list of free states.
- static ThreadState* free_anchor_;
+ ThreadState* free_anchor_;
// Head of linked list of states in use.
- static ThreadState* in_use_anchor_;
+ ThreadState* in_use_anchor_;
+
+ // This is the ContextSwitcher singleton. There is at most a single thread
+ // running which delivers preemption events to V8 threads.
+ ContextSwitcher* singleton_;
+
+ Thread::LocalStorageKey thread_state_key_;
+ Thread::LocalStorageKey thread_id_key_;
+
+ friend class ThreadManager;
+ friend class ThreadState;
+ friend class V8Context;
+ friend class ContextSwitcher;
+
+ ThreadManagerData();
+ DISALLOW_COPY_AND_ASSIGN(ThreadManagerData);
};
-
class ThreadManager : public AllStatic {
public:
static void Lock();
@@ -92,7 +140,9 @@
static void Iterate(ObjectVisitor* v);
static void MarkCompactPrologue(bool is_compacting);
static void MarkCompactEpilogue(bool is_compacting);
- static bool IsLockedByCurrentThread() { return mutex_owner_.IsSelf(); }
+ static bool IsLockedByCurrentThread() {
+ return v8_context()->thread_manager_data_.mutex_owner_.IsSelf();
+ }
static int CurrentId();
static void AssignId();
@@ -103,42 +153,8 @@
static const int kInvalidId = -1;
private:
static void EagerlyArchiveThread();
-
- static int last_id_; // V8 threads are identified through an integer.
- static Mutex* mutex_;
- static ThreadHandle mutex_owner_;
- static ThreadHandle lazily_archived_thread_;
- static ThreadState* lazily_archived_thread_state_;
};
-
-// The ContextSwitcher thread is used to schedule regular preemptions to
-// multiple running V8 threads. Generally it is necessary to call
-// StartPreemption if there is more than one thread running. If not, a single
-// JavaScript can take full control of V8 and not allow other threads to run.
-class ContextSwitcher: public Thread {
- public:
- // Set the preemption interval for the ContextSwitcher thread.
- static void StartPreemption(int every_n_ms);
-
- // Stop sending preemption requests to threads.
- static void StopPreemption();
-
- // Preempted thread needs to call back to the ContextSwitcher to acknowledge
- // the handling of a preemption request.
- static void PreemptionReceived();
-
- private:
- explicit ContextSwitcher(int every_n_ms);
-
- void Run();
-
- bool keep_going_;
- int sleep_ms_;
-
- static ContextSwitcher* singleton_;
-};
-
} } // namespace v8::internal
#endif // V8_V8THREADS_H_
« no previous file with comments | « src/v8-global-context.cc ('k') | src/v8threads.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698