mirror of
https://github.com/nodejs/node.git
synced 2026-10-14 10:26:26 -04:00
test: give more time to GC in test-shadow-realm-gc-*
When --node-builtin-modules-path is used, we read and create new strings for builtins in each realm which increases the memory usage. As a result GC may not be able to keep up with the allocation done in the loop in the test. As a workaround, give GC a bit more time by waiting for a timer in the loop. PR-URL: https://github.com/nodejs/node/pull/50735 Refs: https://github.com/nodejs/node/issues/50726 Reviewed-By: Chengzhong Wu <legendecas@gmail.com> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
This commit is contained in:
3 files changed
+21
-10
No files matched your search
@@ -1,5 +1,7 @@
|
||||
'use strict';
|
||||
|
||||
const wait = require('timers/promises').setTimeout;
|
||||
|
||||
// TODO(joyeecheung): merge ongc.js and gcUntil from common/index.js
|
||||
// into this.
|
||||
|
||||
@@ -65,6 +67,15 @@ async function checkIfCollectable(
|
||||
createObject();
|
||||
}
|
||||
|
||||
// Repeat an operation and give GC some breathing room at every iteration.
|
||||
async function runAndBreathe(fn, repeat, waitTime = 20) {
|
||||
for (let i = 0; i < repeat; i++) {
|
||||
await fn();
|
||||
await wait(waitTime);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
checkIfCollectable,
|
||||
runAndBreathe,
|
||||
};
|
||||
@@ -8,13 +8,11 @@
|
||||
|
||||
const common = require('../common');
|
||||
const fixtures = require('../common/fixtures');
|
||||
const { runAndBreathe } = require('../common/gc');
|
||||
|
||||
async function main() {
|
||||
const mod = fixtures.fileURL('es-module-shadow-realm', 'state-counter.mjs');
|
||||
for (let i = 0; i < 100; i++) {
|
||||
const realm = new ShadowRealm();
|
||||
await realm.importValue(mod, 'getCounter');
|
||||
}
|
||||
}
|
||||
const mod = fixtures.fileURL('es-module-shadow-realm', 'state-counter.mjs');
|
||||
|
||||
main().then(common.mustCall());
|
||||
runAndBreathe(async () => {
|
||||
const realm = new ShadowRealm();
|
||||
await realm.importValue(mod, 'getCounter');
|
||||
}, 100).then(common.mustCall());
|
||||
@@ -6,14 +6,16 @@
|
||||
*/
|
||||
|
||||
const common = require('../common');
|
||||
const { runAndBreathe } = require('../common/gc');
|
||||
const assert = require('assert');
|
||||
const { isMainThread, Worker } = require('worker_threads');
|
||||
|
||||
for (let i = 0; i < 100; i++) {
|
||||
runAndBreathe(() => {
|
||||
const realm = new ShadowRealm();
|
||||
realm.evaluate('new TextEncoder(); 1;');
|
||||
}
|
||||
}, 100).then(common.mustCall());
|
||||
|
||||
// Test it in worker too.
|
||||
if (isMainThread) {
|
||||
const worker = new Worker(__filename);
|
||||
worker.on('exit', common.mustCall((code) => {
|
||||
|
||||
Reference in new issue
Block a user