// Copyright 2017 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_SNAPSHOT_BUILTIN_SERIALIZER_H_ #define V8_SNAPSHOT_BUILTIN_SERIALIZER_H_ #include "src/interpreter/interpreter.h" #include "src/snapshot/builtin-serializer-allocator.h" #include "src/snapshot/builtin-snapshot-utils.h" #include "src/snapshot/serializer.h" namespace v8 { namespace internal { class StartupSerializer; // Responsible for serializing builtin and bytecode handler objects during // startup snapshot creation into a dedicated area of the snapshot. // See snapshot.h for documentation of the snapshot layout. class BuiltinSerializer : public Serializer<BuiltinSerializerAllocator> { using BSU = BuiltinSnapshotUtils; public: BuiltinSerializer(Isolate* isolate, StartupSerializer* startup_serializer); ~BuiltinSerializer() override; void SerializeBuiltinsAndHandlers(); private: void VisitRootPointers(Root root, Object** start, Object** end) override; void SerializeBuiltin(Code* code); void SerializeHandler(Code* code); void SerializeObject(HeapObject* o, HowToCode how_to_code, WhereToPoint where_to_point, int skip) override; void SetBuiltinOffset(int builtin_id, uint32_t offset); void SetHandlerOffset(interpreter::Bytecode bytecode, interpreter::OperandScale operand_scale, uint32_t offset); // The startup serializer is needed for access to the partial snapshot cache, // which is used to serialize things like embedded constants. StartupSerializer* startup_serializer_; // Stores the starting offset, within the serialized data, of each code // object. This is later packed into the builtin snapshot, and used by the // builtin deserializer to deserialize individual builtins and bytecode // handlers. // // Indices [kFirstBuiltinIndex, kFirstBuiltinIndex + kNumberOfBuiltins[: // Builtin offsets. // Indices [kFirstHandlerIndex, kFirstHandlerIndex + kNumberOfHandlers[: // Bytecode handler offsets. uint32_t code_offsets_[BuiltinSnapshotUtils::kNumberOfCodeObjects]; DISALLOW_COPY_AND_ASSIGN(BuiltinSerializer); }; } // namespace internal } // namespace v8 #endif // V8_SNAPSHOT_BUILTIN_SERIALIZER_H_