mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 22:48:11 +00:00
Revert "LibJS: Remove "uprooting" mechanism from garbage collector"
This reverts commit 6232ad3a0d
.
Unfortunately this introduced some flakiness on CI, so it wasn't
quite this simple.
This commit is contained in:
parent
a2955501d3
commit
1768d70823
6 changed files with 65 additions and 28 deletions
|
@ -3,7 +3,9 @@ test("length is 0", () => {
|
|||
});
|
||||
|
||||
function registerInDifferentScope(registry) {
|
||||
registry.register({}, {});
|
||||
const target = {};
|
||||
registry.register(target, {});
|
||||
return target;
|
||||
}
|
||||
|
||||
test("basic functionality", () => {
|
||||
|
@ -18,7 +20,8 @@ test("basic functionality", () => {
|
|||
|
||||
expect(count).toBe(0);
|
||||
|
||||
registerInDifferentScope(registry);
|
||||
const target = registerInDifferentScope(registry);
|
||||
markAsGarbage("target");
|
||||
gc();
|
||||
|
||||
registry.cleanupSome(increment);
|
||||
|
|
|
@ -1,9 +1,3 @@
|
|||
function registerInDifferentScope(registry) {
|
||||
const target = {};
|
||||
registry.register(target, {});
|
||||
eval("");
|
||||
}
|
||||
|
||||
test("basic functionality", () => {
|
||||
expect(WeakMap.prototype.set).toHaveLength(2);
|
||||
|
||||
|
@ -27,26 +21,25 @@ test("invalid values", () => {
|
|||
});
|
||||
});
|
||||
|
||||
function setObjectKey(weakMap) {
|
||||
expect(weakMap.set({ e: 3 }, 1)).toBe(weakMap);
|
||||
}
|
||||
|
||||
function setSymbolKey(weakMap) {
|
||||
expect(weakMap.set(Symbol("foo"), "bar")).toBe(weakMap);
|
||||
}
|
||||
|
||||
test("automatic removal of garbage-collected values", () => {
|
||||
const weakMap = new WeakMap();
|
||||
const objectKey = { e: 3 };
|
||||
|
||||
setObjectKey(weakMap);
|
||||
expect(weakMap.set(objectKey, 1)).toBe(weakMap);
|
||||
expect(getWeakMapSize(weakMap)).toBe(1);
|
||||
|
||||
markAsGarbage("objectKey");
|
||||
gc();
|
||||
|
||||
expect(getWeakMapSize(weakMap)).toBe(0);
|
||||
|
||||
setSymbolKey(weakMap);
|
||||
const symbolKey = Symbol("foo");
|
||||
|
||||
expect(weakMap.set(symbolKey, "bar")).toBe(weakMap);
|
||||
expect(getWeakMapSize(weakMap)).toBe(1);
|
||||
|
||||
markAsGarbage("symbolKey");
|
||||
gc();
|
||||
|
||||
expect(getWeakMapSize(weakMap)).toBe(0);
|
||||
});
|
||||
|
|
|
@ -16,26 +16,25 @@ test("invalid values", () => {
|
|||
});
|
||||
});
|
||||
|
||||
function addObjectItem(weakSet) {
|
||||
weakSet.add({ a: 1 });
|
||||
}
|
||||
|
||||
function addSymbolItem(weakSet) {
|
||||
weakSet.add(Symbol("foo"));
|
||||
}
|
||||
|
||||
test("automatic removal of garbage-collected values", () => {
|
||||
const weakSet = new WeakSet();
|
||||
const objectItem = { a: 1 };
|
||||
|
||||
addObjectItem(weakSet);
|
||||
expect(weakSet.add(objectItem)).toBe(weakSet);
|
||||
expect(getWeakSetSize(weakSet)).toBe(1);
|
||||
|
||||
markAsGarbage("objectItem");
|
||||
gc();
|
||||
|
||||
expect(getWeakSetSize(weakSet)).toBe(0);
|
||||
|
||||
addSymbolItem(weakSet);
|
||||
const symbolItem = Symbol("foo");
|
||||
|
||||
expect(weakSet.add(symbolItem)).toBe(weakSet);
|
||||
expect(getWeakSetSize(weakSet)).toBe(1);
|
||||
|
||||
markAsGarbage("symbolItem");
|
||||
gc();
|
||||
|
||||
expect(getWeakSetSize(weakSet)).toBe(0);
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue