Skip to content

Commit 1bbcdf9

Browse files
joyeecheungaduh95
authored andcommitted
benchmark: add vm.SourceTextModule benchmark
PR-URL: #59396 Refs: https://chromium-review.googlesource.com/c/v8/v8/+/6804466 Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
1 parent 21bcd0e commit 1bbcdf9

3 files changed

Lines changed: 153 additions & 0 deletions

File tree

‎benchmark/esm/import-esm-reload.js‎

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
'use strict';
2+
3+
constcommon=require('../common');
4+
constfs=require('fs');
5+
consttmpdir=require('../../test/common/tmpdir');
6+
constassert=require('assert');
7+
const{ pathToFileURL }=require('url');
8+
constbench=common.createBenchmark(main,{
9+
count: [1,100],
10+
n: [1000],
11+
});
12+
13+
functionprepare(count){
14+
tmpdir.refresh();
15+
constdir=tmpdir.resolve('modules');
16+
fs.mkdirSync(dir,{recursive: true});
17+
letmodSource='';
18+
for(leti=0;i<count;++i){
19+
modSource+=`export const value${i} = 1;\n`;
20+
}
21+
constscript=tmpdir.resolve('mod.js');
22+
fs.writeFileSync(script,modSource,'utf8');
23+
returnscript;
24+
}
25+
26+
asyncfunctionmain({ n, count }){
27+
constscript=prepare(count);
28+
consturl=pathToFileURL(script).href;
29+
letresult=0;
30+
bench.start();
31+
for(leti=0;i<n;i++){
32+
constmod=awaitimport(`${url}?t=${i}`);
33+
result+=mod[`value${count-1}`];
34+
}
35+
bench.end(n);
36+
assert.strictEqual(result,n);
37+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
'use strict';
2+
3+
constvm=require('vm');
4+
constcommon=require('../common.js');
5+
constassert=require('assert');
6+
7+
constbench=common.createBenchmark(main,{
8+
stage: ['all','instantiate','evaluate'],
9+
n: [1000],
10+
},{
11+
flags: ['--experimental-vm-modules'],
12+
});
13+
14+
functionmain({ stage, n }){
15+
constarr=[newvm.SourceTextModule(`
16+
export const value = 42;
17+
`)];
18+
19+
if(stage==='all'){
20+
bench.start();
21+
}
22+
23+
for(leti=0;i<n;i++){
24+
constm=newvm.SourceTextModule(`
25+
export { value } from 'mod${i}';
26+
`);
27+
arr.push(m);
28+
m.linkRequests([arr[i]]);
29+
}
30+
31+
if(stage==='instantiate'){
32+
bench.start();
33+
}
34+
arr[n].instantiate();
35+
if(stage==='instantiate'){
36+
bench.end(n);
37+
}
38+
39+
if(stage==='evaluate'){
40+
bench.start();
41+
}
42+
arr[n].evaluate();
43+
if(stage==='evaluate'||stage==='all'){
44+
bench.end(n);
45+
}
46+
47+
assert.strictEqual(arr[n].namespace.value,42);
48+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
'use strict';
2+
3+
constvm=require('vm');
4+
constcommon=require('../common.js');
5+
constassert=require('assert');
6+
7+
constbench=common.createBenchmark(main,{
8+
stage: ['all','link','instantiate','evaluate'],
9+
n: [1000],
10+
},{
11+
flags: ['--experimental-vm-modules'],
12+
});
13+
14+
functionmain({ stage, n }){
15+
constarr=[];
16+
letimportSource='';
17+
letuseSource='export const result = 0 ';
18+
for(leti=0;i<n;i++){
19+
importSource+=`import { value${i} } from 'mod${i}';\n`;
20+
useSource+=` + value${i}\n`;
21+
}
22+
23+
if(stage==='all'){
24+
bench.start();
25+
}
26+
for(leti=0;i<n;i++){
27+
constm=newvm.SourceTextModule(`
28+
export const value${i} = 1;
29+
`);
30+
arr.push(m);
31+
}
32+
33+
constroot=newvm.SourceTextModule(`
34+
${importSource}
35+
${useSource};
36+
`);
37+
38+
if(stage==='link'){
39+
bench.start();
40+
}
41+
42+
root.linkRequests(arr);
43+
for(leti=0;i<n;i++){
44+
arr[i].linkRequests([]);
45+
}
46+
47+
if(stage==='link'){
48+
bench.end(n);
49+
}
50+
51+
if(stage==='instantiate'){
52+
bench.start();
53+
}
54+
root.instantiate();
55+
if(stage==='instantiate'){
56+
bench.end(n);
57+
}
58+
59+
if(stage==='evaluate'){
60+
bench.start();
61+
}
62+
root.evaluate();
63+
if(stage==='evaluate'||stage==='all'){
64+
bench.end(n);
65+
}
66+
67+
assert.strictEqual(root.namespace.result,n);
68+
}

0 commit comments

Comments
 (0)