 Chromium Code Reviews
 Chromium Code Reviews Issue 2702303002:
  [heap] Notify GC on potentially unsafe object layout changes.  (Closed)
    
  
    Issue 2702303002:
  [heap] Notify GC on potentially unsafe object layout changes.  (Closed) 
  | Index: src/heap/heap.cc | 
| diff --git a/src/heap/heap.cc b/src/heap/heap.cc | 
| index a60b510492ab1762c59e538ebd56402428fd2082..2cc690366813c979256a17f04f6529fcaff79a7a 100644 | 
| --- a/src/heap/heap.cc | 
| +++ b/src/heap/heap.cc | 
| @@ -159,7 +159,8 @@ Heap::Heap() | 
| local_embedder_heap_tracer_(nullptr), | 
| fast_promotion_mode_(false), | 
| force_oom_(false), | 
| - delay_sweeper_tasks_for_testing_(false) { | 
| + delay_sweeper_tasks_for_testing_(false), | 
| + pending_layout_change_object_(nullptr) { | 
| // Allow build-time customization of the max semispace size. Building | 
| // V8 with snapshots and a non-default max semispace size is much | 
| // easier if you can define it as part of the build environment. | 
| @@ -4292,6 +4293,27 @@ void Heap::RegisterReservationsForBlackAllocation(Reservation* reservations) { | 
| } | 
| } | 
| +void Heap::NotifyObjectLayoutChange(HeapObject* object, | 
| 
Igor Sheludko
2017/02/21 10:22:25
WDYT about putting this to heap-inl.h?
 | 
| + const DisallowHeapAllocation&) { | 
| +// TODO(ulan): Add synchronization with the concurrent marker. | 
| +#ifdef VERIFY_HEAP | 
| + DCHECK(pending_layout_change_object_ == nullptr); | 
| + pending_layout_change_object_ = object; | 
| +#endif | 
| +} | 
| + | 
| +#ifdef VERIFY_HEAP | 
| +void Heap::VerifyObjectLayoutChange(HeapObject* object, Map* new_map) { | 
| + if (pending_layout_change_object_ == nullptr) { | 
| + DCHECK(!object->IsJSObject() || | 
| + !object->map()->TransitionRequiresSynchronizationWithGC(new_map)); | 
| + } else { | 
| + DCHECK_EQ(pending_layout_change_object_, object); | 
| + pending_layout_change_object_ = nullptr; | 
| + } | 
| +} | 
| +#endif | 
| + | 
| GCIdleTimeHeapState Heap::ComputeHeapState() { | 
| GCIdleTimeHeapState heap_state; | 
| heap_state.contexts_disposed = contexts_disposed_; |