aboutsummaryrefslogtreecommitdiff
path: root/benchmark
diff options
context:
space:
mode:
authorBradley Farias <bfarias@godaddy.com>2019-09-11 10:03:11 -0500
committerBradley Farias <bradley.meck@gmail.com>2020-07-14 13:03:04 -0500
commit66810a0d4789fbc037e8bb37e2d54e4e3bfa54af (patch)
treea3ad2739934352212868b2497852f49bbdbadf5c /benchmark
parente212955e8ac3c2fbab94bb65243eb877b4de3099 (diff)
downloadios-node-v8-66810a0d4789fbc037e8bb37e2d54e4e3bfa54af.tar.gz
ios-node-v8-66810a0d4789fbc037e8bb37e2d54e4e3bfa54af.tar.bz2
ios-node-v8-66810a0d4789fbc037e8bb37e2d54e4e3bfa54af.zip
policy: add startup benchmark and make SRI lazier
PR-URL: https://github.com/nodejs/node/pull/29527 Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'benchmark')
-rw-r--r--benchmark/policy/policy-startup.js51
1 files changed, 51 insertions, 0 deletions
diff --git a/benchmark/policy/policy-startup.js b/benchmark/policy/policy-startup.js
new file mode 100644
index 0000000000..1588123d80
--- /dev/null
+++ b/benchmark/policy/policy-startup.js
@@ -0,0 +1,51 @@
+// Tests the impact on eager operations required for policies affecting
+// general startup, does not test lazy operations
+'use strict';
+const common = require('../common.js');
+
+const configs = {
+ n: [1024]
+};
+
+const options = {
+ flags: ['--expose-internals']
+};
+
+const bench = common.createBenchmark(main, configs, options);
+
+function main(conf) {
+ const hash = (str, algo) => {
+ const hash = require('crypto').createHash(algo);
+ return hash.update(str).digest('base64');
+ };
+ const resources = Object.fromEntries(
+ // Simulate graph of 1k modules
+ Array.from({ length: 1024 }, (_, i) => {
+ return [`./_${i}`, {
+ integrity: `sha256-${hash(`// ./_${i}`, 'sha256')}`,
+ dependencies: Object.fromEntries(Array.from({
+ // Average 3 deps per 4 modules
+ length: Math.floor((i % 4) / 2)
+ }, (_, ii) => {
+ return [`_${ii}`, `./_${i - ii}`];
+ })),
+ }];
+ })
+ );
+ const json = JSON.parse(JSON.stringify({ resources }), (_, o) => {
+ if (o && typeof o === 'object') {
+ Reflect.setPrototypeOf(o, null);
+ Object.freeze(o);
+ }
+ return o;
+ });
+ const { Manifest } = require('internal/policy/manifest');
+
+ bench.start();
+
+ for (let i = 0; i < conf.n; i++) {
+ new Manifest(json, 'file://benchmark/policy-relative');
+ }
+
+ bench.end(conf.n);
+}