1 // Copyright 2018 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef V8_SNAPSHOT_READ_ONLY_SERIALIZER_H_ 6 #define V8_SNAPSHOT_READ_ONLY_SERIALIZER_H_ 7 8 #include <unordered_set> 9 10 #include "src/base/hashmap.h" 11 #include "src/snapshot/roots-serializer.h" 12 13 namespace v8 { 14 namespace internal { 15 16 class HeapObject; 17 class SnapshotByteSink; 18 19 class V8_EXPORT_PRIVATE ReadOnlySerializer : public RootsSerializer { 20 public: 21 ReadOnlySerializer(Isolate* isolate, Snapshot::SerializerFlags flags); 22 ~ReadOnlySerializer() override; 23 ReadOnlySerializer(const ReadOnlySerializer&) = delete; 24 ReadOnlySerializer& operator=(const ReadOnlySerializer&) = delete; 25 26 void SerializeReadOnlyRoots(); 27 28 // Completes the serialization of the read-only object cache and serializes 29 // any deferred objects. 30 void FinalizeSerialization(); 31 32 // If |obj| can be serialized in the read-only snapshot then add it to the 33 // read-only object cache if not already present and emit a 34 // ReadOnlyObjectCache bytecode into |sink|. Returns whether this was 35 // successful. 36 bool SerializeUsingReadOnlyObjectCache(SnapshotByteSink* sink, 37 Handle<HeapObject> obj); 38 39 private: 40 void ReconstructReadOnlyObjectCacheForTesting(); 41 42 void SerializeObjectImpl(Handle<HeapObject> o) override; 43 bool MustBeDeferred(HeapObject object) override; 44 45 #ifdef DEBUG 46 IdentityMap<int, base::DefaultAllocationPolicy> serialized_objects_; 47 bool did_serialize_not_mapped_symbol_; 48 #endif 49 }; 50 51 } // namespace internal 52 } // namespace v8 53 54 #endif // V8_SNAPSHOT_READ_ONLY_SERIALIZER_H_ 55