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

Unified Diff: src/api.cc

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/api.h ('k') | src/arm/assembler-arm.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/api.cc
===================================================================
--- src/api.cc (revision 3427)
+++ src/api.cc (working copy)
@@ -63,13 +63,15 @@
#define EXCEPTION_PREAMBLE() \
- thread_local.IncrementCallDepth(); \
+ v8_context()->handle_scope_implementer_.IncrementCallDepth(); \
ASSERT(!i::Top::external_caught_exception()); \
bool has_pending_exception = false
#define EXCEPTION_BAILOUT_CHECK(value) \
do { \
+ i::HandleScopeImplementer& thread_local = \
+ v8_context()->handle_scope_implementer_; \
thread_local.DecrementCallDepth(); \
if (has_pending_exception) { \
if (thread_local.CallDepthIsZero() && i::Top::is_out_of_memory()) { \
@@ -95,13 +97,11 @@
// --- D a t a t h a t i s s p e c i f i c t o a t h r e a d ---
-static i::HandleScopeImplementer thread_local;
-// --- E x c e p t i o n B e h a v i o r ---
-static FatalErrorCallback exception_behavior = NULL;
+
int i::Internals::kJSObjectType = JS_OBJECT_TYPE;
int i::Internals::kFirstNonstringType = FIRST_NONSTRING_TYPE;
int i::Internals::kProxyType = PROXY_TYPE;
@@ -114,11 +114,12 @@
-static FatalErrorCallback& GetFatalErrorHandler() {
- if (exception_behavior == NULL) {
- exception_behavior = DefaultFatalErrorHandler;
+static FatalErrorCallback GetFatalErrorHandler() {
+ internal::V8Data& v8_data = v8_context()->v8_data_;
+ if (v8_data.exception_behavior() == NULL) {
+ v8_data.exception_behavior(DefaultFatalErrorHandler);
}
- return exception_behavior;
+ return v8_data.exception_behavior();
}
@@ -180,7 +181,7 @@
void V8::SetFatalErrorHandler(FatalErrorCallback that) {
- exception_behavior = that;
+ v8_context()->v8_data_.exception_behavior(that);
}
@@ -248,7 +249,6 @@
// --- S t a t i c s ---
-static i::StringInputBuffer write_input_buffer;
static inline bool EnsureInitialized(const char* location) {
@@ -264,7 +264,7 @@
ImplementationUtilities::HandleScopeData*
ImplementationUtilities::CurrentHandleScope() {
- return &i::HandleScope::current_;
+ return &v8_context()->handle_scope_data_;
}
@@ -326,7 +326,6 @@
RegisteredExtension* RegisteredExtension::first_extension_ = NULL;
-
RegisteredExtension::RegisteredExtension(Extension* extension)
: extension_(extension), state_(UNVISITED) { }
@@ -336,7 +335,6 @@
RegisteredExtension::first_extension_ = that;
}
-
void RegisterExtension(Extension* that) {
RegisteredExtension* extension = new RegisteredExtension(that);
RegisteredExtension::Register(extension);
@@ -472,6 +470,8 @@
if (IsDeadCheck("v8::Context::Enter()")) return;
ENTER_V8;
i::Handle<i::Context> env = Utils::OpenHandle(this);
+ i::HandleScopeImplementer& thread_local =
+ v8_context()->handle_scope_implementer_;
thread_local.EnterContext(env);
thread_local.SaveContext(i::Top::context());
@@ -481,6 +481,8 @@
void Context::Exit() {
if (!i::V8::IsRunning()) return;
+ i::HandleScopeImplementer& thread_local =
+ v8_context()->handle_scope_implementer_;
if (!ApiCheck(thread_local.LeaveLastContext(),
"v8::Context::Exit()",
"Cannot exit non-entered context")) {
@@ -664,9 +666,6 @@
}
-// To distinguish the function templates, so that we can find them in the
-// function cache of the global context.
-static int next_serial_number = 0;
Local<FunctionTemplate> FunctionTemplate::New(InvocationCallback callback,
@@ -679,7 +678,8 @@
i::Handle<i::FunctionTemplateInfo> obj =
i::Handle<i::FunctionTemplateInfo>::cast(struct_obj);
InitializeFunctionTemplate(obj);
- obj->set_serial_number(i::Smi::FromInt(next_serial_number++));
+ obj->set_serial_number(i::Smi::FromInt(
+ v8_context()->api_data_.next_serial_number_++));
if (callback != 0) {
if (data.IsEmpty()) data = v8::Undefined();
Utils::ToLocal(obj)->SetCallHandler(callback, data);
@@ -2462,6 +2462,8 @@
LOG_API("String::WriteUtf8");
ENTER_V8;
i::Handle<i::String> str = Utils::OpenHandle(this);
+ i::StringInputBuffer& write_input_buffer =
+ v8_context()->api_data_.write_input_buffer_;
write_input_buffer.Reset(0, *str);
int len = str->length();
// Encode the first K - 3 bytes directly into the buffer since we
@@ -2512,6 +2514,8 @@
if ( (length == -1) || (length > str->length() - start) )
end = str->length() - start;
if (end < 0) return 0;
+ i::StringInputBuffer& write_input_buffer = v8_context()->api_data_.
+ write_input_buffer_;
write_input_buffer.Reset(start, *str);
int i;
for (i = 0; i < end; i++) {
@@ -2713,7 +2717,8 @@
const char* v8::V8::GetVersion() {
- static v8::internal::EmbeddedVector<char, 128> buffer;
+ v8::internal::EmbeddedVector<char, 128>& buffer =
+ v8_context()->api_data_.buffer_;
v8::internal::Version::GetString(buffer);
return buffer.start();
}
@@ -2845,7 +2850,8 @@
v8::Local<v8::Context> Context::GetEntered() {
if (IsDeadCheck("v8::Context::GetEntered()")) return Local<Context>();
- i::Handle<i::Object> last = thread_local.LastEnteredContext();
+ i::Handle<i::Object> last =
+ v8_context()->handle_scope_implementer_.LastEnteredContext();
if (last.is_null()) return Local<Context>();
i::Handle<i::Context> context = i::Handle<i::Context>::cast(last);
return Utils::ToLocal(context);
@@ -3097,7 +3103,7 @@
if (resource != NULL) {
const int total_size =
static_cast<int>(resource->length() * sizeof(*resource->data()));
- i::Counters::total_external_string_memory.Decrement(total_size);
+ DECREMENT_COUNTER(total_external_string_memory, total_size);
// The object will continue to live in the JavaScript heap until the
// handle is entirely cleaned out by the next GC. For example the
@@ -3128,7 +3134,7 @@
if (resource != NULL) {
const int total_size =
static_cast<int>(resource->length() * sizeof(*resource->data()));
- i::Counters::total_external_string_memory.Decrement(total_size);
+ DECREMENT_COUNTER(total_external_string_memory, total_size);
// The object will continue to live in the JavaScript heap until the
// handle is entirely cleaned out by the next GC. For example the
@@ -3151,7 +3157,7 @@
ENTER_V8;
const int total_size =
static_cast<int>(resource->length() * sizeof(*resource->data()));
- i::Counters::total_external_string_memory.Increment(total_size);
+ INCREMENT_COUNTER(total_external_string_memory, total_size);
i::Handle<i::String> result = NewExternalStringHandle(resource);
i::Handle<i::Object> handle = i::GlobalHandles::Create(*result);
i::GlobalHandles::MakeWeak(handle.location(),
@@ -3187,7 +3193,7 @@
ENTER_V8;
const int total_size =
static_cast<int>(resource->length() * sizeof(*resource->data()));
- i::Counters::total_external_string_memory.Increment(total_size);
+ INCREMENT_COUNTER(total_external_string_memory, total_size);
i::Handle<i::String> result = NewExternalAsciiStringHandle(resource);
i::Handle<i::Object> handle = i::GlobalHandles::Create(*result);
i::GlobalHandles::MakeWeak(handle.location(),
@@ -3350,7 +3356,7 @@
void V8::IgnoreOutOfMemoryException() {
- thread_local.set_ignore_out_of_memory(true);
+ v8_context()->handle_scope_implementer_.set_ignore_out_of_memory(true);
}
@@ -3836,17 +3842,17 @@
HandleScopeImplementer* HandleScopeImplementer::instance() {
- return &thread_local;
+ return &v8_context()->handle_scope_implementer_;
}
void HandleScopeImplementer::FreeThreadResources() {
- thread_local.Free();
+ v8_context()->handle_scope_implementer_.Free();
}
char* HandleScopeImplementer::ArchiveThread(char* storage) {
- return thread_local.ArchiveThreadHelper(storage);
+ return v8_context()->handle_scope_implementer_.ArchiveThreadHelper(storage);
}
@@ -3864,12 +3870,12 @@
int HandleScopeImplementer::ArchiveSpacePerThread() {
- return sizeof(thread_local);
+ return sizeof(HandleScopeImplementer);
}
char* HandleScopeImplementer::RestoreThread(char* storage) {
- return thread_local.RestoreThreadHelper(storage);
+ return v8_context()->handle_scope_implementer_.RestoreThreadHelper(storage);
}
@@ -3902,8 +3908,10 @@
void HandleScopeImplementer::Iterate(ObjectVisitor* v) {
v8::ImplementationUtilities::HandleScopeData* current =
v8::ImplementationUtilities::CurrentHandleScope();
- thread_local.handle_scope_data_ = *current;
- thread_local.IterateThis(v);
+ HandleScopeImplementer& handle_scope_implementer =
+ v8_context()->handle_scope_implementer_;
+ handle_scope_implementer.handle_scope_data_ = *current;
+ handle_scope_implementer.IterateThis(v);
}
« no previous file with comments | « src/api.h ('k') | src/arm/assembler-arm.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698