Skip to content

Commit ad42cd6

Browse files
joyeecheungtargos
authored andcommitted
src: use std::vector<size_t> instead of IndexArray
PR-URL: #27321 Refs: #17058 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Refael Ackermann <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Ben Noordhuis <[email protected]>
1 parent 228127f commit ad42cd6

7 files changed

+37
-63
lines changed

src/env.cc

+3-4
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,7 @@ std::vector<size_t> IsolateData::Serialize(SnapshotCreator* creator) {
7575
return indexes;
7676
}
7777

78-
void IsolateData::DeserializeProperties(
79-
const NodeMainInstance::IndexArray* indexes) {
78+
void IsolateData::DeserializeProperties(const std::vector<size_t>* indexes) {
8079
size_t i = 0;
8180
HandleScope handle_scope(isolate_);
8281

@@ -86,7 +85,7 @@ void IsolateData::DeserializeProperties(
8685
#define V(TypeName, PropertyName) \
8786
do { \
8887
MaybeLocal<TypeName> field = \
89-
isolate_->GetDataFromSnapshotOnce<TypeName>(indexes->Get(i++)); \
88+
isolate_->GetDataFromSnapshotOnce<TypeName>((*indexes)[i++]); \
9089
if (field.IsEmpty()) { \
9190
fprintf(stderr, "Failed to deserialize " #PropertyName "\n"); \
9291
} \
@@ -155,7 +154,7 @@ IsolateData::IsolateData(Isolate* isolate,
155154
uv_loop_t* event_loop,
156155
MultiIsolatePlatform* platform,
157156
ArrayBufferAllocator* node_allocator,
158-
const NodeMainInstance::IndexArray* indexes)
157+
const std::vector<size_t>* indexes)
159158
: isolate_(isolate),
160159
event_loop_(event_loop),
161160
allocator_(isolate->GetArrayBufferAllocator()),

src/env.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ class IsolateData : public MemoryRetainer {
420420
uv_loop_t* event_loop,
421421
MultiIsolatePlatform* platform = nullptr,
422422
ArrayBufferAllocator* node_allocator = nullptr,
423-
const NodeMainInstance::IndexArray* indexes = nullptr);
423+
const std::vector<size_t>* indexes = nullptr);
424424
SET_MEMORY_INFO_NAME(IsolateData);
425425
SET_SELF_SIZE(IsolateData);
426426
void MemoryInfo(MemoryTracker* tracker) const override;
@@ -454,7 +454,7 @@ class IsolateData : public MemoryRetainer {
454454
IsolateData& operator=(const IsolateData&) = delete;
455455

456456
private:
457-
void DeserializeProperties(const NodeMainInstance::IndexArray* indexes);
457+
void DeserializeProperties(const std::vector<size_t>* indexes);
458458
void CreateProperties();
459459

460460
#define VP(PropertyName, StringValue) V(v8::Private, PropertyName)

src/node.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -892,7 +892,7 @@ int Start(int argc, char** argv) {
892892
std::vector<intptr_t> external_references = {
893893
reinterpret_cast<intptr_t>(nullptr)};
894894
v8::StartupData* blob = NodeMainInstance::GetEmbeddedSnapshotBlob();
895-
const NodeMainInstance::IndexArray* indexes =
895+
const std::vector<size_t>* indexes =
896896
NodeMainInstance::GetIsolateDataIndexes();
897897
if (blob != nullptr) {
898898
params.external_references = external_references.data();

src/node_main_instance.cc

+7-6
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,13 @@ NodeMainInstance* NodeMainInstance::Create(
3838
return new NodeMainInstance(isolate, event_loop, platform, args, exec_args);
3939
}
4040

41-
NodeMainInstance::NodeMainInstance(Isolate::CreateParams* params,
42-
uv_loop_t* event_loop,
43-
MultiIsolatePlatform* platform,
44-
const std::vector<std::string>& args,
45-
const std::vector<std::string>& exec_args,
46-
const IndexArray* per_isolate_data_indexes)
41+
NodeMainInstance::NodeMainInstance(
42+
Isolate::CreateParams* params,
43+
uv_loop_t* event_loop,
44+
MultiIsolatePlatform* platform,
45+
const std::vector<std::string>& args,
46+
const std::vector<std::string>& exec_args,
47+
const std::vector<size_t>* per_isolate_data_indexes)
4748
: args_(args),
4849
exec_args_(exec_args),
4950
array_buffer_allocator_(ArrayBufferAllocator::Create()),

src/node_main_instance.h

+8-19
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,6 @@ namespace node {
1515
// We may be able to create an abstract class to reuse some of the routines.
1616
class NodeMainInstance {
1717
public:
18-
// An array of indexes that can be used to deserialize data from a V8
19-
// snapshot.
20-
struct IndexArray {
21-
const size_t* data;
22-
size_t length;
23-
24-
size_t Get(size_t index) const {
25-
DCHECK_LT(index, length);
26-
return data[index];
27-
}
28-
};
29-
3018
// To create a main instance that does not own the isoalte,
3119
// The caller needs to do:
3220
//
@@ -53,12 +41,13 @@ class NodeMainInstance {
5341
void Dispose();
5442

5543
// Create a main instance that owns the isolate
56-
NodeMainInstance(v8::Isolate::CreateParams* params,
57-
uv_loop_t* event_loop,
58-
MultiIsolatePlatform* platform,
59-
const std::vector<std::string>& args,
60-
const std::vector<std::string>& exec_args,
61-
const IndexArray* per_isolate_data_indexes = nullptr);
44+
NodeMainInstance(
45+
v8::Isolate::CreateParams* params,
46+
uv_loop_t* event_loop,
47+
MultiIsolatePlatform* platform,
48+
const std::vector<std::string>& args,
49+
const std::vector<std::string>& exec_args,
50+
const std::vector<size_t>* per_isolate_data_indexes = nullptr);
6251
~NodeMainInstance();
6352

6453
// Start running the Node.js instances, return the exit code when finished.
@@ -72,7 +61,7 @@ class NodeMainInstance {
7261

7362
// If nullptr is returned, the binary is not built with embedded
7463
// snapshot.
75-
static const IndexArray* GetIsolateDataIndexes();
64+
static const std::vector<size_t>* GetIsolateDataIndexes();
7665
static v8::StartupData* GetEmbeddedSnapshotBlob();
7766

7867
static const size_t kNodeContextIndex = 0;

src/node_snapshot_stub.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ v8::StartupData* NodeMainInstance::GetEmbeddedSnapshotBlob() {
66
return nullptr;
77
}
88

9-
const NodeMainInstance::IndexArray* NodeMainInstance::GetIsolateDataIndexes() {
9+
const std::vector<size_t>* NodeMainInstance::GetIsolateDataIndexes() {
1010
return nullptr;
1111
}
1212

tools/snapshot/snapshot_builder.cc

+15-30
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,16 @@ using v8::Locker;
1616
using v8::SnapshotCreator;
1717
using v8::StartupData;
1818

19+
template <typename T>
20+
void WriteVector(std::stringstream* ss, const T* vec, size_t size) {
21+
for (size_t i = 0; i < size; i++) {
22+
*ss << std::to_string(vec[i]) << (i == size - 1 ? '\n' : ',');
23+
}
24+
}
25+
1926
std::string FormatBlob(v8::StartupData* blob,
2027
const std::vector<size_t>& isolate_data_indexes) {
2128
std::stringstream ss;
22-
size_t isolate_data_indexes_size = isolate_data_indexes.size();
2329

2430
ss << R"(#include <cstddef>
2531
#include "node_main_instance.h"
@@ -29,47 +35,26 @@ std::string FormatBlob(v8::StartupData* blob,
2935
3036
namespace node {
3137
32-
static const uint8_t blob_data[] = {
38+
static const char blob_data[] = {
3339
)";
34-
35-
for (int i = 0; i < blob->raw_size; i++) {
36-
uint8_t ch = blob->data[i];
37-
ss << std::to_string(ch) << ((i == blob->raw_size - 1) ? '\n' : ',');
38-
}
39-
40+
WriteVector(&ss, blob->data, blob->raw_size);
4041
ss << R"(};
4142
4243
static const int blob_size = )"
4344
<< blob->raw_size << R"(;
44-
static v8::StartupData blob = {
45-
reinterpret_cast<const char*>(blob_data),
46-
blob_size
47-
};
45+
static v8::StartupData blob = { blob_data, blob_size };
4846
)";
4947

50-
ss << R"(v8::StartupData*
51-
NodeMainInstance::GetEmbeddedSnapshotBlob() {
48+
ss << R"(v8::StartupData* NodeMainInstance::GetEmbeddedSnapshotBlob() {
5249
return &blob;
5350
}
5451
55-
static const size_t isolate_data_indexes_raw[] = {
52+
static const std::vector<size_t> isolate_data_indexes {
5653
)";
57-
for (size_t i = 0; i < isolate_data_indexes_size; i++) {
58-
ss << std::to_string(isolate_data_indexes[i])
59-
<< ((i == isolate_data_indexes_size - 1) ? '\n' : ',');
60-
}
61-
ss << "};\n\n";
62-
63-
ss << "static const size_t isolate_data_indexes_size = "
64-
<< isolate_data_indexes_size << R"(;
65-
66-
NodeMainInstance::IndexArray isolate_data_indexes {
67-
isolate_data_indexes_raw,
68-
isolate_data_indexes_size
69-
};
54+
WriteVector(&ss, isolate_data_indexes.data(), isolate_data_indexes.size());
55+
ss << R"(};
7056
71-
const NodeMainInstance::IndexArray*
72-
NodeMainInstance::GetIsolateDataIndexes() {
57+
const std::vector<size_t>* NodeMainInstance::GetIsolateDataIndexes() {
7358
return &isolate_data_indexes;
7459
}
7560
} // namespace node

0 commit comments

Comments
 (0)