Skip to content

Commit ff64aee

Browse files
committed
[JSC] Introduce StrongBlock
https://bugs.webkit.org/show_bug.cgi?id=320824 rdar://183834334 Reviewed by Keith Miller. This patch replaces existing HandleBlock / HandleSet with new StrongBlock and StrongSet. The mechanism is significantly more efficient in terms of memory and faster performance. The purpose of StrongBlock and StrongSet are offering Strong<> root slots. Unlike MarkedBlock and WeakBlock, StrongBlock's Strong<>'s Slot can be deallocated synchronously at any point, while MarkedBlock and WeakBlock's slots become dead only when GC runs. This means that StrongBlock and StrongSet should follow to the design like high-performance malloc/free. Based on that, our new design is based on segregated page implementation in libpas. Each StrongBlock has control header and slots. Initially it starts with bump allocation mode, so StrongSet maintains bump cursor and allocate slots. It is possible that some slots get deallocated while using this StrongBlock, so deallocated slots are constructing intrusive freelist: each slot is pointing at the previous freelist's head. And StrongSet first allocate a slot from this freelist, and then continue bump allocation. When all slots become deallocated while StrongSet is using this StrongBlock, then we reset the bump cursor to use this block from the beginning. StrongSet retires the currently used block when freelist and bump cursor both exhausted. This means that StrongBlock is full and all slots are active. Then, StrongSet retires this block and use the next block. Once retired block will eventually get deallocated slots. Each deallocation constructs a freelist inside a StrongBlock, and StrongBlock is monitoring the ratio of deallocated / active. And when it crossed the threshold, we move this StrongBlock state "available" for the reuse. StrongSet will eventually look for a new block for allocation and find it from available linked-list. Once StrongBlock becomes available, we reduce the threshold further and still attempt to detect when StrongBlock becomes fully empty. Then we destroy the freelist as now we can use bump allocation for this block. And we remove it from available linked-list and move it to one spare block slot. If we already have a spare block (which guarantees it is empty), then we deallocate the whole StrongBlock to reduce memory footprint. We keep one empty block as a spare block, and StrongSet will reuse it when available (freelist mode) blocks are exhausted. Tests: JSTests/stress/strong-handle-gc.js Tools/TestWebKitAPI/Tests/JavaScriptCore/StrongBlock.cpp * JSTests/stress/strong-handle-gc.js: Added. (shouldBe): (churn): * Source/JavaScriptCore/CMakeLists.txt: * Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj: * Source/JavaScriptCore/Sources.txt: * Source/JavaScriptCore/heap/Handle.h: * Source/JavaScriptCore/heap/HandleBlock.h: Removed. * Source/JavaScriptCore/heap/HandleBlockInlines.h: Removed. * Source/JavaScriptCore/heap/HandleSet.cpp: Removed. * Source/JavaScriptCore/heap/HandleSet.h: Removed. * Source/JavaScriptCore/heap/Heap.cpp: (JSC::Heap::Heap): (JSC::Heap::clearConcurrentRetainedDataIfPossible): * Source/JavaScriptCore/heap/Heap.h: * Source/JavaScriptCore/heap/HeapInlines.h: (JSC::Heap::forEachProtectedCell): * Source/JavaScriptCore/heap/Strong.h: * Source/JavaScriptCore/heap/StrongBlock.h: Added. (JSC::StrongBlock::BlockListNode::block): (JSC::StrongBlock::strongSet const): (JSC::StrongBlock::usedCount const): (JSC::StrongBlock::isEmpty const): (JSC::StrongBlock::isFull const): (JSC::StrongBlock::isAvailable const): (JSC::StrongBlock::isCurrent const): (JSC::StrongBlock::freeListHead const): (JSC::StrongBlock::freeNotifyThreshold const): (JSC::StrongBlock::blocksNode): (JSC::StrongBlock::availableNode): (JSC::StrongBlock::setCurrent): (JSC::StrongBlock::pushFreeSlot): (JSC::StrongBlock::setFreeNotifyThreshold): (JSC::StrongBlock::~StrongBlock): (JSC::StrongBlock::blockContaining): (JSC::StrongBlock::blockFor): (JSC::StrongBlock::payload const): (JSC::StrongBlock::payloadEnd const): (JSC::StrongBlock::indexOf const): (JSC::StrongBlock::slotAtIndex const): (JSC::StrongBlock::encodeFreeListEntry): (JSC::StrongBlock::decodeFreeListEntry): (JSC::StrongBlock::setFreeListHead): (JSC::StrongBlock::incrementUsedCount): (JSC::StrongBlock::decrementUsedCount): (JSC::StrongBlock::resetToBumpMode): * Source/JavaScriptCore/heap/StrongInlines.h: (JSC::shouldStrongDestructorGrabLock>::Strong): (JSC::shouldStrongDestructorGrabLock>::set): (JSC::=): * Source/JavaScriptCore/heap/StrongSet.cpp: Added. (JSC::StrongBlock::StrongBlock): (JSC::StrongBlock::create): (JSC::StrongSet::StrongSet): (JSC::StrongSet::~StrongSet): (JSC::StrongSet::destroyBlock): (JSC::StrongSet::appendAvailable): (JSC::StrongSet::takeAvailable): (JSC::StrongSet::retireCurrentBlock): (JSC::StrongSet::installCurrentBlock): (JSC::StrongSet::allocateSlow): (JSC::StrongSet::didFreeSlot): (JSC::StrongSet::didBecomeEmpty): (JSC::StrongSet::visitAggregateImpl): * Source/JavaScriptCore/heap/StrongSet.h: Added. (JSC::StrongSet::vm): (JSC::StrongSet::blockCount const): (JSC::StrongSet::availabilityCount const): (JSC::StrongSet::availableBlockCount const): (JSC::StrongSet::setFor): (JSC::StrongSet::tryAllocateFromCurrent): (JSC::StrongSet::allocate): (JSC::StrongSet::deallocate): (JSC::StrongSet::deallocateFromCurrentBlock): (JSC::StrongSet::forEachSlot): (JSC::StrongSet::forEachLiveCell): (JSC::StrongSet::forEachStrongHandle): * Source/WebCore/WebCorePrefix.h: * Tools/TestWebKitAPI/CMakeLists.txt: * Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: * Tools/TestWebKitAPI/Tests/JavaScriptCore/StrongBlock.cpp: Added. (TestWebKitAPI::TEST(JavaScriptCore_StrongBlock, Geometry)): (TestWebKitAPI::TEST(JavaScriptCore_StrongBlock, FreeListEntriesAreTaggedNonCells)): (TestWebKitAPI::StrongSetTest::vm): (TestWebKitAPI::StrongSetTest::set): (TestWebKitAPI::StrongSetTest::fill): (TestWebKitAPI::StrongSetTest::drain): (TestWebKitAPI::StrongSetTest::drainScattered): (TestWebKitAPI::TEST_F(StrongSetTest, Addressing)): (TestWebKitAPI::TEST_F(StrongSetTest, FirstBlockIsLazy)): (TestWebKitAPI::TEST_F(StrongSetTest, GrowsAcrossBlocks)): (TestWebKitAPI::TEST_F(StrongSetTest, FreeWhileStillBumpIsReusedImmediately)): (TestWebKitAPI::TEST_F(StrongSetTest, FreeListHandsBackEverySlotExactlyOnce)): (TestWebKitAPI::TEST_F(StrongSetTest, DrainToEmptyRestoresBumpMode)): (TestWebKitAPI::TEST_F(StrongSetTest, ReclamationHysteresis)): (TestWebKitAPI::TEST_F(StrongSetTest, NonCurrentEmptyBlockBecomesSpare)): (TestWebKitAPI::TEST_F(StrongSetTest, CurrentEmptyBeforeSpareLeavesOnlyOneIdleBlock)): (TestWebKitAPI::TEST_F(StrongSetTest, EmptyBlocksBeyondSpareAreFreed)): (TestWebKitAPI::TEST_F(StrongSetTest, FreeIntoNonCurrentBlockLeavesCurrentBlockAlone)): (TestWebKitAPI::TEST_F(StrongSetTest, RetiredFullBlockRejoinsOnlyAtWatermark)): (TestWebKitAPI::TEST_F(StrongSetTest, ReAdmittedBlockAllocatesOnlyFreedSlots)): (TestWebKitAPI::TEST_F(StrongSetTest, ReinstalledSpareBumpsFromTheStart)): (TestWebKitAPI::TEST_F(StrongSetTest, AvailableChainDrainsInAppendOrder)): (TestWebKitAPI::TEST_F(StrongSetTest, AvailableChainUnlinksBlockThatEmptiesWhileAvailable)): (TestWebKitAPI::TEST_F(StrongSetTest, ChainIsEmptyAfterLinkedBlocksAreDestroyed)): (TestWebKitAPI::TEST_F(StrongSetTest, ThrashPatternCausesNoRepeatedEligibilityTransitions)): (TestWebKitAPI::TEST_F(StrongSetTest, CursorHandoffAcrossBlockSwitchLosesNoSlot)): (TestWebKitAPI::TEST_F(StrongSetTest, ForEachStrongHandleAcrossBlocks)): (TestWebKitAPI::TEST_F(StrongSetTest, ForEachStrongHandleSkipsEmptySlots)): (TestWebKitAPI::TEST_F(StrongSetTest, StrongHandlesSurviveGCAcrossBlocks)): (TestWebKitAPI::TEST_F(StrongSetTest, SetTransitionsAreMarkedCorrectly)): (TestWebKitAPI::TEST_F(StrongSetTest, ChurnDoesNotGrowBlockCount)): Canonical link: https://commits.webkit.org/318435@main
1 parent 516a3d0 commit ff64aee

21 files changed

Lines changed: 1640 additions & 476 deletions

File tree

JSTests/stress/strong-handle-gc.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
function shouldBe(actual, expected) {
2+
if (actual !== expected)
3+
throw new Error("bad value: expected " + expected + " but got " + actual);
4+
}
5+
6+
// An unhandled rejected promise is pinned only by a Vector<Strong<JSPromise>> in
7+
// VM (m_aboutToBeNotifiedRejectedPromises) until the rejection tracker fires, so
8+
// with Strong<> marking broken every WeakRef below would go empty. The count spans
9+
// multiple StrongBlocks.
10+
const promiseCount = 2200;
11+
const weakRefs = [];
12+
13+
for (let i = 0; i < promiseCount; ++i)
14+
weakRefs.push(new WeakRef(Promise.reject(new Error("strong-handle-gc " + i))));
15+
16+
// Churn the stack so conservative scanning cannot keep the promises alive via
17+
// stale pointers left in registers or on the native stack.
18+
function churn(depth) {
19+
if (depth <= 0)
20+
return 0;
21+
let sum = 0;
22+
const objects = [];
23+
for (let i = 0; i < 1000; ++i)
24+
objects.push({ a: i, b: i * 2, c: [i, i + 1] });
25+
for (let i = 0; i < objects.length; ++i)
26+
sum += objects[i].a + objects[i].b;
27+
return sum + churn(depth - 1);
28+
}
29+
30+
for (let round = 0; round < 3; ++round) {
31+
churn(4);
32+
// Drop the "kept alive until end of turn" list, so this observes only the
33+
// Strong<> root.
34+
$.clearKeptObjects();
35+
$vm.gc();
36+
}
37+
38+
for (let i = 0; i < promiseCount; ++i)
39+
shouldBe(weakRefs[i].deref() !== undefined, true);

Source/JavaScriptCore/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -830,9 +830,7 @@ set(JavaScriptCore_PRIVATE_FRAMEWORK_HEADERS
830830
heap/GCSegmentedArray.h
831831
heap/GCSegmentedArrayInlines.h
832832
heap/Handle.h
833-
heap/HandleBlock.h
834833
heap/HandleForward.h
835-
heap/HandleSet.h
836834
heap/HandleTypes.h
837835
heap/Heap.h
838836
heap/HeapAnalyzer.h
@@ -871,8 +869,10 @@ set(JavaScriptCore_PRIVATE_FRAMEWORK_HEADERS
871869
heap/SlotVisitorInlines.h
872870
heap/SlotVisitorMacros.h
873871
heap/Strong.h
872+
heap/StrongBlock.h
874873
heap/StrongForward.h
875874
heap/StrongInlines.h
875+
heap/StrongSet.h
876876
heap/Subspace.h
877877
heap/SubspaceInlines.h
878878
heap/Synchronousness.h

Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -715,8 +715,9 @@
715715
142D6F0913539A2800B02E86 /* MarkedBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = 142D6F0713539A2800B02E86 /* MarkedBlock.h */; settings = {ATTRIBUTES = (Private, ); }; };
716716
142D6F1213539A4100B02E86 /* MarkStack.h in Headers */ = {isa = PBXBuildFile; fileRef = 142D6F0F13539A4100B02E86 /* MarkStack.h */; settings = {ATTRIBUTES = (Private, ); }; };
717717
142E3134134FF0A600AFADB5 /* Handle.h in Headers */ = {isa = PBXBuildFile; fileRef = 142E312B134FF0A600AFADB5 /* Handle.h */; settings = {ATTRIBUTES = (Private, ); }; };
718-
142E3136134FF0A600AFADB5 /* HandleSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 142E312D134FF0A600AFADB5 /* HandleSet.h */; settings = {ATTRIBUTES = (Private, ); }; };
719718
142E313B134FF0A600AFADB5 /* Strong.h in Headers */ = {isa = PBXBuildFile; fileRef = 142E3132134FF0A600AFADB5 /* Strong.h */; settings = {ATTRIBUTES = (Private, ); }; };
719+
CD16AD2C6E7B43659889B209 /* StrongBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = EE70FD9E0D7D4754A8CFBB0D /* StrongBlock.h */; settings = {ATTRIBUTES = (Private, ); }; };
720+
C47885A907114CD1B4B772C9 /* StrongSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 66952A5FB039485397A8C92D /* StrongSet.h */; settings = {ATTRIBUTES = (Private, ); }; };
720721
142E313C134FF0A600AFADB5 /* Weak.h in Headers */ = {isa = PBXBuildFile; fileRef = 142E3133134FF0A600AFADB5 /* Weak.h */; settings = {ATTRIBUTES = (Private, ); }; };
721722
142F16E021558802003D49C9 /* MetadataTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 142F16DF215585C8003D49C9 /* MetadataTable.h */; settings = {ATTRIBUTES = (Private, ); }; };
722723
1435952122A521CD00E8086D /* BytecodeCacheError.h in Headers */ = {isa = PBXBuildFile; fileRef = 1435951F22A521CA00E8086D /* BytecodeCacheError.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -1915,8 +1916,6 @@
19151916
C22B31B9140577D700DB475A /* SamplingCounter.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F77008E1402FDD60078EB39 /* SamplingCounter.h */; settings = {ATTRIBUTES = (Private, ); }; };
19161917
C25D709C16DE99F400FCA6BC /* JSManagedValue.h in Headers */ = {isa = PBXBuildFile; fileRef = C25D709A16DE99F400FCA6BC /* JSManagedValue.h */; settings = {ATTRIBUTES = (Public, ); }; };
19171918
C25F8BCE157544A900245B71 /* IncrementalSweeper.h in Headers */ = {isa = PBXBuildFile; fileRef = C25F8BCC157544A900245B71 /* IncrementalSweeper.h */; settings = {ATTRIBUTES = (Private, ); }; };
1918-
C283190016FE4B7D00157BFD /* HandleBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = C28318FF16FE4B7D00157BFD /* HandleBlock.h */; settings = {ATTRIBUTES = (Private, ); }; };
1919-
C283190216FE533E00157BFD /* HandleBlockInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = C283190116FE533E00157BFD /* HandleBlockInlines.h */; };
19201919
C288B2DE18A54D3E007BE40B /* DateTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = C288B2DD18A54D3E007BE40B /* DateTests.mm */; };
19211920
C2981FD917BAEE4B00A3BC98 /* DFGDesiredWeakReferences.h in Headers */ = {isa = PBXBuildFile; fileRef = C2981FD717BAEE4B00A3BC98 /* DFGDesiredWeakReferences.h */; };
19221921
C29ECB031804D0ED00D2CBB4 /* CurrentThisInsideBlockGetterTest.mm in Sources */ = {isa = PBXBuildFile; fileRef = C29ECB011804D0ED00D2CBB4 /* CurrentThisInsideBlockGetterTest.mm */; };
@@ -3883,9 +3882,10 @@
38833882
142D6F0E13539A4100B02E86 /* MarkStack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MarkStack.cpp; sourceTree = "<group>"; };
38843883
142D6F0F13539A4100B02E86 /* MarkStack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MarkStack.h; sourceTree = "<group>"; };
38853884
142E312B134FF0A600AFADB5 /* Handle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Handle.h; sourceTree = "<group>"; };
3886-
142E312C134FF0A600AFADB5 /* HandleSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HandleSet.cpp; sourceTree = "<group>"; };
3887-
142E312D134FF0A600AFADB5 /* HandleSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HandleSet.h; sourceTree = "<group>"; };
38883885
142E3132134FF0A600AFADB5 /* Strong.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Strong.h; sourceTree = "<group>"; };
3886+
EE70FD9E0D7D4754A8CFBB0D /* StrongBlock.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StrongBlock.h; sourceTree = "<group>"; };
3887+
66952A5FB039485397A8C92D /* StrongSet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StrongSet.h; sourceTree = "<group>"; };
3888+
401DFDD7C039414AB8125A26 /* StrongSet.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = StrongSet.cpp; sourceTree = "<group>"; };
38893889
142E3133134FF0A600AFADB5 /* Weak.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Weak.h; sourceTree = "<group>"; };
38903890
142F16DF215585C8003D49C9 /* MetadataTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MetadataTable.h; sourceTree = "<group>"; };
38913891
142F16E921583B5E003D49C9 /* CodeBlockInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CodeBlockInlines.h; sourceTree = "<group>"; };
@@ -5795,8 +5795,6 @@
57955795
C25D709A16DE99F400FCA6BC /* JSManagedValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSManagedValue.h; sourceTree = "<group>"; };
57965796
C25F8BCB157544A900245B71 /* IncrementalSweeper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IncrementalSweeper.cpp; sourceTree = "<group>"; };
57975797
C25F8BCC157544A900245B71 /* IncrementalSweeper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IncrementalSweeper.h; sourceTree = "<group>"; };
5798-
C28318FF16FE4B7D00157BFD /* HandleBlock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HandleBlock.h; sourceTree = "<group>"; };
5799-
C283190116FE533E00157BFD /* HandleBlockInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HandleBlockInlines.h; sourceTree = "<group>"; };
58005798
C288B2DC18A54D3E007BE40B /* DateTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DateTests.h; path = API/tests/DateTests.h; sourceTree = "<group>"; };
58015799
C288B2DD18A54D3E007BE40B /* DateTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = DateTests.mm; path = API/tests/DateTests.mm; sourceTree = "<group>"; };
58025800
C2981FD617BAEE4B00A3BC98 /* DFGDesiredWeakReferences.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGDesiredWeakReferences.cpp; path = dfg/DFGDesiredWeakReferences.cpp; sourceTree = "<group>"; };
@@ -7660,11 +7658,7 @@
76607658
0FEC3C581F33A48900F59B6C /* GigacageAlignedMemoryAllocator.cpp */,
76617659
0FEC3C591F33A48900F59B6C /* GigacageAlignedMemoryAllocator.h */,
76627660
142E312B134FF0A600AFADB5 /* Handle.h */,
7663-
C28318FF16FE4B7D00157BFD /* HandleBlock.h */,
7664-
C283190116FE533E00157BFD /* HandleBlockInlines.h */,
76657661
CD1F9B48270CFDCC00617EB6 /* HandleForward.h */,
7666-
142E312C134FF0A600AFADB5 /* HandleSet.cpp */,
7667-
142E312D134FF0A600AFADB5 /* HandleSet.h */,
76687662
146FA5A81378F6B0003627A3 /* HandleTypes.h */,
76697663
14BA7A9513AADFF8005B7C2C /* Heap.cpp */,
76707664
14BA7A9613AADFF8005B7C2C /* Heap.h */,
@@ -7755,8 +7749,11 @@
77557749
0F7CF9501DC027D70098CC12 /* StopIfNecessaryTimer.cpp */,
77567750
0F7CF9511DC027D70098CC12 /* StopIfNecessaryTimer.h */,
77577751
142E3132134FF0A600AFADB5 /* Strong.h */,
7752+
EE70FD9E0D7D4754A8CFBB0D /* StrongBlock.h */,
77587753
CD1F9B4A270CFE0F00617EB6 /* StrongForward.h */,
77597754
145722851437E140005FDE26 /* StrongInlines.h */,
7755+
401DFDD7C039414AB8125A26 /* StrongSet.cpp */,
7756+
66952A5FB039485397A8C92D /* StrongSet.h */,
77607757
537FEECB2742BDE000C9EFEE /* StructureAlignedMemoryAllocator.cpp */,
77617758
537FEECC2742BDE000C9EFEE /* StructureAlignedMemoryAllocator.h */,
77627759
0F7DF1311E2970D50095951B /* Subspace.cpp */,
@@ -11858,11 +11855,8 @@
1185811855
93BFC6D929B344C90030D7BE /* GlobalObjectMethodTable.h in Headers */,
1185911856
0F24E54417EA9F5900ABB217 /* GPRInfo.h in Headers */,
1186011857
142E3134134FF0A600AFADB5 /* Handle.h in Headers */,
11861-
C283190016FE4B7D00157BFD /* HandleBlock.h in Headers */,
11862-
C283190216FE533E00157BFD /* HandleBlockInlines.h in Headers */,
1186311858
CD1F9B49270CFDCC00617EB6 /* HandleForward.h in Headers */,
1186411859
0F0B83A914BCF56200885B4F /* HandlerInfo.h in Headers */,
11865-
142E3136134FF0A600AFADB5 /* HandleSet.h in Headers */,
1186611860
1478297B1379E8A800A7C2A3 /* HandleTypes.h in Headers */,
1186711861
FEF5B4232628A0EE0016E776 /* HashMapHelper.h in Headers */,
1186811862
79DFCBDB1D88C59600527D03 /* HasOwnPropertyCache.h in Headers */,
@@ -12680,8 +12674,10 @@
1268012674
E367062B2A2705DB00CF892F /* StringSplitCache.h in Headers */,
1268112675
E367062A2A2705DB00CF892F /* StringSplitCacheInlines.h in Headers */,
1268212676
142E313B134FF0A600AFADB5 /* Strong.h in Headers */,
12677+
CD16AD2C6E7B43659889B209 /* StrongBlock.h in Headers */,
1268312678
CD1F9B4B270CFE0F00617EB6 /* StrongForward.h in Headers */,
1268412679
145722861437E140005FDE26 /* StrongInlines.h in Headers */,
12680+
C47885A907114CD1B4B772C9 /* StrongSet.h in Headers */,
1268512681
BCDE3AB80E6C82F5001453A7 /* Structure.h in Headers */,
1268612682
537FEED02742BDE100C9EFEE /* StructureAlignedMemoryAllocator.h in Headers */,
1268712683
0FD2C92816D01EE900C7803F /* StructureArrayStorageInlines.h in Headers */,

Source/JavaScriptCore/Sources.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -534,7 +534,6 @@ heap/GCOwnedDataScope.cpp
534534
heap/GCRequest.cpp
535535
heap/GCSegmentedArray.cpp
536536
heap/GigacageAlignedMemoryAllocator.cpp
537-
heap/HandleSet.cpp
538537
heap/Heap.cpp
539538
heap/HeapCell.cpp
540539
heap/HeapCellType.cpp
@@ -567,6 +566,7 @@ heap/SlotVisitor.cpp
567566
heap/SpaceTimeMutatorScheduler.cpp
568567
heap/StochasticSpaceTimeMutatorScheduler.cpp
569568
heap/StopIfNecessaryTimer.cpp
569+
heap/StrongSet.cpp
570570
heap/StructureAlignedMemoryAllocator.cpp
571571
heap/Subspace.cpp
572572
heap/SynchronousStopTheWorldMutatorScheduler.cpp

Source/JavaScriptCore/heap/Handle.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ template <> class Handle<JSValue>;
4444
class HandleBase {
4545
template <typename T> friend class Weak;
4646
template <typename T, ShouldStrongDestructorGrabLock shouldStrongDestructorGrabLock> friend class Strong;
47-
friend class HandleSet;
4847
friend struct JSCallbackObjectData;
4948

5049
public:
@@ -126,7 +125,6 @@ template <typename T> class Handle : public HandleBase, public HandleConverter<H
126125
}
127126

128127
private:
129-
friend class HandleSet;
130128
friend class WeakBlock;
131129

132130
static Handle<T> wrapSlot(HandleSlot slot)

Source/JavaScriptCore/heap/HandleBlock.h

Lines changed: 0 additions & 74 deletions
This file was deleted.

Source/JavaScriptCore/heap/HandleBlockInlines.h

Lines changed: 0 additions & 82 deletions
This file was deleted.

0 commit comments

Comments
 (0)