| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/heap/heap.h" | 5 #include "src/heap/heap.h" |
| 6 | 6 |
| 7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
| 8 #include "src/api.h" | 8 #include "src/api.h" |
| 9 #include "src/assembler-inl.h" | 9 #include "src/assembler-inl.h" |
| 10 #include "src/ast/context-slot-cache.h" | 10 #include "src/ast/context-slot-cache.h" |
| (...skipping 3494 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3505 // for example, JSArray::JSArrayVerify). | 3505 // for example, JSArray::JSArrayVerify). |
| 3506 InitializeJSObjectBody(obj, map, JSObject::kHeaderSize); | 3506 InitializeJSObjectBody(obj, map, JSObject::kHeaderSize); |
| 3507 } | 3507 } |
| 3508 | 3508 |
| 3509 | 3509 |
| 3510 void Heap::InitializeJSObjectBody(JSObject* obj, Map* map, int start_offset) { | 3510 void Heap::InitializeJSObjectBody(JSObject* obj, Map* map, int start_offset) { |
| 3511 if (start_offset == map->instance_size()) return; | 3511 if (start_offset == map->instance_size()) return; |
| 3512 DCHECK_LT(start_offset, map->instance_size()); | 3512 DCHECK_LT(start_offset, map->instance_size()); |
| 3513 | 3513 |
| 3514 // We cannot always fill with one_pointer_filler_map because objects | 3514 // We cannot always fill with one_pointer_filler_map because objects |
| 3515 // created from API functions expect their internal fields to be initialized | 3515 // created from API functions expect their embedder fields to be initialized |
| 3516 // with undefined_value. | 3516 // with undefined_value. |
| 3517 // Pre-allocated fields need to be initialized with undefined_value as well | 3517 // Pre-allocated fields need to be initialized with undefined_value as well |
| 3518 // so that object accesses before the constructor completes (e.g. in the | 3518 // so that object accesses before the constructor completes (e.g. in the |
| 3519 // debugger) will not cause a crash. | 3519 // debugger) will not cause a crash. |
| 3520 | 3520 |
| 3521 // In case of Array subclassing the |map| could already be transitioned | 3521 // In case of Array subclassing the |map| could already be transitioned |
| 3522 // to different elements kind from the initial map on which we track slack. | 3522 // to different elements kind from the initial map on which we track slack. |
| 3523 bool in_progress = map->IsInobjectSlackTrackingInProgress(); | 3523 bool in_progress = map->IsInobjectSlackTrackingInProgress(); |
| 3524 Object* filler; | 3524 Object* filler; |
| 3525 if (in_progress) { | 3525 if (in_progress) { |
| (...skipping 2098 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5624 deserialization_complete_ = true; | 5624 deserialization_complete_ = true; |
| 5625 } | 5625 } |
| 5626 | 5626 |
| 5627 void Heap::SetEmbedderHeapTracer(EmbedderHeapTracer* tracer) { | 5627 void Heap::SetEmbedderHeapTracer(EmbedderHeapTracer* tracer) { |
| 5628 DCHECK_EQ(gc_state_, HeapState::NOT_IN_GC); | 5628 DCHECK_EQ(gc_state_, HeapState::NOT_IN_GC); |
| 5629 local_embedder_heap_tracer()->SetRemoteTracer(tracer); | 5629 local_embedder_heap_tracer()->SetRemoteTracer(tracer); |
| 5630 } | 5630 } |
| 5631 | 5631 |
| 5632 void Heap::TracePossibleWrapper(JSObject* js_object) { | 5632 void Heap::TracePossibleWrapper(JSObject* js_object) { |
| 5633 DCHECK(js_object->WasConstructedFromApiFunction()); | 5633 DCHECK(js_object->WasConstructedFromApiFunction()); |
| 5634 if (js_object->GetInternalFieldCount() >= 2 && | 5634 if (js_object->GetEmbedderFieldCount() >= 2 && |
| 5635 js_object->GetInternalField(0) && | 5635 js_object->GetEmbedderField(0) && |
| 5636 js_object->GetInternalField(0) != undefined_value() && | 5636 js_object->GetEmbedderField(0) != undefined_value() && |
| 5637 js_object->GetInternalField(1) != undefined_value()) { | 5637 js_object->GetEmbedderField(1) != undefined_value()) { |
| 5638 DCHECK(reinterpret_cast<intptr_t>(js_object->GetInternalField(0)) % 2 == 0); | 5638 DCHECK(reinterpret_cast<intptr_t>(js_object->GetEmbedderField(0)) % 2 == 0); |
| 5639 local_embedder_heap_tracer()->AddWrapperToTrace(std::pair<void*, void*>( | 5639 local_embedder_heap_tracer()->AddWrapperToTrace(std::pair<void*, void*>( |
| 5640 reinterpret_cast<void*>(js_object->GetInternalField(0)), | 5640 reinterpret_cast<void*>(js_object->GetEmbedderField(0)), |
| 5641 reinterpret_cast<void*>(js_object->GetInternalField(1)))); | 5641 reinterpret_cast<void*>(js_object->GetEmbedderField(1)))); |
| 5642 } | 5642 } |
| 5643 } | 5643 } |
| 5644 | 5644 |
| 5645 void Heap::RegisterExternallyReferencedObject(Object** object) { | 5645 void Heap::RegisterExternallyReferencedObject(Object** object) { |
| 5646 HeapObject* heap_object = HeapObject::cast(*object); | 5646 HeapObject* heap_object = HeapObject::cast(*object); |
| 5647 DCHECK(Contains(heap_object)); | 5647 DCHECK(Contains(heap_object)); |
| 5648 if (FLAG_incremental_marking_wrappers && incremental_marking()->IsMarking()) { | 5648 if (FLAG_incremental_marking_wrappers && incremental_marking()->IsMarking()) { |
| 5649 IncrementalMarking::MarkGrey(this, heap_object); | 5649 IncrementalMarking::MarkGrey(this, heap_object); |
| 5650 } else { | 5650 } else { |
| 5651 DCHECK(mark_compact_collector()->in_use()); | 5651 DCHECK(mark_compact_collector()->in_use()); |
| (...skipping 722 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6374 } | 6374 } |
| 6375 | 6375 |
| 6376 | 6376 |
| 6377 // static | 6377 // static |
| 6378 int Heap::GetStaticVisitorIdForMap(Map* map) { | 6378 int Heap::GetStaticVisitorIdForMap(Map* map) { |
| 6379 return StaticVisitorBase::GetVisitorId(map); | 6379 return StaticVisitorBase::GetVisitorId(map); |
| 6380 } | 6380 } |
| 6381 | 6381 |
| 6382 } // namespace internal | 6382 } // namespace internal |
| 6383 } // namespace v8 | 6383 } // namespace v8 |
| OLD | NEW |