| 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;
|
|
|
|
|