Ignore:
Timestamp:
Dec 8, 2008, 5:06:14 PM (16 years ago)
Author:
[email protected]
Message:

2008-12-08 Sam Weinig <[email protected]>

Reviewed by Geoffrey Garen.

Patch for https://bugs.webkit.org/show_bug.cgi?id=22716
<rdar://problem/6428315>
Add RareData structure to CodeBlock for infrequently used auxiliary data
members.

Reduces memory on Membuster-head by ~.5MB

  • bytecode/CodeBlock.cpp: (JSC::CodeBlock::dump): (JSC::CodeBlock::dumpStatistics): (JSC::CodeBlock::mark): (JSC::CodeBlock::getHandlerForVPC): (JSC::CodeBlock::nativeExceptionCodeForHandlerVPC): (JSC::CodeBlock::shrinkToFit):
  • bytecode/CodeBlock.h: (JSC::CodeBlock::numberOfExceptionHandlers): (JSC::CodeBlock::addExceptionHandler): (JSC::CodeBlock::exceptionHandler): (JSC::CodeBlock::addFunction): (JSC::CodeBlock::function): (JSC::CodeBlock::addUnexpectedConstant): (JSC::CodeBlock::unexpectedConstant): (JSC::CodeBlock::addRegExp): (JSC::CodeBlock::regexp): (JSC::CodeBlock::numberOfImmediateSwitchJumpTables): (JSC::CodeBlock::addImmediateSwitchJumpTable): (JSC::CodeBlock::immediateSwitchJumpTable): (JSC::CodeBlock::numberOfCharacterSwitchJumpTables): (JSC::CodeBlock::addCharacterSwitchJumpTable): (JSC::CodeBlock::characterSwitchJumpTable): (JSC::CodeBlock::numberOfStringSwitchJumpTables): (JSC::CodeBlock::addStringSwitchJumpTable): (JSC::CodeBlock::stringSwitchJumpTable): (JSC::CodeBlock::evalCodeCache): (JSC::CodeBlock::createRareDataIfNecessary):
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/bytecode/CodeBlock.h

    r39102 r39116  
    280280        unsigned lastJumpTarget() const { return m_jumpTargets.last(); }
    281281
    282         size_t numberOfExceptionHandlers() const { return m_exceptionHandlers.size(); }
    283         void addExceptionHandler(const HandlerInfo& hanler) { return m_exceptionHandlers.append(hanler); }
    284         HandlerInfo& exceptionHandler(int index) { return m_exceptionHandlers[index]; }
     282        size_t numberOfExceptionHandlers() const { return m_rareData ? m_rareData->m_exceptionHandlers.size() : 0; }
     283        void addExceptionHandler(const HandlerInfo& hanler) { createRareDataIfNecessary(); return m_rareData->m_exceptionHandlers.append(hanler); }
     284        HandlerInfo& exceptionHandler(int index) { ASSERT(m_rareData); return m_rareData->m_exceptionHandlers[index]; }
    285285
    286286        void addExpressionInfo(const ExpressionRangeInfo& expressionInfo) { return m_expressionInfo.append(expressionInfo); }
     
    304304        Register& constantRegister(int index) { return m_constantRegisters[index]; }
    305305
    306         unsigned addFunction(FuncDeclNode* n) { unsigned size = m_functions.size(); m_functions.append(n); return size; }
    307         FuncDeclNode* function(int index) const { return m_functions[index].get(); }
    308 
    309306        unsigned addFunctionExpression(FuncExprNode* n) { unsigned size = m_functionExpressions.size(); m_functionExpressions.append(n); return size; }
    310307        FuncExprNode* functionExpression(int index) const { return m_functionExpressions[index].get(); }
    311308
    312         unsigned addUnexpectedConstant(JSValue* v) { unsigned size = m_unexpectedConstants.size(); m_unexpectedConstants.append(v); return size; }
    313         JSValue* unexpectedConstant(int index) const { return m_unexpectedConstants[index]; }
    314 
    315         unsigned addRegExp(RegExp* r) { unsigned size = m_regexps.size(); m_regexps.append(r); return size; }
    316         RegExp* regexp(int index) const { return m_regexps[index].get(); }
     309        unsigned addFunction(FuncDeclNode* n) { createRareDataIfNecessary(); unsigned size = m_rareData->m_functions.size(); m_rareData->m_functions.append(n); return size; }
     310        FuncDeclNode* function(int index) const { ASSERT(m_rareData); return m_rareData->m_functions[index].get(); }
     311
     312        unsigned addUnexpectedConstant(JSValue* v) { createRareDataIfNecessary(); unsigned size = m_rareData->m_unexpectedConstants.size(); m_rareData->m_unexpectedConstants.append(v); return size; }
     313        JSValue* unexpectedConstant(int index) const { ASSERT(m_rareData); return m_rareData->m_unexpectedConstants[index]; }
     314
     315        unsigned addRegExp(RegExp* r) { createRareDataIfNecessary(); unsigned size = m_rareData->m_regexps.size(); m_rareData->m_regexps.append(r); return size; }
     316        RegExp* regexp(int index) const { ASSERT(m_rareData); return m_rareData->m_regexps[index].get(); }
     317
    317318
    318319        // Jump Tables
    319320
    320         size_t numberOfImmediateSwitchJumpTables() const { return m_immediateSwitchJumpTables.size(); }
    321         SimpleJumpTable& addImmediateSwitchJumpTable() { m_immediateSwitchJumpTables.append(SimpleJumpTable()); return m_immediateSwitchJumpTables.last(); }
    322         SimpleJumpTable& immediateSwitchJumpTable(int tableIndex) { return m_immediateSwitchJumpTables[tableIndex]; }
    323 
    324         size_t numberOfCharacterSwitchJumpTables() const { return m_characterSwitchJumpTables.size(); }
    325         SimpleJumpTable& addCharacterSwitchJumpTable() { m_characterSwitchJumpTables.append(SimpleJumpTable()); return m_characterSwitchJumpTables.last(); }
    326         SimpleJumpTable& characterSwitchJumpTable(int tableIndex) { return m_characterSwitchJumpTables[tableIndex]; }
    327 
    328         size_t numberOfStringSwitchJumpTables() const { return m_stringSwitchJumpTables.size(); }
    329         StringJumpTable& addStringSwitchJumpTable() { m_stringSwitchJumpTables.append(StringJumpTable()); return m_stringSwitchJumpTables.last(); }
    330         StringJumpTable& stringSwitchJumpTable(int tableIndex) { return m_stringSwitchJumpTables[tableIndex]; }
     321        size_t numberOfImmediateSwitchJumpTables() const { return m_rareData ? m_rareData->m_immediateSwitchJumpTables.size() : 0; }
     322        SimpleJumpTable& addImmediateSwitchJumpTable() { createRareDataIfNecessary(); m_rareData->m_immediateSwitchJumpTables.append(SimpleJumpTable()); return m_rareData->m_immediateSwitchJumpTables.last(); }
     323        SimpleJumpTable& immediateSwitchJumpTable(int tableIndex) { ASSERT(m_rareData); return m_rareData->m_immediateSwitchJumpTables[tableIndex]; }
     324
     325        size_t numberOfCharacterSwitchJumpTables() const { return m_rareData ? m_rareData->m_characterSwitchJumpTables.size() : 0; }
     326        SimpleJumpTable& addCharacterSwitchJumpTable() { createRareDataIfNecessary(); m_rareData->m_characterSwitchJumpTables.append(SimpleJumpTable()); return m_rareData->m_characterSwitchJumpTables.last(); }
     327        SimpleJumpTable& characterSwitchJumpTable(int tableIndex) { ASSERT(m_rareData); return m_rareData->m_characterSwitchJumpTables[tableIndex]; }
     328
     329        size_t numberOfStringSwitchJumpTables() const { return m_rareData ? m_rareData->m_stringSwitchJumpTables.size() : 0; }
     330        StringJumpTable& addStringSwitchJumpTable() { createRareDataIfNecessary(); m_rareData->m_stringSwitchJumpTables.append(StringJumpTable()); return m_rareData->m_stringSwitchJumpTables.last(); }
     331        StringJumpTable& stringSwitchJumpTable(int tableIndex) { ASSERT(m_rareData); return m_rareData->m_stringSwitchJumpTables[tableIndex]; }
    331332
    332333
    333334        SymbolTable& symbolTable() { return m_symbolTable; }
    334         EvalCodeCache& evalCodeCache() { return m_evalCodeCache; }
     335
     336        EvalCodeCache& evalCodeCache() { createRareDataIfNecessary(); return m_rareData->m_evalCodeCache; }
    335337
    336338        void shrinkToFit();
     
    352354#endif
    353355
     356        void createRareDataIfNecessary()
     357        {
     358            if (!m_rareData)
     359                m_rareData.set(new RareData);
     360        }
     361
     362
    354363        ScopeNode* m_ownerNode;
    355364        JSGlobalData* m_globalData;
     
    379388        Vector<unsigned> m_jumpTargets;
    380389
    381         Vector<HandlerInfo> m_exceptionHandlers;
    382390        Vector<ExpressionRangeInfo> m_expressionInfo;
    383391        Vector<LineInfo> m_lineInfo;
     
    390398        Vector<Identifier> m_identifiers;
    391399        Vector<Register> m_constantRegisters;
    392         Vector<RefPtr<FuncDeclNode> > m_functions;
    393400        Vector<RefPtr<FuncExprNode> > m_functionExpressions;
    394         Vector<JSValue*> m_unexpectedConstants;
    395         Vector<RefPtr<RegExp> > m_regexps;
    396 
    397         // Jump Tables
    398         Vector<SimpleJumpTable> m_immediateSwitchJumpTables;
    399         Vector<SimpleJumpTable> m_characterSwitchJumpTables;
    400         Vector<StringJumpTable> m_stringSwitchJumpTables;
    401401
    402402        SymbolTable m_symbolTable;
    403403
    404         EvalCodeCache m_evalCodeCache;
     404        struct RareData {
     405            Vector<HandlerInfo> m_exceptionHandlers;
     406
     407            // Rare Constants
     408            Vector<RefPtr<FuncDeclNode> > m_functions;
     409            Vector<JSValue*> m_unexpectedConstants;
     410            Vector<RefPtr<RegExp> > m_regexps;
     411
     412            // Jump Tables
     413            Vector<SimpleJumpTable> m_immediateSwitchJumpTables;
     414            Vector<SimpleJumpTable> m_characterSwitchJumpTables;
     415            Vector<StringJumpTable> m_stringSwitchJumpTables;
     416
     417            EvalCodeCache m_evalCodeCache;
     418        };
     419
     420        OwnPtr<RareData> m_rareData;
    405421    };
    406422
Note: See TracChangeset for help on using the changeset viewer.