| Index: src/heap/heap.cc
|
| diff --git a/src/heap/heap.cc b/src/heap/heap.cc
|
| index ce92611c0755c8d0530a45f1b6d0a8c86ac2f9fd..d4353cefb6da5c8b70755c73aeb4bae063061b2a 100644
|
| --- a/src/heap/heap.cc
|
| +++ b/src/heap/heap.cc
|
| @@ -115,7 +115,6 @@ Heap::Heap()
|
| inline_allocation_disabled_(false),
|
| total_regexp_code_generated_(0),
|
| tracer_(nullptr),
|
| - embedder_heap_tracer_(nullptr),
|
| high_survival_rate_period_length_(0),
|
| promoted_objects_size_(0),
|
| promotion_ratio_(0),
|
| @@ -1554,15 +1553,12 @@ static bool IsUnmodifiedHeapObject(Object** p) {
|
| if (object->IsSmi()) return false;
|
| HeapObject* heap_object = HeapObject::cast(object);
|
| if (!object->IsJSObject()) return false;
|
| - Object* obj_constructor = (JSObject::cast(object))->map()->GetConstructor();
|
| - if (!obj_constructor->IsJSFunction()) return false;
|
| - JSFunction* constructor = JSFunction::cast(obj_constructor);
|
| - if (!constructor->shared()->IsApiFunction()) return false;
|
| - if (constructor != nullptr &&
|
| - constructor->initial_map() == heap_object->map()) {
|
| - return true;
|
| - }
|
| - return false;
|
| + JSObject* js_object = JSObject::cast(object);
|
| + if (!js_object->WasConstructedFromApiFunction()) return false;
|
| + JSFunction* constructor =
|
| + JSFunction::cast(js_object->map()->GetConstructor());
|
| +
|
| + return constructor->initial_map() == heap_object->map();
|
| }
|
|
|
|
|
| @@ -3589,6 +3585,7 @@ AllocationResult Heap::CopyJSObject(JSObject* source, AllocationSite* site) {
|
| CHECK(map->instance_type() == JS_REGEXP_TYPE ||
|
| map->instance_type() == JS_OBJECT_TYPE ||
|
| map->instance_type() == JS_ARRAY_TYPE ||
|
| + map->instance_type() == JS_API_OBJECT_TYPE ||
|
| map->instance_type() == JS_SPECIAL_API_OBJECT_TYPE);
|
|
|
| int object_size = map->instance_size();
|
| @@ -5385,6 +5382,26 @@ void Heap::NotifyDeserializationComplete() {
|
| #endif // DEBUG
|
| }
|
|
|
| +void Heap::SetEmbedderHeapTracer(EmbedderHeapTracer* tracer) {
|
| + mark_compact_collector()->SetEmbedderHeapTracer(tracer);
|
| +}
|
| +
|
| +bool Heap::UsingEmbedderHeapTracer() {
|
| + return mark_compact_collector()->embedder_heap_tracer();
|
| +}
|
| +
|
| +void Heap::TracePossibleWrapper(JSObject* js_object) {
|
| + DCHECK(js_object->WasConstructedFromApiFunction());
|
| + if (js_object->GetInternalFieldCount() >= 2 &&
|
| + js_object->GetInternalField(0) != undefined_value() &&
|
| + js_object->GetInternalField(1) != undefined_value()) {
|
| + mark_compact_collector()->wrappers_to_trace().push_back(
|
| + std::pair<void*, void*>(
|
| + reinterpret_cast<void*>(js_object->GetInternalField(0)),
|
| + reinterpret_cast<void*>(js_object->GetInternalField(1))));
|
| + }
|
| +}
|
| +
|
| void Heap::RegisterExternallyReferencedObject(Object** object) {
|
| DCHECK(mark_compact_collector()->in_use());
|
| HeapObject* heap_object = HeapObject::cast(*object);
|
| @@ -5560,12 +5577,6 @@ void Heap::RemoveGCEpilogueCallback(v8::Isolate::GCCallback callback) {
|
| UNREACHABLE();
|
| }
|
|
|
| -void Heap::SetEmbedderHeapTracer(EmbedderHeapTracer* tracer) {
|
| - DCHECK_NOT_NULL(tracer);
|
| - CHECK_NULL(embedder_heap_tracer_);
|
| - embedder_heap_tracer_ = tracer;
|
| -}
|
| -
|
| // TODO(ishell): Find a better place for this.
|
| void Heap::AddWeakObjectToCodeDependency(Handle<HeapObject> obj,
|
| Handle<DependentCode> dep) {
|
|
|