src: put (de)serialization code into node_snapshotable.h/cc

So that it's easier to find the corresponding code.

PR-URL: https://github.com/nodejs/node/pull/37114
Refs: https://github.com/nodejs/node/pull/36943
Reviewed-By: Juan José Arboleda <soyjuanarbol@gmail.com>
This commit is contained in:
Joyee Cheung 2021-01-29 00:04:22 +08:00
parent 9aeb836434
commit 2e769a92ff
No known key found for this signature in database
GPG Key ID: 92B78A53C8303B8D
5 changed files with 64 additions and 30 deletions

View File

@ -636,6 +636,7 @@
'src/node_report_module.cc',
'src/node_report_utils.cc',
'src/node_serdes.cc',
'src/node_snapshotable.cc',
'src/node_sockaddr.cc',
'src/node_stat_watcher.cc',
'src/node_symbols.cc',
@ -738,6 +739,7 @@
'src/node_report.h',
'src/node_revert.h',
'src/node_root_certs.h',
'src/node_snapshotable.h',
'src/node_sockaddr.h',
'src/node_sockaddr-inl.h',
'src/node_stat_watcher.h',

View File

@ -5,6 +5,7 @@
#include "node_external_reference.h"
#include "node_internals.h"
#include "node_options-inl.h"
#include "node_snapshotable.h"
#include "node_v8_platform-inl.h"
#include "util-inl.h"
#if defined(LEAK_SANITIZER)
@ -22,7 +23,6 @@ using v8::HandleScope;
using v8::Isolate;
using v8::Local;
using v8::Locker;
using v8::Object;
std::unique_ptr<ExternalReferenceRegistry> NodeMainInstance::registry_ =
nullptr;
@ -167,18 +167,6 @@ int NodeMainInstance::Run(const EnvSerializeInfo* env_info) {
return exit_code;
}
void DeserializeNodeInternalFields(Local<Object> holder,
int index,
v8::StartupData payload,
void* env) {
if (payload.raw_size == 0) {
holder->SetAlignedPointerInInternalField(index, nullptr);
return;
}
// No embedder object in the builtin snapshot yet.
UNREACHABLE();
}
DeleteFnPtr<Environment, FreeEnvironment>
NodeMainInstance::CreateMainEnvironment(int* exit_code,
const EnvSerializeInfo* env_info) {

39
src/node_snapshotable.cc Normal file
View File

@ -0,0 +1,39 @@
#include "node_snapshotable.h"
#include "base_object-inl.h"
namespace node {
using v8::Local;
using v8::Object;
using v8::StartupData;
void DeserializeNodeInternalFields(Local<Object> holder,
int index,
v8::StartupData payload,
void* env) {
if (payload.raw_size == 0) {
holder->SetAlignedPointerInInternalField(index, nullptr);
return;
}
// No embedder object in the builtin snapshot yet.
UNREACHABLE();
}
StartupData SerializeNodeContextInternalFields(Local<Object> holder,
int index,
void* env) {
void* ptr = holder->GetAlignedPointerFromInternalField(index);
if (ptr == nullptr || ptr == env) {
return StartupData{nullptr, 0};
}
if (ptr == env && index == ContextEmbedderIndex::kEnvironment) {
return StartupData{nullptr, 0};
}
// No embedder objects in the builtin snapshot yet.
UNREACHABLE();
return StartupData{nullptr, 0};
}
} // namespace node

21
src/node_snapshotable.h Normal file
View File

@ -0,0 +1,21 @@
#ifndef SRC_NODE_SNAPSHOTABLE_H_
#define SRC_NODE_SNAPSHOTABLE_H_
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
#include "v8.h"
namespace node {
v8::StartupData SerializeNodeContextInternalFields(v8::Local<v8::Object> holder,
int index,
void* env);
void DeserializeNodeInternalFields(v8::Local<v8::Object> holder,
int index,
v8::StartupData payload,
void* env);
} // namespace node
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
#endif // SRC_NODE_SNAPSHOTABLE_H_

View File

@ -6,6 +6,7 @@
#include "node_external_reference.h"
#include "node_internals.h"
#include "node_main_instance.h"
#include "node_snapshotable.h"
#include "node_v8_platform-inl.h"
namespace node {
@ -14,7 +15,6 @@ using v8::Context;
using v8::HandleScope;
using v8::Isolate;
using v8::Local;
using v8::Object;
using v8::SnapshotCreator;
using v8::StartupData;
@ -75,22 +75,6 @@ const EnvSerializeInfo* NodeMainInstance::GetEnvSerializeInfo() {
return ss.str();
}
static StartupData SerializeNodeContextInternalFields(Local<Object> holder,
int index,
void* env) {
void* ptr = holder->GetAlignedPointerFromInternalField(index);
if (ptr == nullptr || ptr == env) {
return StartupData{nullptr, 0};
}
if (ptr == env && index == ContextEmbedderIndex::kEnvironment) {
return StartupData{nullptr, 0};
}
// No embedder objects in the builtin snapshot yet.
UNREACHABLE();
return StartupData{nullptr, 0};
}
std::string SnapshotBuilder::Generate(
const std::vector<std::string> args,
const std::vector<std::string> exec_args) {