Index: src/heap/spaces.h |
diff --git a/src/heap/spaces.h b/src/heap/spaces.h |
index 066bbfa7cdbff723921007e7dd0f2f47fb216613..1dbcbd93da72774e1fbca3597aa06e0fb6690ec8 100644 |
--- a/src/heap/spaces.h |
+++ b/src/heap/spaces.h |
@@ -1097,7 +1097,7 @@ class SkipList { |
// A space acquires chunks of memory from the operating system. The memory |
// allocator allocates and deallocates pages for the paged heap spaces and large |
// pages for large object space. |
-class MemoryAllocator { |
+class V8_EXPORT_PRIVATE MemoryAllocator { |
public: |
// Unmapper takes care of concurrently unmapping and uncommitting memory |
// chunks. |
@@ -1149,6 +1149,11 @@ class MemoryAllocator { |
kNumberOfChunkQueues, |
}; |
+ enum class FreeMode { |
+ kUncommitPooled, |
+ kReleasePooled, |
+ }; |
+ |
template <ChunkQueueType type> |
void AddMemoryChunkSafe(MemoryChunk* chunk) { |
base::LockGuard<base::Mutex> guard(&mutex_); |
@@ -1170,6 +1175,7 @@ class MemoryAllocator { |
} |
void ReconsiderDelayedChunks(); |
+ template <FreeMode mode> |
void PerformFreeMemoryOnQueuedChunks(); |
base::Mutex mutex_; |
@@ -1192,6 +1198,7 @@ class MemoryAllocator { |
enum FreeMode { |
kFull, |
+ kAlreadyPooled, |
kPreFreeAndQueue, |
kPooledAndQueue, |
}; |
@@ -1381,6 +1388,15 @@ class MemoryAllocator { |
DISALLOW_IMPLICIT_CONSTRUCTORS(MemoryAllocator); |
}; |
+extern template Page* |
+MemoryAllocator::AllocatePage<MemoryAllocator::kRegular, PagedSpace>( |
+ size_t size, PagedSpace* owner, Executability executable); |
+extern template Page* |
+MemoryAllocator::AllocatePage<MemoryAllocator::kRegular, SemiSpace>( |
+ size_t size, SemiSpace* owner, Executability executable); |
+extern template Page* |
+MemoryAllocator::AllocatePage<MemoryAllocator::kPooled, SemiSpace>( |
+ size_t size, SemiSpace* owner, Executability executable); |
// ----------------------------------------------------------------------------- |
// Interface for heap object iterator to be implemented by all object space |
@@ -1648,7 +1664,7 @@ class AllocationStats BASE_EMBEDDED { |
// words in size. |
// At least 16384 words (huge): This list is for objects of 2048 words or |
// larger. Empty pages are also added to this list. |
-class FreeList { |
+class V8_EXPORT_PRIVATE FreeList { |
public: |
// This method returns how much memory can be allocated after freeing |
// maximum_freed memory. |
@@ -1885,7 +1901,7 @@ class LocalAllocationBuffer { |
AllocationInfo allocation_info_; |
}; |
-class PagedSpace : public Space { |
+class V8_EXPORT_PRIVATE PagedSpace : NON_EXPORTED_BASE(public Space) { |
public: |
typedef PageIterator iterator; |