summaryrefslogtreecommitdiff
path: root/deps/v8/src/snapshot/serializer.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/snapshot/serializer.h')
-rw-r--r--deps/v8/src/snapshot/serializer.h50
1 files changed, 35 insertions, 15 deletions
diff --git a/deps/v8/src/snapshot/serializer.h b/deps/v8/src/snapshot/serializer.h
index edd3dfea31..86a8cec8bd 100644
--- a/deps/v8/src/snapshot/serializer.h
+++ b/deps/v8/src/snapshot/serializer.h
@@ -29,7 +29,10 @@ class CodeAddressMap : public CodeEventLogger {
isolate_->v8_file_logger()->RemoveLogEventListener(this);
}
- void CodeMoveEvent(AbstractCode from, AbstractCode to) override {
+ void CodeMoveEvent(InstructionStream from, InstructionStream to) override {
+ address_to_name_map_.Move(from.address(), to.address());
+ }
+ void BytecodeMoveEvent(BytecodeArray from, BytecodeArray to) override {
address_to_name_map_.Move(from.address(), to.address());
}
@@ -115,10 +118,10 @@ class CodeAddressMap : public CodeEventLogger {
base::HashMap impl_;
};
- void LogRecordedBuffer(Handle<AbstractCode> code,
- MaybeHandle<SharedFunctionInfo>, const char* name,
- int length) override {
- address_to_name_map_.Insert(code->address(), name, length);
+ void LogRecordedBuffer(AbstractCode code, MaybeHandle<SharedFunctionInfo>,
+ const char* name, int length) override {
+ DisallowGarbageCollection no_gc;
+ address_to_name_map_.Insert(code.address(), name, length);
}
#if V8_ENABLE_WEBASSEMBLY
@@ -186,7 +189,7 @@ class Serializer : public SerializerDeserializer {
Isolate* isolate() const { return isolate_; }
// The pointer compression cage base value used for decompression of all
- // tagged values except references to Code objects.
+ // tagged values except references to InstructionStream objects.
PtrComprCageBase cage_base() const {
#if V8_COMPRESS_POINTERS
return cage_base_;
@@ -266,6 +269,8 @@ class Serializer : public SerializerDeserializer {
return external_reference_encoder_.TryEncode(addr);
}
+ bool SerializeReadOnlyObjectReference(HeapObject obj, SnapshotByteSink* sink);
+
// GetInt reads 4 bytes at once, requiring padding at the end.
// Use padding_offset to specify the space you want to use after padding.
void Pad(int padding_offset = 0);
@@ -274,7 +279,7 @@ class Serializer : public SerializerDeserializer {
// of the serializer. Initialize it on demand.
void InitializeCodeAddressMap();
- Code CopyCode(Code code);
+ InstructionStream CopyCode(InstructionStream code);
void QueueDeferredObject(HeapObject obj) {
DCHECK_NULL(reference_map_.LookupReference(obj));
@@ -317,6 +322,16 @@ class Serializer : public SerializerDeserializer {
Snapshot::kReconstructReadOnlyAndSharedObjectCachesForTesting) != 0;
}
+ bool deferred_objects_empty() { return deferred_objects_.size() == 0; }
+
+ protected:
+ bool serializer_tracks_serialization_statistics() const {
+ return serializer_tracks_serialization_statistics_;
+ }
+ void set_serializer_tracks_serialization_statistics(bool v) {
+ serializer_tracks_serialization_statistics_ = v;
+ }
+
private:
// A circular queue of hot objects. This is added to in the same order as in
// Deserializer::HotObjectsList, but this stores the objects as an array of
@@ -404,12 +419,17 @@ class Serializer : public SerializerDeserializer {
int recursion_depth_ = 0;
const Snapshot::SerializerFlags flags_;
+ bool serializer_tracks_serialization_statistics_ = true;
size_t allocation_size_[kNumberOfSnapshotSpaces] = {0};
#ifdef OBJECT_PRINT
+// Verbose serialization_statistics output is only enabled conditionally.
+#define VERBOSE_SERIALIZATION_STATISTICS
+#endif
+#ifdef VERBOSE_SERIALIZATION_STATISTICS
static constexpr int kInstanceTypes = LAST_TYPE + 1;
std::unique_ptr<int[]> instance_type_count_[kNumberOfSnapshotSpaces];
std::unique_ptr<size_t[]> instance_type_size_[kNumberOfSnapshotSpaces];
-#endif // OBJECT_PRINT
+#endif // VERBOSE_SERIALIZATION_STATISTICS
#ifdef DEBUG
GlobalHandleVector<HeapObject> back_refs_;
@@ -442,12 +462,12 @@ class Serializer::ObjectSerializer : public ObjectVisitor {
ObjectSlot end) override;
void VisitPointers(HeapObject host, MaybeObjectSlot start,
MaybeObjectSlot end) override;
- void VisitCodePointer(HeapObject host, CodeObjectSlot slot) override;
- void VisitEmbeddedPointer(Code host, RelocInfo* target) override;
- void VisitExternalReference(Code host, RelocInfo* rinfo) override;
- void VisitInternalReference(Code host, RelocInfo* rinfo) override;
- void VisitCodeTarget(Code host, RelocInfo* target) override;
- void VisitOffHeapTarget(Code host, RelocInfo* target) override;
+ void VisitCodePointer(Code host, CodeObjectSlot slot) override;
+ void VisitEmbeddedPointer(RelocInfo* target) override;
+ void VisitExternalReference(RelocInfo* rinfo) override;
+ void VisitInternalReference(RelocInfo* rinfo) override;
+ void VisitCodeTarget(RelocInfo* target) override;
+ void VisitOffHeapTarget(RelocInfo* target) override;
void VisitExternalPointer(HeapObject host, ExternalPointerSlot slot,
ExternalPointerTag tag) override;
@@ -465,7 +485,7 @@ class Serializer::ObjectSerializer : public ObjectVisitor {
void OutputExternalReference(Address target, int target_size, bool sandboxify,
ExternalPointerTag tag);
void OutputRawData(Address up_to);
- void SerializeCode(Map map, int size);
+ void SerializeInstructionStream(Map map, int size);
uint32_t SerializeBackingStore(void* backing_store, int32_t byte_length,
Maybe<int32_t> max_byte_length);
void SerializeJSTypedArray();