1 // Copyright 2019 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef V8_HEAP_THIRD_PARTY_HEAP_API_H_ 6 #define V8_HEAP_THIRD_PARTY_HEAP_API_H_ 7 8 #include "src/base/address-region.h" 9 #include "src/heap/heap.h" 10 11 namespace v8 { 12 13 class Isolate; 14 15 namespace internal { 16 namespace third_party_heap { 17 18 class Impl; 19 20 class Heap { 21 public: 22 static std::unique_ptr<Heap> New(v8::internal::Isolate* isolate); 23 24 static v8::internal::Isolate* GetIsolate(Address address); 25 26 AllocationResult Allocate(size_t size_in_bytes, AllocationType type, 27 AllocationAlignment align); 28 29 Address GetObjectFromInnerPointer(Address inner_pointer); 30 31 const base::AddressRegion& GetCodeRange(); 32 33 bool IsPendingAllocation(HeapObject object); 34 35 static bool InSpace(Address address, AllocationSpace space); 36 37 static bool InOldSpace(Address address); 38 39 static bool InReadOnlySpace(Address address); 40 41 static bool InLargeObjectSpace(Address address); 42 43 static bool IsValidHeapObject(HeapObject object); 44 45 static bool IsImmovable(HeapObject object); 46 47 static bool IsValidCodeObject(HeapObject object); 48 49 void ResetIterator(); 50 HeapObject NextObject(); 51 52 bool CollectGarbage(); 53 54 size_t Capacity(); 55 impl()56 V8_INLINE Impl* impl() { return impl_; } 57 58 private: 59 Impl* impl_ = nullptr; 60 }; 61 62 } // namespace third_party_heap 63 } // namespace internal 64 } // namespace v8 65 66 #endif // V8_HEAP_THIRD_PARTY_HEAP_API_H_ 67