Ignore:
Timestamp:
Jun 9, 2011, 9:38:23 PM (14 years ago)
Author:
[email protected]
Message:

2011-06-09 Geoffrey Garen <[email protected]>

Reviewed by Oliver Hunt.

Added OldSpace to the project
https://bugs.webkit.org/show_bug.cgi?id=62417


Currently unused.


Added OldSpace, the ability to iterate NewSpace vs OldSpace, and a
per-block flag for testing whether you're in NewSpace vs OldSpace.

  • heap/MarkedBlock.cpp: (JSC::MarkedBlock::MarkedBlock):
  • heap/MarkedBlock.h: (JSC::MarkedBlock::inNewSpace): (JSC::MarkedBlock::setInNewSpace): Added inNewSpace flag, for use in write barrier.
  • heap/NewSpace.cpp: (JSC::NewSpace::addBlock): (JSC::NewSpace::removeBlock):
  • heap/NewSpace.h: (JSC::NewSpace::forEachBlock): Added forEachBlock, to use for NewSpace-specific operations.
  • heap/OldSpace.cpp: Added. (JSC::OldSpace::OldSpace): (JSC::OldSpace::addBlock): (JSC::OldSpace::removeBlock):
  • heap/OldSpace.h: Added. (JSC::OldSpace::forEachBlock): New class for holding promoted blocks. Not in use yet.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/heap/NewSpace.h

    r88389 r88519  
    6262        SizeClass& sizeClassFor(size_t);
    6363        void* allocate(SizeClass&);
     64        void resetAllocator();
    6465
    6566        void addBlock(SizeClass&, MarkedBlock*);
     
    7071        void setHighWaterMark(size_t);
    7172
    72         void resetAllocator();
     73        template<typename Functor> typename Functor::ReturnType forEachBlock(Functor&); // Safe to remove the current item while iterating.
     74        template<typename Functor> typename Functor::ReturnType forEachBlock();
    7375
    7476    private:
     
    125127    }
    126128
     129    template <typename Functor> inline typename Functor::ReturnType NewSpace::forEachBlock(Functor& functor)
     130    {
     131        for (size_t i = 0; i < preciseCount; ++i) {
     132            SizeClass& sizeClass = m_preciseSizeClasses[i];
     133            MarkedBlock* next;
     134            for (MarkedBlock* block = sizeClass.blockList.head(); block; block = next) {
     135                next = block->next();
     136                functor(block);
     137            }
     138        }
     139
     140        for (size_t i = 0; i < impreciseCount; ++i) {
     141            SizeClass& sizeClass = m_impreciseSizeClasses[i];
     142            MarkedBlock* next;
     143            for (MarkedBlock* block = sizeClass.blockList.head(); block; block = next) {
     144                next = block->next();
     145                functor(block);
     146            }
     147        }
     148
     149        return functor.returnValue();
     150    }
     151
     152    template <typename Functor> inline typename Functor::ReturnType NewSpace::forEachBlock()
     153    {
     154        Functor functor;
     155        return forEachBlock(functor);
     156    }
     157
    127158    inline NewSpace::SizeClass::SizeClass()
    128159        : nextBlock(0)
Note: See TracChangeset for help on using the changeset viewer.