Changeset 226667 in webkit for trunk/Source/JavaScriptCore/ChangeLog
- Timestamp:
- Jan 9, 2018, 4:30:38 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r226658 r226667 1 2018-01-04 Filip Pizlo <[email protected]> 2 3 CodeBlocks should be in IsoSubspaces 4 https://bugs.webkit.org/show_bug.cgi?id=180884 5 6 Reviewed by Saam Barati. 7 8 This moves CodeBlocks into IsoSubspaces. Doing so means that we no longer need to have the 9 special CodeBlockSet HashSets of new and old CodeBlocks. We also no longer use 10 WeakReferenceHarvester or UnconditionalFinalizer. Instead: 11 12 - Code block sweeping is now just eager sweeping. This means that it automatically takes 13 advantage of our unswept set, which roughly corresponds to what CodeBlockSet used to use 14 its eden set for. 15 16 - Those idea of Executable "weakly visiting" the CodeBlock is replaced by Executable 17 marking a ExecutableToCodeBlockEdge object. That object being marked corresponds to what 18 we used to call CodeBlock "having been weakly visited". This means that CodeBlockSet no 19 longer has to clear the set of weakly visited code blocks. This also means that 20 determining CodeBlock liveness, propagating CodeBlock transitions, and jettisoning 21 CodeBlocks during GC are now the edge's job. The edge is also in an IsoSubspace and it 22 has IsoCellSets to tell us which edges have output constraints (what we used to call 23 CodeBlock's weak reference harvester) and which have unconditional finalizers. 24 25 - CodeBlock now uses an IsoCellSet to tell if it has an unconditional finalizer. 26 27 - CodeBlockSet still exists! It has one unified HashSet of CodeBlocks that we use to 28 handle requests from the sampler, debugger, and other facilities. They may want to ask 29 if some pointer corresponds to a CodeBlock during stages of execution during which the 30 GC is unable to answer isLive() queries. The trickiest is the sampling profiler thread. 31 There is no way that the GC's isLive could tell us of a CodeBlock that had already been 32 allocated has now been full constructed. 33 34 * JavaScriptCore.xcodeproj/project.pbxproj: 35 * Sources.txt: 36 * bytecode/CodeBlock.cpp: 37 (JSC::CodeBlock::CodeBlock): 38 (JSC::CodeBlock::finishCreation): 39 (JSC::CodeBlock::finishCreationCommon): 40 (JSC::CodeBlock::~CodeBlock): 41 (JSC::CodeBlock::visitChildren): 42 (JSC::CodeBlock::propagateTransitions): 43 (JSC::CodeBlock::determineLiveness): 44 (JSC::CodeBlock::finalizeUnconditionally): 45 (JSC::CodeBlock::stronglyVisitStrongReferences): 46 (JSC::CodeBlock::hasInstalledVMTrapBreakpoints const): 47 (JSC::CodeBlock::installVMTrapBreakpoints): 48 (JSC::CodeBlock::dumpMathICStats): 49 (JSC::CodeBlock::visitWeakly): Deleted. 50 (JSC::CodeBlock::WeakReferenceHarvester::visitWeakReferences): Deleted. 51 (JSC::CodeBlock::UnconditionalFinalizer::finalizeUnconditionally): Deleted. 52 * bytecode/CodeBlock.h: 53 (JSC::CodeBlock::subspaceFor): 54 (JSC::CodeBlock::ownerEdge const): 55 (JSC::CodeBlock::clearVisitWeaklyHasBeenCalled): Deleted. 56 * bytecode/EvalCodeBlock.h: 57 (JSC::EvalCodeBlock::create): Deleted. 58 (JSC::EvalCodeBlock::createStructure): Deleted. 59 (JSC::EvalCodeBlock::variable): Deleted. 60 (JSC::EvalCodeBlock::numVariables): Deleted. 61 (JSC::EvalCodeBlock::functionHoistingCandidate): Deleted. 62 (JSC::EvalCodeBlock::numFunctionHoistingCandidates): Deleted. 63 (JSC::EvalCodeBlock::EvalCodeBlock): Deleted. 64 (JSC::EvalCodeBlock::unlinkedEvalCodeBlock const): Deleted. 65 * bytecode/ExecutableToCodeBlockEdge.cpp: Added. 66 (JSC::ExecutableToCodeBlockEdge::createStructure): 67 (JSC::ExecutableToCodeBlockEdge::create): 68 (JSC::ExecutableToCodeBlockEdge::visitChildren): 69 (JSC::ExecutableToCodeBlockEdge::visitOutputConstraints): 70 (JSC::ExecutableToCodeBlockEdge::finalizeUnconditionally): 71 (JSC::ExecutableToCodeBlockEdge::activate): 72 (JSC::ExecutableToCodeBlockEdge::deactivate): 73 (JSC::ExecutableToCodeBlockEdge::deactivateAndUnwrap): 74 (JSC::ExecutableToCodeBlockEdge::wrap): 75 (JSC::ExecutableToCodeBlockEdge::wrapAndActivate): 76 (JSC::ExecutableToCodeBlockEdge::ExecutableToCodeBlockEdge): 77 (JSC::ExecutableToCodeBlockEdge::runConstraint): 78 * bytecode/ExecutableToCodeBlockEdge.h: Added. 79 (JSC::ExecutableToCodeBlockEdge::subspaceFor): 80 (JSC::ExecutableToCodeBlockEdge::codeBlock const): 81 (JSC::ExecutableToCodeBlockEdge::unwrap): 82 * bytecode/FunctionCodeBlock.h: 83 (JSC::FunctionCodeBlock::subspaceFor): 84 (JSC::FunctionCodeBlock::createStructure): 85 * bytecode/ModuleProgramCodeBlock.h: 86 (JSC::ModuleProgramCodeBlock::create): Deleted. 87 (JSC::ModuleProgramCodeBlock::createStructure): Deleted. 88 (JSC::ModuleProgramCodeBlock::ModuleProgramCodeBlock): Deleted. 89 * bytecode/ProgramCodeBlock.h: 90 (JSC::ProgramCodeBlock::create): Deleted. 91 (JSC::ProgramCodeBlock::createStructure): Deleted. 92 (JSC::ProgramCodeBlock::ProgramCodeBlock): Deleted. 93 * debugger/Debugger.cpp: 94 (JSC::Debugger::SetSteppingModeFunctor::operator() const): 95 (JSC::Debugger::ToggleBreakpointFunctor::operator() const): 96 (JSC::Debugger::ClearCodeBlockDebuggerRequestsFunctor::operator() const): 97 (JSC::Debugger::ClearDebuggerRequestsFunctor::operator() const): 98 * heap/CodeBlockSet.cpp: 99 (JSC::CodeBlockSet::contains): 100 (JSC::CodeBlockSet::dump const): 101 (JSC::CodeBlockSet::add): 102 (JSC::CodeBlockSet::remove): 103 (JSC::CodeBlockSet::promoteYoungCodeBlocks): Deleted. 104 (JSC::CodeBlockSet::clearMarksForFullCollection): Deleted. 105 (JSC::CodeBlockSet::lastChanceToFinalize): Deleted. 106 (JSC::CodeBlockSet::deleteUnmarkedAndUnreferenced): Deleted. 107 * heap/CodeBlockSet.h: 108 * heap/CodeBlockSetInlines.h: 109 (JSC::CodeBlockSet::iterate): 110 (JSC::CodeBlockSet::iterateViaSubspaces): 111 * heap/ConservativeRoots.cpp: 112 (JSC::ConservativeRoots::genericAddPointer): 113 (JSC::DummyMarkHook::markKnownJSCell): 114 (JSC::CompositeMarkHook::mark): 115 (JSC::CompositeMarkHook::markKnownJSCell): 116 * heap/ConservativeRoots.h: 117 * heap/Heap.cpp: 118 (JSC::Heap::lastChanceToFinalize): 119 (JSC::Heap::finalizeMarkedUnconditionalFinalizers): 120 (JSC::Heap::finalizeUnconditionalFinalizers): 121 (JSC::Heap::beginMarking): 122 (JSC::Heap::deleteUnmarkedCompiledCode): 123 (JSC::Heap::sweepInFinalize): 124 (JSC::Heap::forEachCodeBlockImpl): 125 (JSC::Heap::forEachCodeBlockIgnoringJITPlansImpl): 126 (JSC::Heap::addCoreConstraints): 127 (JSC::Heap::finalizeUnconditionalFinalizersInIsoSubspace): Deleted. 128 * heap/Heap.h: 129 * heap/HeapCell.h: 130 * heap/HeapCellInlines.h: 131 (JSC::HeapCell::subspace const): 132 * heap/HeapInlines.h: 133 (JSC::Heap::forEachCodeBlock): 134 (JSC::Heap::forEachCodeBlockIgnoringJITPlans): 135 * heap/HeapUtil.h: 136 (JSC::HeapUtil::findGCObjectPointersForMarking): 137 * heap/IsoCellSet.cpp: 138 (JSC::IsoCellSet::parallelNotEmptyMarkedBlockSource): 139 * heap/IsoCellSet.h: 140 * heap/IsoCellSetInlines.h: 141 (JSC::IsoCellSet::forEachMarkedCellInParallel): 142 (JSC::IsoCellSet::forEachLiveCell): 143 * heap/LargeAllocation.h: 144 (JSC::LargeAllocation::subspace const): 145 * heap/MarkStackMergingConstraint.cpp: 146 (JSC::MarkStackMergingConstraint::executeImpl): 147 * heap/MarkStackMergingConstraint.h: 148 * heap/MarkedAllocator.cpp: 149 (JSC::MarkedAllocator::parallelNotEmptyBlockSource): 150 * heap/MarkedBlock.cpp: 151 (JSC::MarkedBlock::Handle::didAddToAllocator): 152 (JSC::MarkedBlock::Handle::didRemoveFromAllocator): 153 * heap/MarkedBlock.h: 154 (JSC::MarkedBlock::subspace const): 155 * heap/MarkedBlockInlines.h: 156 (JSC::MarkedBlock::Handle::forEachLiveCell): 157 * heap/MarkedSpaceInlines.h: 158 (JSC::MarkedSpace::forEachLiveCell): 159 * heap/MarkingConstraint.cpp: 160 (JSC::MarkingConstraint::execute): 161 (JSC::MarkingConstraint::doParallelWork): 162 (JSC::MarkingConstraint::finishParallelWork): Deleted. 163 (JSC::MarkingConstraint::doParallelWorkImpl): Deleted. 164 (JSC::MarkingConstraint::finishParallelWorkImpl): Deleted. 165 * heap/MarkingConstraint.h: 166 * heap/MarkingConstraintSet.cpp: 167 (JSC::MarkingConstraintSet::add): 168 * heap/MarkingConstraintSet.h: 169 (JSC::MarkingConstraintSet::add): 170 * heap/MarkingConstraintSolver.cpp: 171 (JSC::MarkingConstraintSolver::execute): 172 (JSC::MarkingConstraintSolver::addParallelTask): 173 (JSC::MarkingConstraintSolver::runExecutionThread): 174 (JSC::MarkingConstraintSolver::didExecute): Deleted. 175 * heap/MarkingConstraintSolver.h: 176 (JSC::MarkingConstraintSolver::TaskWithConstraint::TaskWithConstraint): 177 (JSC::MarkingConstraintSolver::TaskWithConstraint::operator== const): 178 * heap/SimpleMarkingConstraint.cpp: 179 (JSC::SimpleMarkingConstraint::SimpleMarkingConstraint): 180 (JSC::SimpleMarkingConstraint::executeImpl): 181 * heap/SimpleMarkingConstraint.h: 182 (JSC::SimpleMarkingConstraint::SimpleMarkingConstraint): 183 * heap/SlotVisitor.cpp: 184 (JSC::SlotVisitor::addParallelConstraintTask): 185 * heap/SlotVisitor.h: 186 * heap/Subspace.cpp: 187 (JSC::Subspace::sweep): 188 * heap/Subspace.h: 189 * heap/SubspaceInlines.h: 190 (JSC::Subspace::forEachLiveCell): 191 * llint/LowLevelInterpreter.asm: 192 * runtime/EvalExecutable.cpp: 193 (JSC::EvalExecutable::visitChildren): 194 * runtime/EvalExecutable.h: 195 (JSC::EvalExecutable::codeBlock): 196 * runtime/FunctionExecutable.cpp: 197 (JSC::FunctionExecutable::baselineCodeBlockFor): 198 (JSC::FunctionExecutable::visitChildren): 199 * runtime/FunctionExecutable.h: 200 * runtime/JSType.h: 201 * runtime/ModuleProgramExecutable.cpp: 202 (JSC::ModuleProgramExecutable::visitChildren): 203 * runtime/ModuleProgramExecutable.h: 204 * runtime/ProgramExecutable.cpp: 205 (JSC::ProgramExecutable::visitChildren): 206 * runtime/ProgramExecutable.h: 207 * runtime/ScriptExecutable.cpp: 208 (JSC::ScriptExecutable::installCode): 209 (JSC::ScriptExecutable::newReplacementCodeBlockFor): 210 * runtime/VM.cpp: 211 (JSC::VM::VM): 212 * runtime/VM.h: 213 (JSC::VM::SpaceAndFinalizerSet::SpaceAndFinalizerSet): 214 (JSC::VM::SpaceAndFinalizerSet::finalizerSetFor): 215 (JSC::VM::forEachCodeBlockSpace): 216 * runtime/VMTraps.cpp: 217 (JSC::VMTraps::handleTraps): 218 * tools/VMInspector.cpp: 219 (JSC::VMInspector::codeBlockForMachinePC): 220 (JSC::VMInspector::isValidCodeBlock): 221 1 222 2018-01-09 Michael Saboff <[email protected]> 2 223
Note:
See TracChangeset
for help on using the changeset viewer.