1 // Copyright 2020 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_BASE_SPACE_H_ 6 #define V8_HEAP_BASE_SPACE_H_ 7 8 #include <atomic> 9 10 #include "src/base/macros.h" 11 #include "src/common/globals.h" 12 #include "src/logging/log.h" 13 #include "src/utils/allocation.h" 14 15 namespace v8 { 16 namespace internal { 17 18 class Heap; 19 20 // ---------------------------------------------------------------------------- 21 // BaseSpace is the abstract superclass for all allocation spaces. 22 class V8_EXPORT_PRIVATE BaseSpace : public Malloced { 23 public: 24 BaseSpace(const BaseSpace&) = delete; 25 BaseSpace& operator=(const BaseSpace&) = delete; 26 heap()27 Heap* heap() const { 28 DCHECK_NOT_NULL(heap_); 29 return heap_; 30 } 31 identity()32 AllocationSpace identity() const { return id_; } 33 34 // Returns name of the space. 35 static const char* GetSpaceName(AllocationSpace space); 36 name()37 const char* name() const { return GetSpaceName(id_); } 38 AccountCommitted(size_t bytes)39 void AccountCommitted(size_t bytes) { 40 DCHECK_GE(committed_ + bytes, committed_); 41 committed_ += bytes; 42 if (committed_ > max_committed_) { 43 max_committed_ = committed_; 44 } 45 } 46 AccountUncommitted(size_t bytes)47 void AccountUncommitted(size_t bytes) { 48 DCHECK_GE(committed_, committed_ - bytes); 49 committed_ -= bytes; 50 } 51 52 // Return the total amount committed memory for this space, i.e., allocatable 53 // memory and page headers. CommittedMemory()54 virtual size_t CommittedMemory() const { return committed_; } 55 MaximumCommittedMemory()56 virtual size_t MaximumCommittedMemory() const { return max_committed_; } 57 58 // Approximate amount of physical memory committed for this space. 59 virtual size_t CommittedPhysicalMemory() const = 0; 60 61 // Returns allocated size. 62 virtual size_t Size() const = 0; 63 64 protected: BaseSpace(Heap * heap,AllocationSpace id)65 BaseSpace(Heap* heap, AllocationSpace id) 66 : heap_(heap), id_(id), committed_(0), max_committed_(0) {} 67 68 virtual ~BaseSpace() = default; 69 70 protected: 71 Heap* heap_; 72 AllocationSpace id_; 73 74 // Keeps track of committed memory in a space. 75 std::atomic<size_t> committed_; 76 size_t max_committed_; 77 }; 78 79 } // namespace internal 80 } // namespace v8 81 82 #endif // V8_HEAP_BASE_SPACE_H_ 83