summaryrefslogtreecommitdiff
path: root/deps/v8/src/compiler/per-isolate-compiler-cache.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/compiler/per-isolate-compiler-cache.h')
-rw-r--r--deps/v8/src/compiler/per-isolate-compiler-cache.h64
1 files changed, 64 insertions, 0 deletions
diff --git a/deps/v8/src/compiler/per-isolate-compiler-cache.h b/deps/v8/src/compiler/per-isolate-compiler-cache.h
new file mode 100644
index 0000000000..70f53c38e1
--- /dev/null
+++ b/deps/v8/src/compiler/per-isolate-compiler-cache.h
@@ -0,0 +1,64 @@
+// 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_COMPILER_PER_ISOLATE_COMPILER_CACHE_H_
+#define V8_COMPILER_PER_ISOLATE_COMPILER_CACHE_H_
+
+#include "src/compiler/refs-map.h"
+#include "src/isolate.h"
+#include "src/zone/zone-containers.h"
+
+namespace v8 {
+namespace internal {
+
+class Isolate;
+class Zone;
+
+namespace compiler {
+
+class ObjectData;
+
+// This class serves as a per-isolate container of data that should be
+// persisted between compiler runs. For now it stores the code builtins
+// so they are not serialized on each compiler run.
+class PerIsolateCompilerCache : public ZoneObject {
+ public:
+ explicit PerIsolateCompilerCache(Zone* zone)
+ : zone_(zone), refs_snapshot_(nullptr) {}
+
+ RefsMap* GetSnapshot() { return refs_snapshot_; }
+ void SetSnapshot(RefsMap* refs) {
+ DCHECK_NULL(refs_snapshot_);
+ DCHECK(!refs->IsEmpty());
+ refs_snapshot_ = new (zone_) RefsMap(refs, zone_);
+ }
+
+ bool HasSnapshot() const { return refs_snapshot_; }
+
+ Zone* zone() const { return zone_; }
+
+ static void Setup(Isolate* isolate) {
+ if (isolate->compiler_cache()) return;
+
+ // The following zone is supposed to contain compiler-related objects
+ // that should live through all compilations, as opposed to the
+ // broker_zone which holds per-compilation data. It's not meant for
+ // per-compilation or heap broker data.
+ Zone* compiler_zone = new Zone(isolate->allocator(), "Compiler zone");
+ PerIsolateCompilerCache* compiler_cache =
+ new (compiler_zone) PerIsolateCompilerCache(compiler_zone);
+ isolate->set_compiler_utils(compiler_cache, compiler_zone);
+ }
+
+ private:
+ Zone* const zone_;
+
+ RefsMap* refs_snapshot_;
+};
+
+} // namespace compiler
+} // namespace internal
+} // namespace v8
+
+#endif // V8_COMPILER_PER_ISOLATE_COMPILER_CACHE_H_