| Index: src/api.cc
|
| ===================================================================
|
| --- src/api.cc (revision 8618)
|
| +++ src/api.cc (working copy)
|
| @@ -38,6 +38,7 @@
|
| #include "global-handles.h"
|
| #include "heap-profiler.h"
|
| #include "messages.h"
|
| +#include "natives.h"
|
| #include "parser.h"
|
| #include "platform.h"
|
| #include "profile-generator-inl.h"
|
| @@ -97,13 +98,11 @@
|
| } \
|
| } while (false)
|
|
|
| -// TODO(isolates): Add a parameter to this macro for an isolate.
|
|
|
| -#define API_ENTRY_CHECK(msg) \
|
| +#define API_ENTRY_CHECK(isolate, msg) \
|
| do { \
|
| if (v8::Locker::IsActive()) { \
|
| - ApiCheck(i::Isolate::Current()->thread_manager()-> \
|
| - IsLockedByCurrentThread(), \
|
| + ApiCheck(isolate->thread_manager()->IsLockedByCurrentThread(), \
|
| msg, \
|
| "Entering the V8 API without proper locking in place"); \
|
| } \
|
| @@ -176,8 +175,8 @@
|
| heap_stats.pending_global_handle_count = &pending_global_handle_count;
|
| int near_death_global_handle_count;
|
| heap_stats.near_death_global_handle_count = &near_death_global_handle_count;
|
| - int destroyed_global_handle_count;
|
| - heap_stats.destroyed_global_handle_count = &destroyed_global_handle_count;
|
| + int free_global_handle_count;
|
| + heap_stats.free_global_handle_count = &free_global_handle_count;
|
| intptr_t memory_allocator_size;
|
| heap_stats.memory_allocator_size = &memory_allocator_size;
|
| intptr_t memory_allocator_capacity;
|
| @@ -311,6 +310,46 @@
|
| }
|
|
|
|
|
| +StartupDataDecompressor::StartupDataDecompressor()
|
| + : raw_data(i::NewArray<char*>(V8::GetCompressedStartupDataCount())) {
|
| + for (int i = 0; i < V8::GetCompressedStartupDataCount(); ++i) {
|
| + raw_data[i] = NULL;
|
| + }
|
| +}
|
| +
|
| +
|
| +StartupDataDecompressor::~StartupDataDecompressor() {
|
| + for (int i = 0; i < V8::GetCompressedStartupDataCount(); ++i) {
|
| + i::DeleteArray(raw_data[i]);
|
| + }
|
| + i::DeleteArray(raw_data);
|
| +}
|
| +
|
| +
|
| +int StartupDataDecompressor::Decompress() {
|
| + int compressed_data_count = V8::GetCompressedStartupDataCount();
|
| + StartupData* compressed_data =
|
| + i::NewArray<StartupData>(compressed_data_count);
|
| + V8::GetCompressedStartupData(compressed_data);
|
| + for (int i = 0; i < compressed_data_count; ++i) {
|
| + char* decompressed = raw_data[i] =
|
| + i::NewArray<char>(compressed_data[i].raw_size);
|
| + if (compressed_data[i].compressed_size != 0) {
|
| + int result = DecompressData(decompressed,
|
| + &compressed_data[i].raw_size,
|
| + compressed_data[i].data,
|
| + compressed_data[i].compressed_size);
|
| + if (result != 0) return result;
|
| + } else {
|
| + ASSERT_EQ(0, compressed_data[i].raw_size);
|
| + }
|
| + compressed_data[i].data = decompressed;
|
| + }
|
| + V8::SetDecompressedStartupData(compressed_data);
|
| + return 0;
|
| +}
|
| +
|
| +
|
| StartupData::CompressionAlgorithm V8::GetCompressedStartupDataAlgorithm() {
|
| #ifdef COMPRESS_STARTUP_DATA_BZ2
|
| return StartupData::kBZip2;
|
| @@ -323,6 +362,8 @@
|
| enum CompressedStartupDataItems {
|
| kSnapshot = 0,
|
| kSnapshotContext,
|
| + kLibraries,
|
| + kExperimentalLibraries,
|
| kCompressedStartupDataCount
|
| };
|
|
|
| @@ -347,6 +388,21 @@
|
| compressed_data[kSnapshotContext].compressed_size =
|
| i::Snapshot::context_size();
|
| compressed_data[kSnapshotContext].raw_size = i::Snapshot::context_raw_size();
|
| +
|
| + i::Vector<const i::byte> libraries_source = i::Natives::GetScriptsSource();
|
| + compressed_data[kLibraries].data =
|
| + reinterpret_cast<const char*>(libraries_source.start());
|
| + compressed_data[kLibraries].compressed_size = libraries_source.length();
|
| + compressed_data[kLibraries].raw_size = i::Natives::GetRawScriptsSize();
|
| +
|
| + i::Vector<const i::byte> exp_libraries_source =
|
| + i::ExperimentalNatives::GetScriptsSource();
|
| + compressed_data[kExperimentalLibraries].data =
|
| + reinterpret_cast<const char*>(exp_libraries_source.start());
|
| + compressed_data[kExperimentalLibraries].compressed_size =
|
| + exp_libraries_source.length();
|
| + compressed_data[kExperimentalLibraries].raw_size =
|
| + i::ExperimentalNatives::GetRawScriptsSize();
|
| #endif
|
| }
|
|
|
| @@ -362,6 +418,20 @@
|
| i::Snapshot::set_context_raw_data(
|
| reinterpret_cast<const i::byte*>(
|
| decompressed_data[kSnapshotContext].data));
|
| +
|
| + ASSERT_EQ(i::Natives::GetRawScriptsSize(),
|
| + decompressed_data[kLibraries].raw_size);
|
| + i::Vector<const char> libraries_source(
|
| + decompressed_data[kLibraries].data,
|
| + decompressed_data[kLibraries].raw_size);
|
| + i::Natives::SetRawScriptsSource(libraries_source);
|
| +
|
| + ASSERT_EQ(i::ExperimentalNatives::GetRawScriptsSize(),
|
| + decompressed_data[kExperimentalLibraries].raw_size);
|
| + i::Vector<const char> exp_libraries_source(
|
| + decompressed_data[kExperimentalLibraries].data,
|
| + decompressed_data[kExperimentalLibraries].raw_size);
|
| + i::ExperimentalNatives::SetRawScriptsSource(exp_libraries_source);
|
| #endif
|
| }
|
|
|
| @@ -573,8 +643,8 @@
|
|
|
|
|
| HandleScope::HandleScope() {
|
| - API_ENTRY_CHECK("HandleScope::HandleScope");
|
| i::Isolate* isolate = i::Isolate::Current();
|
| + API_ENTRY_CHECK(isolate, "HandleScope::HandleScope");
|
| v8::ImplementationUtilities::HandleScopeData* current =
|
| isolate->handle_scope_data();
|
| isolate_ = isolate;
|
| @@ -630,12 +700,11 @@
|
|
|
|
|
| void Context::Enter() {
|
| - // TODO(isolates): Context should have a pointer to isolate.
|
| - i::Isolate* isolate = i::Isolate::Current();
|
| + i::Handle<i::Context> env = Utils::OpenHandle(this);
|
| + i::Isolate* isolate = env->GetIsolate();
|
| if (IsDeadCheck(isolate, "v8::Context::Enter()")) return;
|
| ENTER_V8(isolate);
|
|
|
| - i::Handle<i::Context> env = Utils::OpenHandle(this);
|
| isolate->handle_scope_implementer()->EnterContext(env);
|
|
|
| isolate->handle_scope_implementer()->SaveContext(isolate->context());
|
| @@ -644,7 +713,9 @@
|
|
|
|
|
| void Context::Exit() {
|
| - // TODO(isolates): Context should have a pointer to isolate.
|
| + // Exit is essentially a static function and doesn't use the
|
| + // receiver, so we have to get the current isolate from the thread
|
| + // local.
|
| i::Isolate* isolate = i::Isolate::Current();
|
| if (!isolate->IsInitialized()) return;
|
|
|
| @@ -662,41 +733,31 @@
|
|
|
|
|
| void Context::SetData(v8::Handle<String> data) {
|
| - // TODO(isolates): Context should have a pointer to isolate.
|
| - i::Isolate* isolate = i::Isolate::Current();
|
| + i::Handle<i::Context> env = Utils::OpenHandle(this);
|
| + i::Isolate* isolate = env->GetIsolate();
|
| if (IsDeadCheck(isolate, "v8::Context::SetData()")) return;
|
| - ENTER_V8(isolate);
|
| - {
|
| - i::HandleScope scope(isolate);
|
| - i::Handle<i::Context> env = Utils::OpenHandle(this);
|
| - i::Handle<i::Object> raw_data = Utils::OpenHandle(*data);
|
| - ASSERT(env->IsGlobalContext());
|
| - if (env->IsGlobalContext()) {
|
| - env->set_data(*raw_data);
|
| - }
|
| + i::Handle<i::Object> raw_data = Utils::OpenHandle(*data);
|
| + ASSERT(env->IsGlobalContext());
|
| + if (env->IsGlobalContext()) {
|
| + env->set_data(*raw_data);
|
| }
|
| }
|
|
|
|
|
| v8::Local<v8::Value> Context::GetData() {
|
| - // TODO(isolates): Context should have a pointer to isolate.
|
| - i::Isolate* isolate = i::Isolate::Current();
|
| + i::Handle<i::Context> env = Utils::OpenHandle(this);
|
| + i::Isolate* isolate = env->GetIsolate();
|
| if (IsDeadCheck(isolate, "v8::Context::GetData()")) {
|
| return v8::Local<Value>();
|
| }
|
| - ENTER_V8(isolate);
|
| i::Object* raw_result = NULL;
|
| - {
|
| - i::HandleScope scope(isolate);
|
| - i::Handle<i::Context> env = Utils::OpenHandle(this);
|
| - ASSERT(env->IsGlobalContext());
|
| - if (env->IsGlobalContext()) {
|
| - raw_result = env->data();
|
| - } else {
|
| - return Local<Value>();
|
| - }
|
| + ASSERT(env->IsGlobalContext());
|
| + if (env->IsGlobalContext()) {
|
| + raw_result = env->data();
|
| + } else {
|
| + return Local<Value>();
|
| }
|
| - i::Handle<i::Object> result(raw_result);
|
| + i::Handle<i::Object> result(raw_result, isolate);
|
| return Utils::ToLocal(result);
|
| }
|
|
|
| @@ -823,6 +884,7 @@
|
| i::Handle<i::FunctionTemplateInfo> info) {
|
| info->set_tag(i::Smi::FromInt(Consts::FUNCTION_TEMPLATE));
|
| info->set_flag(0);
|
| + info->set_prototype_attributes(i::Smi::FromInt(v8::None));
|
| }
|
|
|
|
|
| @@ -925,6 +987,7 @@
|
| int TypeSwitch::match(v8::Handle<Value> value) {
|
| i::Isolate* isolate = i::Isolate::Current();
|
| LOG_API(isolate, "TypeSwitch::match");
|
| + USE(isolate);
|
| i::Handle<i::Object> obj = Utils::OpenHandle(*value);
|
| i::Handle<i::TypeSwitchInfo> info = Utils::OpenHandle(this);
|
| i::FixedArray* types = i::FixedArray::cast(info->types());
|
| @@ -1044,6 +1107,17 @@
|
| }
|
|
|
|
|
| +void FunctionTemplate::SetPrototypeAttributes(int attributes) {
|
| + i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
|
| + if (IsDeadCheck(isolate, "v8::FunctionTemplate::SetPrototypeAttributes()")) {
|
| + return;
|
| + }
|
| + ENTER_V8(isolate);
|
| + Utils::OpenHandle(this)->set_prototype_attributes(
|
| + i::Smi::FromInt(attributes));
|
| +}
|
| +
|
| +
|
| void FunctionTemplate::SetNamedInstancePropertyHandler(
|
| NamedPropertyGetter getter,
|
| NamedPropertySetter setter,
|
| @@ -1545,26 +1619,27 @@
|
|
|
|
|
| v8::TryCatch::TryCatch()
|
| - : next_(i::Isolate::Current()->try_catch_handler_address()),
|
| - exception_(HEAP->the_hole_value()),
|
| + : isolate_(i::Isolate::Current()),
|
| + next_(isolate_->try_catch_handler_address()),
|
| + exception_(isolate_->heap()->the_hole_value()),
|
| message_(i::Smi::FromInt(0)),
|
| is_verbose_(false),
|
| can_continue_(true),
|
| capture_message_(true),
|
| rethrow_(false) {
|
| - i::Isolate::Current()->RegisterTryCatchHandler(this);
|
| + isolate_->RegisterTryCatchHandler(this);
|
| }
|
|
|
|
|
| v8::TryCatch::~TryCatch() {
|
| - i::Isolate* isolate = i::Isolate::Current();
|
| + ASSERT(isolate_ == i::Isolate::Current());
|
| if (rethrow_) {
|
| v8::HandleScope scope;
|
| v8::Local<v8::Value> exc = v8::Local<v8::Value>::New(Exception());
|
| - isolate->UnregisterTryCatchHandler(this);
|
| + isolate_->UnregisterTryCatchHandler(this);
|
| v8::ThrowException(exc);
|
| } else {
|
| - isolate->UnregisterTryCatchHandler(this);
|
| + isolate_->UnregisterTryCatchHandler(this);
|
| }
|
| }
|
|
|
| @@ -1587,10 +1662,11 @@
|
|
|
|
|
| v8::Local<Value> v8::TryCatch::Exception() const {
|
| + ASSERT(isolate_ == i::Isolate::Current());
|
| if (HasCaught()) {
|
| // Check for out of memory exception.
|
| i::Object* exception = reinterpret_cast<i::Object*>(exception_);
|
| - return v8::Utils::ToLocal(i::Handle<i::Object>(exception));
|
| + return v8::Utils::ToLocal(i::Handle<i::Object>(exception, isolate_));
|
| } else {
|
| return v8::Local<Value>();
|
| }
|
| @@ -1598,15 +1674,17 @@
|
|
|
|
|
| v8::Local<Value> v8::TryCatch::StackTrace() const {
|
| + ASSERT(isolate_ == i::Isolate::Current());
|
| if (HasCaught()) {
|
| i::Object* raw_obj = reinterpret_cast<i::Object*>(exception_);
|
| if (!raw_obj->IsJSObject()) return v8::Local<Value>();
|
| - v8::HandleScope scope;
|
| - i::Handle<i::JSObject> obj(i::JSObject::cast(raw_obj));
|
| - i::Handle<i::String> name = FACTORY->LookupAsciiSymbol("stack");
|
| - if (!obj->HasProperty(*name))
|
| - return v8::Local<Value>();
|
| - return scope.Close(v8::Utils::ToLocal(i::GetProperty(obj, name)));
|
| + i::HandleScope scope(isolate_);
|
| + i::Handle<i::JSObject> obj(i::JSObject::cast(raw_obj), isolate_);
|
| + i::Handle<i::String> name = isolate_->factory()->LookupAsciiSymbol("stack");
|
| + if (!obj->HasProperty(*name)) return v8::Local<Value>();
|
| + i::Handle<i::Object> value = i::GetProperty(obj, name);
|
| + if (value.is_null()) return v8::Local<Value>();
|
| + return v8::Utils::ToLocal(scope.CloseAndEscape(value));
|
| } else {
|
| return v8::Local<Value>();
|
| }
|
| @@ -1614,9 +1692,10 @@
|
|
|
|
|
| v8::Local<v8::Message> v8::TryCatch::Message() const {
|
| + ASSERT(isolate_ == i::Isolate::Current());
|
| if (HasCaught() && message_ != i::Smi::FromInt(0)) {
|
| i::Object* message = reinterpret_cast<i::Object*>(message_);
|
| - return v8::Utils::MessageToLocal(i::Handle<i::Object>(message));
|
| + return v8::Utils::MessageToLocal(i::Handle<i::Object>(message, isolate_));
|
| } else {
|
| return v8::Local<v8::Message>();
|
| }
|
| @@ -1624,7 +1703,8 @@
|
|
|
|
|
| void v8::TryCatch::Reset() {
|
| - exception_ = HEAP->the_hole_value();
|
| + ASSERT(isolate_ == i::Isolate::Current());
|
| + exception_ = isolate_->heap()->the_hole_value();
|
| message_ = i::Smi::FromInt(0);
|
| }
|
|
|
| @@ -2697,6 +2777,25 @@
|
| }
|
|
|
|
|
| +Local<Array> v8::Object::GetOwnPropertyNames() {
|
| + i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
|
| + ON_BAILOUT(isolate, "v8::Object::GetOwnPropertyNames()",
|
| + return Local<v8::Array>());
|
| + ENTER_V8(isolate);
|
| + i::HandleScope scope(isolate);
|
| + i::Handle<i::JSObject> self = Utils::OpenHandle(this);
|
| + i::Handle<i::FixedArray> value =
|
| + i::GetKeysInFixedArrayFor(self, i::LOCAL_ONLY);
|
| + // Because we use caching to speed up enumeration it is important
|
| + // to never change the result of the basic enumeration function so
|
| + // we clone the result.
|
| + i::Handle<i::FixedArray> elms = isolate->factory()->CopyFixedArray(value);
|
| + i::Handle<i::JSArray> result =
|
| + isolate->factory()->NewJSArrayWithElements(elms);
|
| + return Utils::ToLocal(scope.CloseAndEscape(result));
|
| +}
|
| +
|
| +
|
| Local<String> v8::Object::ObjectProtoToString() {
|
| i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
|
| ON_BAILOUT(isolate, "v8::Object::ObjectProtoToString()",
|
| @@ -3392,6 +3491,7 @@
|
| void Function::SetName(v8::Handle<v8::String> name) {
|
| i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
|
| ENTER_V8(isolate);
|
| + USE(isolate);
|
| i::Handle<i::JSFunction> func = Utils::OpenHandle(this);
|
| func->shared()->set_name(*Utils::OpenHandle(*name));
|
| }
|
| @@ -4262,6 +4362,9 @@
|
| if (isolate->string_tracker()->IsFreshUnusedString(obj)) {
|
| return false;
|
| }
|
| + if (isolate->heap()->IsInGCPostProcessing()) {
|
| + return false;
|
| + }
|
| bool result = obj->MakeExternal(resource);
|
| if (result && !obj->IsSymbol()) {
|
| isolate->heap()->external_string_table()->AddString(*obj);
|
| @@ -4294,6 +4397,9 @@
|
| if (isolate->string_tracker()->IsFreshUnusedString(obj)) {
|
| return false;
|
| }
|
| + if (isolate->heap()->IsInGCPostProcessing()) {
|
| + return false;
|
| + }
|
| bool result = obj->MakeExternal(resource);
|
| if (result && !obj->IsSymbol()) {
|
| isolate->heap()->external_string_table()->AddString(*obj);
|
| @@ -4727,66 +4833,30 @@
|
|
|
| void V8::PauseProfiler() {
|
| #ifdef ENABLE_LOGGING_AND_PROFILING
|
| - PauseProfilerEx(PROFILER_MODULE_CPU);
|
| + i::Isolate* isolate = i::Isolate::Current();
|
| + isolate->logger()->PauseProfiler();
|
| #endif
|
| }
|
|
|
|
|
| void V8::ResumeProfiler() {
|
| #ifdef ENABLE_LOGGING_AND_PROFILING
|
| - ResumeProfilerEx(PROFILER_MODULE_CPU);
|
| + i::Isolate* isolate = i::Isolate::Current();
|
| + isolate->logger()->ResumeProfiler();
|
| #endif
|
| }
|
|
|
|
|
| bool V8::IsProfilerPaused() {
|
| #ifdef ENABLE_LOGGING_AND_PROFILING
|
| - return LOGGER->GetActiveProfilerModules() & PROFILER_MODULE_CPU;
|
| + i::Isolate* isolate = i::Isolate::Current();
|
| + return isolate->logger()->IsProfilerPaused();
|
| #else
|
| return true;
|
| #endif
|
| }
|
|
|
|
|
| -void V8::ResumeProfilerEx(int flags, int tag) {
|
| -#ifdef ENABLE_LOGGING_AND_PROFILING
|
| - i::Isolate* isolate = i::Isolate::Current();
|
| - if (flags & PROFILER_MODULE_HEAP_SNAPSHOT) {
|
| - // Snapshot mode: resume modules, perform GC, then pause only
|
| - // those modules which haven't been started prior to making a
|
| - // snapshot.
|
| -
|
| - // Make a GC prior to taking a snapshot.
|
| - isolate->heap()->CollectAllGarbage(i::Heap::kNoGCFlags);
|
| - // Reset snapshot flag and CPU module flags.
|
| - flags &= ~(PROFILER_MODULE_HEAP_SNAPSHOT | PROFILER_MODULE_CPU);
|
| - const int current_flags = isolate->logger()->GetActiveProfilerModules();
|
| - isolate->logger()->ResumeProfiler(flags, tag);
|
| - isolate->heap()->CollectAllGarbage(i::Heap::kNoGCFlags);
|
| - isolate->logger()->PauseProfiler(~current_flags & flags, tag);
|
| - } else {
|
| - isolate->logger()->ResumeProfiler(flags, tag);
|
| - }
|
| -#endif
|
| -}
|
| -
|
| -
|
| -void V8::PauseProfilerEx(int flags, int tag) {
|
| -#ifdef ENABLE_LOGGING_AND_PROFILING
|
| - LOGGER->PauseProfiler(flags, tag);
|
| -#endif
|
| -}
|
| -
|
| -
|
| -int V8::GetActiveProfilerModules() {
|
| -#ifdef ENABLE_LOGGING_AND_PROFILING
|
| - return LOGGER->GetActiveProfilerModules();
|
| -#else
|
| - return PROFILER_MODULE_NONE;
|
| -#endif
|
| -}
|
| -
|
| -
|
| int V8::GetLogLines(int from_pos, char* dest_buf, int max_size) {
|
| #ifdef ENABLE_LOGGING_AND_PROFILING
|
| ASSERT(max_size >= kMinimumSizeForLogLinesBuffer);
|
| @@ -4806,7 +4876,7 @@
|
| void V8::TerminateExecution(int thread_id) {
|
| i::Isolate* isolate = i::Isolate::Current();
|
| if (!isolate->IsInitialized()) return;
|
| - API_ENTRY_CHECK("V8::TerminateExecution()");
|
| + API_ENTRY_CHECK(isolate, "V8::TerminateExecution()");
|
| // If the thread_id identifies the current thread just terminate
|
| // execution right away. Otherwise, ask the thread manager to
|
| // terminate the thread with the given id if any.
|
| @@ -4829,9 +4899,10 @@
|
| }
|
|
|
|
|
| -bool V8::IsExecutionTerminating() {
|
| - i::Isolate* isolate = i::Isolate::Current();
|
| - return IsExecutionTerminatingCheck(isolate);
|
| +bool V8::IsExecutionTerminating(Isolate* isolate) {
|
| + i::Isolate* i_isolate = isolate != NULL ?
|
| + reinterpret_cast<i::Isolate*>(isolate) : i::Isolate::Current();
|
| + return IsExecutionTerminatingCheck(i_isolate);
|
| }
|
|
|
|
|
| @@ -5255,9 +5326,8 @@
|
| #endif // ENABLE_DEBUGGER_SUPPORT
|
|
|
|
|
| +Handle<String> CpuProfileNode::GetFunctionName() const {
|
| #ifdef ENABLE_LOGGING_AND_PROFILING
|
| -
|
| -Handle<String> CpuProfileNode::GetFunctionName() const {
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::CpuProfileNode::GetFunctionName");
|
| const i::ProfileNode* node = reinterpret_cast<const i::ProfileNode*>(this);
|
| @@ -5270,77 +5340,117 @@
|
| isolate->factory()->LookupAsciiSymbol(entry->name_prefix()),
|
| isolate->factory()->LookupAsciiSymbol(entry->name()))));
|
| }
|
| +#else
|
| + return v8::String::Empty();
|
| +#endif
|
| }
|
|
|
|
|
| Handle<String> CpuProfileNode::GetScriptResourceName() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::CpuProfileNode::GetScriptResourceName");
|
| const i::ProfileNode* node = reinterpret_cast<const i::ProfileNode*>(this);
|
| return Handle<String>(ToApi<String>(isolate->factory()->LookupAsciiSymbol(
|
| node->entry()->resource_name())));
|
| +#else
|
| + return v8::String::Empty();
|
| +#endif
|
| }
|
|
|
|
|
| int CpuProfileNode::GetLineNumber() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::CpuProfileNode::GetLineNumber");
|
| return reinterpret_cast<const i::ProfileNode*>(this)->entry()->line_number();
|
| +#else
|
| + return 0;
|
| +#endif
|
| }
|
|
|
|
|
| double CpuProfileNode::GetTotalTime() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::CpuProfileNode::GetTotalTime");
|
| return reinterpret_cast<const i::ProfileNode*>(this)->GetTotalMillis();
|
| +#else
|
| + return 0.0;
|
| +#endif
|
| }
|
|
|
|
|
| double CpuProfileNode::GetSelfTime() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::CpuProfileNode::GetSelfTime");
|
| return reinterpret_cast<const i::ProfileNode*>(this)->GetSelfMillis();
|
| +#else
|
| + return 0.0;
|
| +#endif
|
| }
|
|
|
|
|
| double CpuProfileNode::GetTotalSamplesCount() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::CpuProfileNode::GetTotalSamplesCount");
|
| return reinterpret_cast<const i::ProfileNode*>(this)->total_ticks();
|
| +#else
|
| + return 0.0;
|
| +#endif
|
| }
|
|
|
|
|
| double CpuProfileNode::GetSelfSamplesCount() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::CpuProfileNode::GetSelfSamplesCount");
|
| return reinterpret_cast<const i::ProfileNode*>(this)->self_ticks();
|
| +#else
|
| + return 0.0;
|
| +#endif
|
| }
|
|
|
|
|
| unsigned CpuProfileNode::GetCallUid() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::CpuProfileNode::GetCallUid");
|
| return reinterpret_cast<const i::ProfileNode*>(this)->entry()->GetCallUid();
|
| +#else
|
| + return 0;
|
| +#endif
|
| }
|
|
|
|
|
| int CpuProfileNode::GetChildrenCount() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::CpuProfileNode::GetChildrenCount");
|
| return reinterpret_cast<const i::ProfileNode*>(this)->children()->length();
|
| +#else
|
| + return 0;
|
| +#endif
|
| }
|
|
|
|
|
| const CpuProfileNode* CpuProfileNode::GetChild(int index) const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::CpuProfileNode::GetChild");
|
| const i::ProfileNode* child =
|
| reinterpret_cast<const i::ProfileNode*>(this)->children()->at(index);
|
| return reinterpret_cast<const CpuProfileNode*>(child);
|
| +#else
|
| + return NULL;
|
| +#endif
|
| }
|
|
|
|
|
| void CpuProfile::Delete() {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::CpuProfile::Delete");
|
| i::CpuProfiler::DeleteProfile(reinterpret_cast<i::CpuProfile*>(this));
|
| @@ -5349,108 +5459,153 @@
|
| // If this was the last profile, clean up all accessory data as well.
|
| i::CpuProfiler::DeleteAllProfiles();
|
| }
|
| +#endif
|
| }
|
|
|
|
|
| unsigned CpuProfile::GetUid() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::CpuProfile::GetUid");
|
| return reinterpret_cast<const i::CpuProfile*>(this)->uid();
|
| +#else
|
| + return 0;
|
| +#endif
|
| }
|
|
|
|
|
| Handle<String> CpuProfile::GetTitle() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::CpuProfile::GetTitle");
|
| const i::CpuProfile* profile = reinterpret_cast<const i::CpuProfile*>(this);
|
| return Handle<String>(ToApi<String>(isolate->factory()->LookupAsciiSymbol(
|
| profile->title())));
|
| +#else
|
| + return v8::String::Empty();
|
| +#endif
|
| }
|
|
|
|
|
| const CpuProfileNode* CpuProfile::GetBottomUpRoot() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::CpuProfile::GetBottomUpRoot");
|
| const i::CpuProfile* profile = reinterpret_cast<const i::CpuProfile*>(this);
|
| return reinterpret_cast<const CpuProfileNode*>(profile->bottom_up()->root());
|
| +#else
|
| + return NULL;
|
| +#endif
|
| }
|
|
|
|
|
| const CpuProfileNode* CpuProfile::GetTopDownRoot() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::CpuProfile::GetTopDownRoot");
|
| const i::CpuProfile* profile = reinterpret_cast<const i::CpuProfile*>(this);
|
| return reinterpret_cast<const CpuProfileNode*>(profile->top_down()->root());
|
| +#else
|
| + return NULL;
|
| +#endif
|
| }
|
|
|
|
|
| int CpuProfiler::GetProfilesCount() {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::CpuProfiler::GetProfilesCount");
|
| return i::CpuProfiler::GetProfilesCount();
|
| +#else
|
| + return 0;
|
| +#endif
|
| }
|
|
|
|
|
| const CpuProfile* CpuProfiler::GetProfile(int index,
|
| Handle<Value> security_token) {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::CpuProfiler::GetProfile");
|
| return reinterpret_cast<const CpuProfile*>(
|
| i::CpuProfiler::GetProfile(
|
| security_token.IsEmpty() ? NULL : *Utils::OpenHandle(*security_token),
|
| index));
|
| +#else
|
| + return NULL;
|
| +#endif
|
| }
|
|
|
|
|
| const CpuProfile* CpuProfiler::FindProfile(unsigned uid,
|
| Handle<Value> security_token) {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::CpuProfiler::FindProfile");
|
| return reinterpret_cast<const CpuProfile*>(
|
| i::CpuProfiler::FindProfile(
|
| security_token.IsEmpty() ? NULL : *Utils::OpenHandle(*security_token),
|
| uid));
|
| +#else
|
| + return NULL;
|
| +#endif
|
| }
|
|
|
|
|
| void CpuProfiler::StartProfiling(Handle<String> title) {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::CpuProfiler::StartProfiling");
|
| i::CpuProfiler::StartProfiling(*Utils::OpenHandle(*title));
|
| +#endif
|
| }
|
|
|
|
|
| const CpuProfile* CpuProfiler::StopProfiling(Handle<String> title,
|
| Handle<Value> security_token) {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::CpuProfiler::StopProfiling");
|
| return reinterpret_cast<const CpuProfile*>(
|
| i::CpuProfiler::StopProfiling(
|
| security_token.IsEmpty() ? NULL : *Utils::OpenHandle(*security_token),
|
| *Utils::OpenHandle(*title)));
|
| +#else
|
| + return NULL;
|
| +#endif
|
| }
|
|
|
|
|
| void CpuProfiler::DeleteAllProfiles() {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::CpuProfiler::DeleteAllProfiles");
|
| i::CpuProfiler::DeleteAllProfiles();
|
| +#endif
|
| }
|
|
|
|
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| static i::HeapGraphEdge* ToInternal(const HeapGraphEdge* edge) {
|
| return const_cast<i::HeapGraphEdge*>(
|
| reinterpret_cast<const i::HeapGraphEdge*>(edge));
|
| }
|
| +#endif
|
|
|
| +
|
| HeapGraphEdge::Type HeapGraphEdge::GetType() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::HeapGraphEdge::GetType");
|
| return static_cast<HeapGraphEdge::Type>(ToInternal(this)->type());
|
| +#else
|
| + return static_cast<HeapGraphEdge::Type>(0);
|
| +#endif
|
| }
|
|
|
|
|
| Handle<Value> HeapGraphEdge::GetName() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::HeapGraphEdge::GetName");
|
| i::HeapGraphEdge* edge = ToInternal(this);
|
| @@ -5467,121 +5622,166 @@
|
| edge->index())));
|
| default: UNREACHABLE();
|
| }
|
| +#endif
|
| return v8::Undefined();
|
| }
|
|
|
|
|
| const HeapGraphNode* HeapGraphEdge::GetFromNode() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::HeapGraphEdge::GetFromNode");
|
| const i::HeapEntry* from = ToInternal(this)->From();
|
| return reinterpret_cast<const HeapGraphNode*>(from);
|
| +#else
|
| + return NULL;
|
| +#endif
|
| }
|
|
|
|
|
| const HeapGraphNode* HeapGraphEdge::GetToNode() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::HeapGraphEdge::GetToNode");
|
| const i::HeapEntry* to = ToInternal(this)->to();
|
| return reinterpret_cast<const HeapGraphNode*>(to);
|
| +#else
|
| + return NULL;
|
| +#endif
|
| }
|
|
|
|
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| static i::HeapEntry* ToInternal(const HeapGraphNode* entry) {
|
| return const_cast<i::HeapEntry*>(
|
| reinterpret_cast<const i::HeapEntry*>(entry));
|
| }
|
| +#endif
|
|
|
|
|
| HeapGraphNode::Type HeapGraphNode::GetType() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::HeapGraphNode::GetType");
|
| return static_cast<HeapGraphNode::Type>(ToInternal(this)->type());
|
| +#else
|
| + return static_cast<HeapGraphNode::Type>(0);
|
| +#endif
|
| }
|
|
|
|
|
| Handle<String> HeapGraphNode::GetName() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::HeapGraphNode::GetName");
|
| return Handle<String>(ToApi<String>(isolate->factory()->LookupAsciiSymbol(
|
| ToInternal(this)->name())));
|
| +#else
|
| + return v8::String::Empty();
|
| +#endif
|
| }
|
|
|
|
|
| uint64_t HeapGraphNode::GetId() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::HeapGraphNode::GetId");
|
| - ASSERT(ToInternal(this)->snapshot()->type() != i::HeapSnapshot::kAggregated);
|
| return ToInternal(this)->id();
|
| +#else
|
| + return 0;
|
| +#endif
|
| }
|
|
|
|
|
| -int HeapGraphNode::GetInstancesCount() const {
|
| - i::Isolate* isolate = i::Isolate::Current();
|
| - IsDeadCheck(isolate, "v8::HeapGraphNode::GetInstancesCount");
|
| - ASSERT(ToInternal(this)->snapshot()->type() == i::HeapSnapshot::kAggregated);
|
| - return static_cast<int>(ToInternal(this)->id());
|
| -}
|
| -
|
| -
|
| int HeapGraphNode::GetSelfSize() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::HeapGraphNode::GetSelfSize");
|
| return ToInternal(this)->self_size();
|
| +#else
|
| + return 0;
|
| +#endif
|
| }
|
|
|
|
|
| int HeapGraphNode::GetRetainedSize(bool exact) const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::HeapSnapshot::GetRetainedSize");
|
| return ToInternal(this)->RetainedSize(exact);
|
| +#else
|
| + return 0;
|
| +#endif
|
| }
|
|
|
|
|
| int HeapGraphNode::GetChildrenCount() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::HeapSnapshot::GetChildrenCount");
|
| return ToInternal(this)->children().length();
|
| +#else
|
| + return 0;
|
| +#endif
|
| }
|
|
|
|
|
| const HeapGraphEdge* HeapGraphNode::GetChild(int index) const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::HeapSnapshot::GetChild");
|
| return reinterpret_cast<const HeapGraphEdge*>(
|
| &ToInternal(this)->children()[index]);
|
| +#else
|
| + return NULL;
|
| +#endif
|
| }
|
|
|
|
|
| int HeapGraphNode::GetRetainersCount() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::HeapSnapshot::GetRetainersCount");
|
| return ToInternal(this)->retainers().length();
|
| +#else
|
| + return 0;
|
| +#endif
|
| }
|
|
|
|
|
| const HeapGraphEdge* HeapGraphNode::GetRetainer(int index) const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::HeapSnapshot::GetRetainer");
|
| return reinterpret_cast<const HeapGraphEdge*>(
|
| ToInternal(this)->retainers()[index]);
|
| +#else
|
| + return NULL;
|
| +#endif
|
| }
|
|
|
|
|
| const HeapGraphNode* HeapGraphNode::GetDominatorNode() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::HeapSnapshot::GetDominatorNode");
|
| return reinterpret_cast<const HeapGraphNode*>(ToInternal(this)->dominator());
|
| +#else
|
| + return NULL;
|
| +#endif
|
| }
|
|
|
|
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| static i::HeapSnapshot* ToInternal(const HeapSnapshot* snapshot) {
|
| return const_cast<i::HeapSnapshot*>(
|
| reinterpret_cast<const i::HeapSnapshot*>(snapshot));
|
| }
|
| +#endif
|
|
|
|
|
| void HeapSnapshot::Delete() {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::HeapSnapshot::Delete");
|
| if (i::HeapProfiler::GetSnapshotsCount() > 1) {
|
| @@ -5590,48 +5790,93 @@
|
| // If this is the last snapshot, clean up all accessory data as well.
|
| i::HeapProfiler::DeleteAllSnapshots();
|
| }
|
| +#endif
|
| }
|
|
|
|
|
| HeapSnapshot::Type HeapSnapshot::GetType() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::HeapSnapshot::GetType");
|
| return static_cast<HeapSnapshot::Type>(ToInternal(this)->type());
|
| +#else
|
| + return static_cast<HeapSnapshot::Type>(0);
|
| +#endif
|
| }
|
|
|
|
|
| unsigned HeapSnapshot::GetUid() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::HeapSnapshot::GetUid");
|
| return ToInternal(this)->uid();
|
| +#else
|
| + return 0;
|
| +#endif
|
| }
|
|
|
|
|
| Handle<String> HeapSnapshot::GetTitle() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::HeapSnapshot::GetTitle");
|
| return Handle<String>(ToApi<String>(isolate->factory()->LookupAsciiSymbol(
|
| ToInternal(this)->title())));
|
| +#else
|
| + return v8::String::Empty();
|
| +#endif
|
| }
|
|
|
|
|
| const HeapGraphNode* HeapSnapshot::GetRoot() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::HeapSnapshot::GetHead");
|
| return reinterpret_cast<const HeapGraphNode*>(ToInternal(this)->root());
|
| +#else
|
| + return 0;
|
| +#endif
|
| }
|
|
|
|
|
| const HeapGraphNode* HeapSnapshot::GetNodeById(uint64_t id) const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::HeapSnapshot::GetNodeById");
|
| return reinterpret_cast<const HeapGraphNode*>(
|
| ToInternal(this)->GetEntryById(id));
|
| +#else
|
| + return NULL;
|
| +#endif
|
| }
|
|
|
|
|
| +int HeapSnapshot::GetNodesCount() const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| + i::Isolate* isolate = i::Isolate::Current();
|
| + IsDeadCheck(isolate, "v8::HeapSnapshot::GetNodesCount");
|
| + return ToInternal(this)->entries()->length();
|
| +#else
|
| + return 0;
|
| +#endif
|
| +}
|
| +
|
| +
|
| +const HeapGraphNode* HeapSnapshot::GetNode(int index) const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| + i::Isolate* isolate = i::Isolate::Current();
|
| + IsDeadCheck(isolate, "v8::HeapSnapshot::GetNode");
|
| + return reinterpret_cast<const HeapGraphNode*>(
|
| + ToInternal(this)->entries()->at(index));
|
| +#else
|
| + return 0;
|
| +#endif
|
| +}
|
| +
|
| +
|
| void HeapSnapshot::Serialize(OutputStream* stream,
|
| HeapSnapshot::SerializationFormat format) const {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::HeapSnapshot::Serialize");
|
| ApiCheck(format == kJSON,
|
| @@ -5645,35 +5890,49 @@
|
| "Invalid stream chunk size");
|
| i::HeapSnapshotJSONSerializer serializer(ToInternal(this));
|
| serializer.Serialize(stream);
|
| +#endif
|
| }
|
|
|
|
|
| int HeapProfiler::GetSnapshotsCount() {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::HeapProfiler::GetSnapshotsCount");
|
| return i::HeapProfiler::GetSnapshotsCount();
|
| +#else
|
| + return 0;
|
| +#endif
|
| }
|
|
|
|
|
| const HeapSnapshot* HeapProfiler::GetSnapshot(int index) {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::HeapProfiler::GetSnapshot");
|
| return reinterpret_cast<const HeapSnapshot*>(
|
| i::HeapProfiler::GetSnapshot(index));
|
| +#else
|
| + return NULL;
|
| +#endif
|
| }
|
|
|
|
|
| const HeapSnapshot* HeapProfiler::FindSnapshot(unsigned uid) {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::HeapProfiler::FindSnapshot");
|
| return reinterpret_cast<const HeapSnapshot*>(
|
| i::HeapProfiler::FindSnapshot(uid));
|
| +#else
|
| + return NULL;
|
| +#endif
|
| }
|
|
|
|
|
| const HeapSnapshot* HeapProfiler::TakeSnapshot(Handle<String> title,
|
| HeapSnapshot::Type type,
|
| ActivityControl* control) {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::HeapProfiler::TakeSnapshot");
|
| i::HeapSnapshot::Type internal_type = i::HeapSnapshot::kFull;
|
| @@ -5681,32 +5940,35 @@
|
| case HeapSnapshot::kFull:
|
| internal_type = i::HeapSnapshot::kFull;
|
| break;
|
| - case HeapSnapshot::kAggregated:
|
| - internal_type = i::HeapSnapshot::kAggregated;
|
| - break;
|
| default:
|
| UNREACHABLE();
|
| }
|
| return reinterpret_cast<const HeapSnapshot*>(
|
| i::HeapProfiler::TakeSnapshot(
|
| *Utils::OpenHandle(*title), internal_type, control));
|
| +#else
|
| + return NULL;
|
| +#endif
|
| }
|
|
|
|
|
| void HeapProfiler::DeleteAllSnapshots() {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate* isolate = i::Isolate::Current();
|
| IsDeadCheck(isolate, "v8::HeapProfiler::DeleteAllSnapshots");
|
| i::HeapProfiler::DeleteAllSnapshots();
|
| +#endif
|
| }
|
|
|
|
|
| void HeapProfiler::DefineWrapperClass(uint16_t class_id,
|
| WrapperInfoCallback callback) {
|
| +#ifdef ENABLE_LOGGING_AND_PROFILING
|
| i::Isolate::Current()->heap_profiler()->DefineWrapperClass(class_id,
|
| callback);
|
| +#endif
|
| }
|
|
|
| -#endif // ENABLE_LOGGING_AND_PROFILING
|
|
|
|
|
| v8::Testing::StressType internal::Testing::stress_type_ =
|
|
|