summaryrefslogtreecommitdiff
path: root/deps/v8/src/init/isolate-allocator.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/init/isolate-allocator.h')
-rw-r--r--deps/v8/src/init/isolate-allocator.h63
1 files changed, 63 insertions, 0 deletions
diff --git a/deps/v8/src/init/isolate-allocator.h b/deps/v8/src/init/isolate-allocator.h
new file mode 100644
index 0000000000..cd0e102d40
--- /dev/null
+++ b/deps/v8/src/init/isolate-allocator.h
@@ -0,0 +1,63 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef V8_INIT_ISOLATE_ALLOCATOR_H_
+#define V8_INIT_ISOLATE_ALLOCATOR_H_
+
+#include "src/base/bounded-page-allocator.h"
+#include "src/base/page-allocator.h"
+#include "src/common/globals.h"
+#include "src/utils/allocation.h"
+
+namespace v8 {
+
+// Forward declarations.
+namespace base {
+class BoundedPageAllocator;
+}
+
+namespace internal {
+
+// IsolateAllocator object is responsible for allocating memory for one (!)
+// Isolate object. Depending on the allocation mode the memory can be allocated
+// 1) in the C++ heap (when pointer compression is disabled)
+// 2) in a proper part of a properly aligned region of a reserved address space
+// (when pointer compression is enabled).
+//
+// Isolate::New() first creates IsolateAllocator object which allocates the
+// memory and then it constructs Isolate object in this memory. Once it's done
+// the Isolate object takes ownership of the IsolateAllocator object to keep
+// the memory alive.
+// Isolate::Delete() takes care of the proper order of the objects destruction.
+class V8_EXPORT_PRIVATE IsolateAllocator final {
+ public:
+ explicit IsolateAllocator(IsolateAllocationMode mode);
+ ~IsolateAllocator();
+
+ void* isolate_memory() const { return isolate_memory_; }
+
+ v8::PageAllocator* page_allocator() const { return page_allocator_; }
+
+ IsolateAllocationMode mode() {
+ return reservation_.IsReserved() ? IsolateAllocationMode::kInV8Heap
+ : IsolateAllocationMode::kInCppHeap;
+ }
+
+ private:
+ Address InitReservation();
+ void CommitPagesForIsolate(Address heap_address);
+
+ // The allocated memory for Isolate instance.
+ void* isolate_memory_ = nullptr;
+ v8::PageAllocator* page_allocator_ = nullptr;
+ std::unique_ptr<base::BoundedPageAllocator> page_allocator_instance_;
+ VirtualMemory reservation_;
+
+ DISALLOW_COPY_AND_ASSIGN(IsolateAllocator);
+};
+
+} // namespace internal
+} // namespace v8
+
+#endif // V8_INIT_ISOLATE_ALLOCATOR_H_