Ignore:
Timestamp:
Apr 15, 2021, 12:03:38 AM (4 years ago)
Author:
[email protected]
Message:

[JSC] Change Vector<> to FixedVector<> in DFG::CommonData if possible
https://bugs.webkit.org/show_bug.cgi?id=224588

Reviewed by Mark Lam.

DFG::CommonData is kept alive so long as DFG code exists. It includes a lot of Vectors while they are not mutable after the DFG code compilation.
This patch changes Vector<> to FixedVector<> if possible to shrink sizeof(DFG::CommonData). And this also removes the need of calling shrinkToFit
explicitly for them.

  • bytecode/CodeBlock.cpp:

(JSC::CodeBlock::propagateTransitions):
(JSC::CodeBlock::determineLiveness):
(JSC::CodeBlock::stronglyVisitWeakReferences):
(JSC::CodeBlock::jettison):
(JSC::CodeBlock::numberOfDFGIdentifiers const):
(JSC::CodeBlock::identifier const):

  • bytecode/CodeBlock.h:
  • dfg/DFGCommonData.cpp:

(JSC::DFG::CommonData::shrinkToFit):
(JSC::DFG::CommonData::invalidate):
(JSC::DFG::CommonData::~CommonData):
(JSC::DFG::CommonData::installVMTrapBreakpoints):
(JSC::DFG::CommonData::isVMTrapBreakpoint):
(JSC::DFG::CommonData::finalizeCatchEntrypoints):
(JSC::DFG::CommonData::notifyCompilingStructureTransition): Deleted.

  • dfg/DFGCommonData.h:

(JSC::DFG::CommonData::catchOSREntryDataForBytecodeIndex):
(JSC::DFG::CommonData::appendCatchEntrypoint): Deleted.

  • dfg/DFGDesiredIdentifiers.cpp:

(JSC::DFG::DesiredIdentifiers::reallyAdd):

  • dfg/DFGDesiredTransitions.cpp:

(JSC::DFG::DesiredTransition::DesiredTransition):
(JSC::DFG::DesiredTransitions::DesiredTransitions):
(JSC::DFG::DesiredTransitions::addLazily):
(JSC::DFG::DesiredTransitions::reallyAdd):
(JSC::DFG::DesiredTransition::reallyAdd): Deleted.

  • dfg/DFGDesiredTransitions.h:
  • dfg/DFGDesiredWeakReferences.cpp:

(JSC::DFG::DesiredWeakReferences::reallyAdd):

  • dfg/DFGGraph.h:
  • dfg/DFGJITCompiler.cpp:

(JSC::DFG::JITCompiler::link):
(JSC::DFG::JITCompiler::noticeCatchEntrypoint):

  • dfg/DFGOSREntry.h:
  • dfg/DFGPlan.cpp:

(JSC::DFG::Plan::Plan):
(JSC::DFG::Plan::finalizeWithoutNotifyingCallback):

  • dfg/DFGSpeculativeJIT.cpp:

(JSC::DFG::SpeculativeJIT::linkOSREntries):

  • dfg/DFGSpeculativeJIT32_64.cpp:

(JSC::DFG::SpeculativeJIT::compile):

  • dfg/DFGSpeculativeJIT64.cpp:

(JSC::DFG::SpeculativeJIT::compile):

  • ftl/FTLCompile.cpp:

(JSC::FTL::compile):

  • ftl/FTLLowerDFGToB3.cpp:

(JSC::FTL::DFG::LowerDFGToB3::compilePutStructure):
(JSC::FTL::DFG::LowerDFGToB3::compileMultiPutByOffset):
(JSC::FTL::DFG::LowerDFGToB3::compileInvalidationPoint):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/dfg/DFGDesiredTransitions.cpp

    r273138 r276005  
    3636namespace JSC { namespace DFG {
    3737
    38 DesiredTransition::DesiredTransition(CodeBlock* codeBlock, CodeBlock* codeOriginOwner, Structure* oldStructure, Structure* newStructure)
    39     : m_codeBlock(codeBlock)
    40     , m_codeOriginOwner(codeOriginOwner)
     38DesiredTransition::DesiredTransition(CodeBlock* codeOriginOwner, Structure* oldStructure, Structure* newStructure)
     39    : m_codeOriginOwner(codeOriginOwner)
    4140    , m_oldStructure(oldStructure)
    4241    , m_newStructure(newStructure)
    4342{
    44 }
    45 
    46 void DesiredTransition::reallyAdd(VM& vm, CommonData* common)
    47 {
    48     ConcurrentJSLocker locker(m_codeBlock->m_lock);
    49     common->transitions.append(
    50         WeakReferenceTransition(
    51             vm, m_codeBlock,
    52             m_codeOriginOwner,
    53             m_oldStructure, m_newStructure));
    5443}
    5544
     
    6554template void DesiredTransition::visitChildren(SlotVisitor&);
    6655
    67 DesiredTransitions::DesiredTransitions()
     56DesiredTransitions::DesiredTransitions(CodeBlock* codeBlock)
     57    : m_codeBlock(codeBlock)
    6858{
    6959}
     
    7363}
    7464
    75 void DesiredTransitions::addLazily(CodeBlock* codeBlock, CodeBlock* codeOriginOwner, Structure* oldStructure, Structure* newStructure)
     65void DesiredTransitions::addLazily(CodeBlock* codeOriginOwner, Structure* oldStructure, Structure* newStructure)
    7666{
    77     m_transitions.append(DesiredTransition(codeBlock, codeOriginOwner, oldStructure, newStructure));
     67    m_transitions.append(DesiredTransition(codeOriginOwner, oldStructure, newStructure));
    7868}
    7969
    8070void DesiredTransitions::reallyAdd(VM& vm, CommonData* common)
    8171{
    82     for (unsigned i = 0; i < m_transitions.size(); i++)
    83         m_transitions[i].reallyAdd(vm, common);
     72    FixedVector<WeakReferenceTransition> transitions(m_transitions.size());
     73    for (unsigned i = 0; i < m_transitions.size(); i++) {
     74        auto& desiredTransition = m_transitions[i];
     75        transitions[i] = WeakReferenceTransition(vm, m_codeBlock, desiredTransition.m_codeOriginOwner, desiredTransition.m_oldStructure, desiredTransition.m_newStructure);
     76    }
     77    if (!transitions.isEmpty()) {
     78        ConcurrentJSLocker locker(m_codeBlock->m_lock);
     79        ASSERT(common->m_transitions.isEmpty());
     80        common->m_transitions = WTFMove(transitions);
     81    }
    8482}
    8583
Note: See TracChangeset for help on using the changeset viewer.