Skip to content

Commit 1052383

Browse files
committed
v8: refactor struture of v8 module
Use the more efficient module.exports = {} pattern, restructure imports from bindings, requires. PR-URL: #12681 Reviewed-By: Vse Mozhet Byt <[email protected]>
1 parent bed4612 commit 1052383

File tree

2 files changed

+63
-56
lines changed

2 files changed

+63
-56
lines changed

benchmark/v8/get-stats.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ const bench = common.createBenchmark(main, {
88
'getHeapStatistics',
99
'getHeapSpaceStatistics'
1010
],
11-
n: [1e6],
12-
flags: ['--ignition --turbo', '']
11+
n: [1e6]
1312
});
1413

1514
function main(conf) {

lib/v8.js

+62-54
Original file line numberDiff line numberDiff line change
@@ -14,44 +14,50 @@
1414

1515
'use strict';
1616

17-
const Buffer = require('buffer').Buffer;
18-
19-
const v8binding = process.binding('v8');
20-
const serdesBinding = process.binding('serdes');
21-
const bufferBinding = process.binding('buffer');
22-
17+
const { Buffer } = require('buffer');
18+
const { Serializer, Deserializer } = process.binding('serdes');
19+
const { copy } = process.binding('buffer');
2320
const { objectToString } = require('internal/util');
2421
const { FastBuffer } = require('internal/buffer');
2522

26-
// Properties for heap statistics buffer extraction.
23+
const {
24+
cachedDataVersionTag,
25+
setFlagsFromString,
26+
heapStatisticsArrayBuffer,
27+
heapSpaceStatisticsArrayBuffer,
28+
updateHeapStatisticsArrayBuffer,
29+
updateHeapSpaceStatisticsArrayBuffer,
30+
31+
// Properties for heap and heap space statistics buffer extraction.
32+
kTotalHeapSizeIndex,
33+
kTotalHeapSizeExecutableIndex,
34+
kTotalPhysicalSizeIndex,
35+
kTotalAvailableSize,
36+
kUsedHeapSizeIndex,
37+
kHeapSizeLimitIndex,
38+
kDoesZapGarbageIndex,
39+
kMallocedMemoryIndex,
40+
kPeakMallocedMemoryIndex,
41+
kHeapSpaces,
42+
kHeapSpaceStatisticsPropertiesCount,
43+
kSpaceSizeIndex,
44+
kSpaceUsedSizeIndex,
45+
kSpaceAvailableSizeIndex,
46+
kPhysicalSpaceSizeIndex
47+
} = process.binding('v8');
48+
49+
const kNumberOfHeapSpaces = kHeapSpaces.length;
50+
2751
const heapStatisticsBuffer =
28-
new Float64Array(v8binding.heapStatisticsArrayBuffer);
29-
const kTotalHeapSizeIndex = v8binding.kTotalHeapSizeIndex;
30-
const kTotalHeapSizeExecutableIndex = v8binding.kTotalHeapSizeExecutableIndex;
31-
const kTotalPhysicalSizeIndex = v8binding.kTotalPhysicalSizeIndex;
32-
const kTotalAvailableSize = v8binding.kTotalAvailableSize;
33-
const kUsedHeapSizeIndex = v8binding.kUsedHeapSizeIndex;
34-
const kHeapSizeLimitIndex = v8binding.kHeapSizeLimitIndex;
35-
const kDoesZapGarbageIndex = v8binding.kDoesZapGarbageIndex;
36-
const kMallocedMemoryIndex = v8binding.kMallocedMemoryIndex;
37-
const kPeakMallocedMemoryIndex = v8binding.kPeakMallocedMemoryIndex;
38-
39-
// Properties for heap space statistics buffer extraction.
52+
new Float64Array(heapStatisticsArrayBuffer);
53+
4054
const heapSpaceStatisticsBuffer =
41-
new Float64Array(v8binding.heapSpaceStatisticsArrayBuffer);
42-
const kHeapSpaces = v8binding.kHeapSpaces;
43-
const kNumberOfHeapSpaces = kHeapSpaces.length;
44-
const kHeapSpaceStatisticsPropertiesCount =
45-
v8binding.kHeapSpaceStatisticsPropertiesCount;
46-
const kSpaceSizeIndex = v8binding.kSpaceSizeIndex;
47-
const kSpaceUsedSizeIndex = v8binding.kSpaceUsedSizeIndex;
48-
const kSpaceAvailableSizeIndex = v8binding.kSpaceAvailableSizeIndex;
49-
const kPhysicalSpaceSizeIndex = v8binding.kPhysicalSpaceSizeIndex;
50-
51-
exports.getHeapStatistics = function() {
55+
new Float64Array(heapSpaceStatisticsArrayBuffer);
56+
57+
function getHeapStatistics() {
5258
const buffer = heapStatisticsBuffer;
5359

54-
v8binding.updateHeapStatisticsArrayBuffer();
60+
updateHeapStatisticsArrayBuffer();
5561

5662
return {
5763
'total_heap_size': buffer[kTotalHeapSizeIndex],
@@ -64,15 +70,12 @@ exports.getHeapStatistics = function() {
6470
'peak_malloced_memory': buffer[kPeakMallocedMemoryIndex],
6571
'does_zap_garbage': buffer[kDoesZapGarbageIndex]
6672
};
67-
};
68-
69-
exports.cachedDataVersionTag = v8binding.cachedDataVersionTag;
70-
exports.setFlagsFromString = v8binding.setFlagsFromString;
73+
}
7174

72-
exports.getHeapSpaceStatistics = function() {
75+
function getHeapSpaceStatistics() {
7376
const heapSpaceStatistics = new Array(kNumberOfHeapSpaces);
7477
const buffer = heapSpaceStatisticsBuffer;
75-
v8binding.updateHeapSpaceStatisticsArrayBuffer();
78+
updateHeapSpaceStatisticsArrayBuffer();
7679

7780
for (var i = 0; i < kNumberOfHeapSpaces; i++) {
7881
const propertyOffset = i * kHeapSpaceStatisticsPropertiesCount;
@@ -86,17 +89,14 @@ exports.getHeapSpaceStatistics = function() {
8689
}
8790

8891
return heapSpaceStatistics;
89-
};
92+
}
9093

9194
/* V8 serialization API */
9295

93-
const Serializer = exports.Serializer = serdesBinding.Serializer;
94-
const Deserializer = exports.Deserializer = serdesBinding.Deserializer;
95-
9696
/* JS methods for the base objects */
9797
Serializer.prototype._getDataCloneError = Error;
9898

99-
Deserializer.prototype.readRawBytes = function(length) {
99+
Deserializer.prototype.readRawBytes = function readRawBytes(length) {
100100
const offset = this._readRawBytes(length);
101101
// `this.buffer` can be a Buffer or a plain Uint8Array, so just calling
102102
// `.slice()` doesn't work.
@@ -155,8 +155,6 @@ class DefaultSerializer extends Serializer {
155155
}
156156
}
157157

158-
exports.DefaultSerializer = DefaultSerializer;
159-
160158
class DefaultDeserializer extends Deserializer {
161159
constructor(buffer) {
162160
super(buffer);
@@ -176,27 +174,37 @@ class DefaultDeserializer extends Deserializer {
176174
byteLength / BYTES_PER_ELEMENT);
177175
} else {
178176
// Copy to an aligned buffer first.
179-
const copy = Buffer.allocUnsafe(byteLength);
180-
bufferBinding.copy(this.buffer, copy, 0,
181-
byteOffset, byteOffset + byteLength);
182-
return new ctor(copy.buffer,
183-
copy.byteOffset,
177+
const buffer_copy = Buffer.allocUnsafe(byteLength);
178+
copy(this.buffer, buffer_copy, 0, byteOffset, byteOffset + byteLength);
179+
return new ctor(buffer_copy.buffer,
180+
buffer_copy.byteOffset,
184181
byteLength / BYTES_PER_ELEMENT);
185182
}
186183
}
187184
}
188185

189-
exports.DefaultDeserializer = DefaultDeserializer;
190-
191-
exports.serialize = function serialize(value) {
186+
function serialize(value) {
192187
const ser = new DefaultSerializer();
193188
ser.writeHeader();
194189
ser.writeValue(value);
195190
return ser.releaseBuffer();
196-
};
191+
}
197192

198-
exports.deserialize = function deserialize(buffer) {
193+
function deserialize(buffer) {
199194
const der = new DefaultDeserializer(buffer);
200195
der.readHeader();
201196
return der.readValue();
197+
}
198+
199+
module.exports = exports = {
200+
cachedDataVersionTag,
201+
getHeapStatistics,
202+
getHeapSpaceStatistics,
203+
setFlagsFromString,
204+
Serializer,
205+
Deserializer,
206+
DefaultSerializer,
207+
DefaultDeserializer,
208+
deserialize,
209+
serialize
202210
};

0 commit comments

Comments
 (0)