diff options
Diffstat (limited to 'deps/v8/src/api/api.cc')
-rw-r--r-- | deps/v8/src/api/api.cc | 144 |
1 files changed, 111 insertions, 33 deletions
diff --git a/deps/v8/src/api/api.cc b/deps/v8/src/api/api.cc index 8aaf091280..29d4bea237 100644 --- a/deps/v8/src/api/api.cc +++ b/deps/v8/src/api/api.cc @@ -172,6 +172,8 @@ namespace v8 { +static OOMErrorCallback g_oom_error_callback = nullptr; + static ScriptOrigin GetScriptOriginForScript(i::Isolate* isolate, i::Handle<i::Script> script) { i::Handle<i::Object> scriptName(script->GetNameOrSourceURL(), isolate); @@ -228,8 +230,9 @@ void i::V8::FatalProcessOutOfMemory(i::Isolate* isolate, const char* location, memset(last_few_messages, 0x0BADC0DE, Heap::kTraceRingBufferSize + 1); memset(js_stacktrace, 0x0BADC0DE, Heap::kStacktraceBufferSize + 1); memset(&heap_stats, 0xBADC0DE, sizeof(heap_stats)); - // Note that the embedder's oom handler is also not available and therefore - // won't be called in this case. We just crash. + // Give the embedder a chance to handle the condition. If it doesn't, + // just crash. + if (g_oom_error_callback) g_oom_error_callback(location, is_heap_oom); FATAL("Fatal process out of memory: %s", location); UNREACHABLE(); } @@ -304,6 +307,7 @@ void i::V8::FatalProcessOutOfMemory(i::Isolate* isolate, const char* location, } } Utils::ReportOOMFailure(isolate, location, is_heap_oom); + if (g_oom_error_callback) g_oom_error_callback(location, is_heap_oom); // If the fatal error handler returns, we stop execution. FATAL("API fatal error handler returned after process out of memory"); } @@ -807,17 +811,16 @@ void ResourceConstraints::ConfigureDefaults(uint64_t physical_memory, namespace internal { -i::Address* GlobalizeTracedReference( - i::Isolate* isolate, i::Address* obj, internal::Address* slot, - GlobalHandleDestructionMode destruction_mode, - GlobalHandleStoreMode store_mode) { +i::Address* GlobalizeTracedReference(i::Isolate* isolate, i::Address* obj, + internal::Address* slot, + GlobalHandleStoreMode store_mode) { LOG_API(isolate, TracedGlobal, New); #ifdef DEBUG Utils::ApiCheck((slot != nullptr), "v8::GlobalizeTracedReference", "the address slot must be not null"); #endif - i::Handle<i::Object> result = isolate->global_handles()->CreateTraced( - *obj, slot, destruction_mode, store_mode); + i::Handle<i::Object> result = + isolate->global_handles()->CreateTraced(*obj, slot, store_mode); #ifdef VERIFY_HEAP if (i::FLAG_verify_heap) { i::Object(*obj).ObjectVerify(isolate); @@ -826,24 +829,17 @@ i::Address* GlobalizeTracedReference( return result.location(); } -void MoveTracedGlobalReference(internal::Address** from, - internal::Address** to) { - GlobalHandles::MoveTracedGlobal(from, to); -} - -void CopyTracedGlobalReference(const internal::Address* const* from, - internal::Address** to) { - GlobalHandles::CopyTracedGlobal(from, to); +void MoveTracedReference(internal::Address** from, internal::Address** to) { + GlobalHandles::MoveTracedReference(from, to); } -void DisposeTracedGlobal(internal::Address* location) { - GlobalHandles::DestroyTraced(location); +void CopyTracedReference(const internal::Address* const* from, + internal::Address** to) { + GlobalHandles::CopyTracedReference(from, to); } -void SetFinalizationCallbackTraced(internal::Address* location, void* parameter, - WeakCallbackInfo<void>::Callback callback) { - GlobalHandles::SetFinalizationCallbackForTraced(location, parameter, - callback); +void DisposeTracedReference(internal::Address* location) { + GlobalHandles::DestroyTracedReference(location); } } // namespace internal @@ -1638,6 +1634,19 @@ static void TemplateSetAccessor( i::ApiNatives::AddNativeDataProperty(isolate, info, accessor_info); } +void Template::SetNativeDataProperty(v8::Local<String> name, + AccessorGetterCallback getter, + AccessorSetterCallback setter, + v8::Local<Value> data, + PropertyAttribute attribute, + AccessControl settings, + SideEffectType getter_side_effect_type, + SideEffectType setter_side_effect_type) { + TemplateSetAccessor(this, name, getter, setter, data, settings, attribute, + Local<AccessorSignature>(), true, false, + getter_side_effect_type, setter_side_effect_type); +} + void Template::SetNativeDataProperty( v8::Local<String> name, AccessorGetterCallback getter, AccessorSetterCallback setter, v8::Local<Value> data, @@ -1649,6 +1658,19 @@ void Template::SetNativeDataProperty( setter_side_effect_type); } +void Template::SetNativeDataProperty(v8::Local<Name> name, + AccessorNameGetterCallback getter, + AccessorNameSetterCallback setter, + v8::Local<Value> data, + PropertyAttribute attribute, + AccessControl settings, + SideEffectType getter_side_effect_type, + SideEffectType setter_side_effect_type) { + TemplateSetAccessor(this, name, getter, setter, data, settings, attribute, + Local<AccessorSignature>(), true, false, + getter_side_effect_type, setter_side_effect_type); +} + void Template::SetNativeDataProperty( v8::Local<Name> name, AccessorNameGetterCallback getter, AccessorNameSetterCallback setter, v8::Local<Value> data, @@ -1688,6 +1710,32 @@ void ObjectTemplate::SetAccessor(v8::Local<String> name, AccessorSetterCallback setter, v8::Local<Value> data, AccessControl settings, PropertyAttribute attribute, + SideEffectType getter_side_effect_type, + SideEffectType setter_side_effect_type) { + TemplateSetAccessor(this, name, getter, setter, data, settings, attribute, + Local<AccessorSignature>(), + i::FLAG_disable_old_api_accessors, false, + getter_side_effect_type, setter_side_effect_type); +} + +void ObjectTemplate::SetAccessor(v8::Local<Name> name, + AccessorNameGetterCallback getter, + AccessorNameSetterCallback setter, + v8::Local<Value> data, AccessControl settings, + PropertyAttribute attribute, + SideEffectType getter_side_effect_type, + SideEffectType setter_side_effect_type) { + TemplateSetAccessor(this, name, getter, setter, data, settings, attribute, + Local<AccessorSignature>(), + i::FLAG_disable_old_api_accessors, false, + getter_side_effect_type, setter_side_effect_type); +} + +void ObjectTemplate::SetAccessor(v8::Local<String> name, + AccessorGetterCallback getter, + AccessorSetterCallback setter, + v8::Local<Value> data, AccessControl settings, + PropertyAttribute attribute, v8::Local<AccessorSignature> signature, SideEffectType getter_side_effect_type, SideEffectType setter_side_effect_type) { @@ -6062,6 +6110,11 @@ void V8::SetUnhandledExceptionCallback( } #endif // V8_OS_WIN +void v8::V8::SetFatalMemoryErrorCallback( + v8::OOMErrorCallback oom_error_callback) { + g_oom_error_callback = oom_error_callback; +} + void v8::V8::SetEntropySource(EntropySource entropy_source) { base::RandomNumberGenerator::SetEntropySource(entropy_source); } @@ -9878,15 +9931,22 @@ void CpuProfiler::SetUsePreciseSampling(bool use_precise_sampling) { use_precise_sampling); } -CpuProfilingStatus CpuProfiler::StartProfiling( +CpuProfilingResult CpuProfiler::Start( + CpuProfilingOptions options, + std::unique_ptr<DiscardedSamplesDelegate> delegate) { + return reinterpret_cast<i::CpuProfiler*>(this)->StartProfiling( + options, std::move(delegate)); +} + +CpuProfilingResult CpuProfiler::Start( Local<String> title, CpuProfilingOptions options, std::unique_ptr<DiscardedSamplesDelegate> delegate) { return reinterpret_cast<i::CpuProfiler*>(this)->StartProfiling( *Utils::OpenHandle(*title), options, std::move(delegate)); } -CpuProfilingStatus CpuProfiler::StartProfiling(Local<String> title, - bool record_samples) { +CpuProfilingResult CpuProfiler::Start(Local<String> title, + bool record_samples) { CpuProfilingOptions options( kLeafNodeLineNumbers, record_samples ? CpuProfilingOptions::kNoSampleLimit : 0); @@ -9894,13 +9954,31 @@ CpuProfilingStatus CpuProfiler::StartProfiling(Local<String> title, *Utils::OpenHandle(*title), options); } +CpuProfilingResult CpuProfiler::Start(Local<String> title, + CpuProfilingMode mode, + bool record_samples, + unsigned max_samples) { + CpuProfilingOptions options(mode, record_samples ? max_samples : 0); + return reinterpret_cast<i::CpuProfiler*>(this)->StartProfiling( + *Utils::OpenHandle(*title), options); +} + +CpuProfilingStatus CpuProfiler::StartProfiling( + Local<String> title, CpuProfilingOptions options, + std::unique_ptr<DiscardedSamplesDelegate> delegate) { + return Start(title, options, std::move(delegate)).status; +} + +CpuProfilingStatus CpuProfiler::StartProfiling(Local<String> title, + bool record_samples) { + return Start(title, record_samples).status; +} + CpuProfilingStatus CpuProfiler::StartProfiling(Local<String> title, CpuProfilingMode mode, bool record_samples, unsigned max_samples) { - CpuProfilingOptions options(mode, record_samples ? max_samples : 0); - return reinterpret_cast<i::CpuProfiler*>(this)->StartProfiling( - *Utils::OpenHandle(*title), options); + return Start(title, mode, record_samples, max_samples).status; } CpuProfile* CpuProfiler::StopProfiling(Local<String> title) { @@ -9909,6 +9987,11 @@ CpuProfile* CpuProfiler::StopProfiling(Local<String> title) { *Utils::OpenHandle(*title))); } +CpuProfile* CpuProfiler::Stop(ProfilerId id) { + return reinterpret_cast<CpuProfile*>( + reinterpret_cast<i::CpuProfiler*>(this)->StopProfiling(id)); +} + void CpuProfiler::UseDetailedSourcePositionsForProfiling(Isolate* isolate) { reinterpret_cast<i::Isolate*>(isolate) ->SetDetailedSourcePositionsForProfiling(true); @@ -10254,11 +10337,6 @@ bool EmbedderHeapTracer::IsRootForNonTracingGC( return true; } -bool EmbedderHeapTracer::IsRootForNonTracingGC( - const v8::TracedGlobal<v8::Value>& handle) { - return true; -} - void EmbedderHeapTracer::ResetHandleInNonTracingGC( const v8::TracedReference<v8::Value>& handle) { UNREACHABLE(); |