summaryrefslogtreecommitdiff
path: root/deps/v8/src/api/api.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/api/api.cc')
-rw-r--r--deps/v8/src/api/api.cc144
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();