diff options
Diffstat (limited to 'deps/v8/src/snapshot/serializer.h')
-rw-r--r-- | deps/v8/src/snapshot/serializer.h | 50 |
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(); |