#include "src/snapshot/code-serializer.h"
#include <memory>
#include "src/base/logging.h"
#include "src/base/platform/elapsed-timer.h"
#include "src/base/platform/platform.h"
#include "src/baseline/baseline-batch-compiler.h"
#include "src/codegen/background-merge-task.h"
#include "src/common/globals.h"
#include "src/handles/maybe-handles.h"
#include "src/handles/persistent-handles.h"
#include "src/heap/heap-inl.h"
#include "src/heap/parked-scope.h"
#include "src/logging/counters-scopes.h"
#include "src/logging/log.h"
#include "src/logging/runtime-call-stats-scope.h"
#include "src/objects/objects-inl.h"
#include "src/objects/shared-function-info.h"
#include "src/objects/slots.h"
#include "src/objects/visitors.h"
#include "src/snapshot/object-deserializer.h"
#include "src/snapshot/snapshot-utils.h"
#include "src/snapshot/snapshot.h"
#include "src/utils/version.h"
namespace v8 {
namespace internal {
AlignedCachedData::AlignedCachedData(const uint8_t* data, int length)
: … { … }
CodeSerializer::CodeSerializer(Isolate* isolate, uint32_t source_hash)
: … { … }
ScriptCompiler::CachedData* CodeSerializer::Serialize(
Isolate* isolate, Handle<SharedFunctionInfo> info) { … }
AlignedCachedData* CodeSerializer::SerializeSharedFunctionInfo(
Handle<SharedFunctionInfo> info) { … }
void CodeSerializer::SerializeObjectImpl(Handle<HeapObject> obj,
SlotType slot_type) { … }
void CodeSerializer::SerializeGeneric(Handle<HeapObject> heap_object,
SlotType slot_type) { … }
namespace {
void CreateInterpreterDataForDeserializedCode(
Isolate* isolate, DirectHandle<SharedFunctionInfo> result_sfi,
bool log_code_creation) { … }
class StressOffThreadDeserializeThread final : public base::Thread { … };
void FinalizeDeserialization(Isolate* isolate,
DirectHandle<SharedFunctionInfo> result,
const base::ElapsedTimer& timer,
const ScriptDetails& script_details) { … }
#ifdef V8_ENABLE_SPARKPLUG
void BaselineBatchCompileIfSparkplugCompiled(Isolate* isolate,
Tagged<Script> script) { … }
#else
void BaselineBatchCompileIfSparkplugCompiled(Isolate*, Tagged<Script>) {}
#endif
const char* ToString(SerializedCodeSanityCheckResult result) { … }
}
MaybeHandle<SharedFunctionInfo> CodeSerializer::Deserialize(
Isolate* isolate, AlignedCachedData* cached_data, Handle<String> source,
const ScriptDetails& script_details,
MaybeHandle<Script> maybe_cached_script) { … }
Handle<Script> CodeSerializer::OffThreadDeserializeData::GetOnlyScript(
LocalHeap* heap) { … }
CodeSerializer::OffThreadDeserializeData
CodeSerializer::StartDeserializeOffThread(LocalIsolate* local_isolate,
AlignedCachedData* cached_data) { … }
MaybeHandle<SharedFunctionInfo> CodeSerializer::FinishOffThreadDeserialize(
Isolate* isolate, OffThreadDeserializeData&& data,
AlignedCachedData* cached_data, DirectHandle<String> source,
const ScriptDetails& script_details,
BackgroundMergeTask* background_merge_task) { … }
SerializedCodeData::SerializedCodeData(const std::vector<uint8_t>* payload,
const CodeSerializer* cs) { … }
SerializedCodeSanityCheckResult SerializedCodeData::SanityCheck(
uint32_t expected_ro_snapshot_checksum,
uint32_t expected_source_hash) const { … }
SerializedCodeSanityCheckResult SerializedCodeData::SanityCheckJustSource(
uint32_t expected_source_hash) const { … }
SerializedCodeSanityCheckResult SerializedCodeData::SanityCheckWithoutSource(
uint32_t expected_ro_snapshot_checksum) const { … }
uint32_t SerializedCodeData::SourceHash(DirectHandle<String> source,
ScriptOriginOptions origin_options) { … }
AlignedCachedData* SerializedCodeData::GetScriptData() { … }
base::Vector<const uint8_t> SerializedCodeData::Payload() const { … }
SerializedCodeData::SerializedCodeData(AlignedCachedData* data)
: … { … }
SerializedCodeData SerializedCodeData::FromCachedData(
Isolate* isolate, AlignedCachedData* cached_data,
uint32_t expected_source_hash,
SerializedCodeSanityCheckResult* rejection_result) { … }
SerializedCodeData SerializedCodeData::FromCachedDataWithoutSource(
LocalIsolate* local_isolate, AlignedCachedData* cached_data,
SerializedCodeSanityCheckResult* rejection_result) { … }
SerializedCodeData SerializedCodeData::FromPartiallySanityCheckedCachedData(
AlignedCachedData* cached_data, uint32_t expected_source_hash,
SerializedCodeSanityCheckResult* rejection_result) { … }
}
}