Changeset 95439 in webkit


Ignore:
Timestamp:
Sep 19, 2011 10:41:51 AM (13 years ago)
Author:
oliver@apple.com
Message:

Remove bump allocator
https://bugs.webkit.org/show_bug.cgi?id=68370

Reviewed by Sam Weinig.

Can't do anything with this allocator currently, and it's
increasing the complexity of the GC code. Slight progression
on SunSpider, slight regression (undoing the original progression)
in V8.

  • heap/Heap.cpp:

(JSC::Heap::collect):

  • heap/Heap.h:
  • heap/NewSpace.cpp:

(JSC::NewSpace::NewSpace):

  • heap/NewSpace.h:

(JSC::NewSpace::allocate):

  • runtime/JSObject.cpp:

(JSC::JSObject::allocatePropertyStorage):

  • runtime/JSObject.h:

(JSC::JSObject::~JSObject):
(JSC::JSObject::visitChildrenDirect):

  • runtime/StorageBarrier.h:

(JSC::StorageBarrier::set):

Location:
trunk/Source/JavaScriptCore
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r95417 r95439  
     12011-09-19  Oliver Hunt  <oliver@apple.com>
     2
     3        Remove bump allocator
     4        https://bugs.webkit.org/show_bug.cgi?id=68370
     5
     6        Reviewed by Sam Weinig.
     7
     8        Can't do anything with this allocator currently, and it's
     9        increasing the complexity of the GC code.  Slight progression
     10        on SunSpider, slight regression (undoing the original progression)
     11        in V8.
     12
     13        * heap/Heap.cpp:
     14        (JSC::Heap::collect):
     15        * heap/Heap.h:
     16        * heap/NewSpace.cpp:
     17        (JSC::NewSpace::NewSpace):
     18        * heap/NewSpace.h:
     19        (JSC::NewSpace::allocate):
     20        * runtime/JSObject.cpp:
     21        (JSC::JSObject::allocatePropertyStorage):
     22        * runtime/JSObject.h:
     23        (JSC::JSObject::~JSObject):
     24        (JSC::JSObject::visitChildrenDirect):
     25        * runtime/StorageBarrier.h:
     26        (JSC::StorageBarrier::set):
     27
    1282011-09-19  Carlos Garcia Campos  <cgarcia@igalia.com>
    229
  • trunk/Source/JavaScriptCore/heap/Heap.cpp

    r95308 r95439  
    693693    size_t proportionalBytes = 2 * size();
    694694    m_newSpace.setHighWaterMark(max(proportionalBytes, m_minBytesPerCycle));
    695     m_newSpace.resetPropertyStorageNursery();
    696695    JAVASCRIPTCORE_GC_END();
    697696
  • trunk/Source/JavaScriptCore/heap/Heap.h

    r94814 r95439  
    9292        void collectAllGarbage();
    9393
    94         inline void* allocatePropertyStorage(size_t);
    95         inline bool inPropertyStorageNursery(void*);
    96 
    9794        void reportExtraMemoryCost(size_t cost);
    9895
     
    363360    }
    364361
    365     inline void* Heap::allocatePropertyStorage(size_t bytes)
    366     {
    367         ASSERT(!(bytes % sizeof(JSValue)));
    368         if (bytes >= NewSpace::PropertyStorageNurserySize)
    369             return 0;
    370         if (void* result = m_newSpace.allocatePropertyStorage(bytes))
    371             return result;
    372         collect(DoNotSweep);
    373         return m_newSpace.allocatePropertyStorage(bytes);
    374     }
    375    
    376     inline bool Heap::inPropertyStorageNursery(void* ptr)
    377     {
    378         return m_newSpace.inPropertyStorageNursery(ptr);
    379     }
    380 
    381362} // namespace JSC
    382363
  • trunk/Source/JavaScriptCore/heap/NewSpace.cpp

    r94814 r95439  
    3333
    3434NewSpace::NewSpace(Heap* heap)
    35     : m_propertyStorageNursery(static_cast<char*>(fastMalloc(PropertyStorageNurserySize)))
    36     , m_propertyStorageAllocationPoint(m_propertyStorageNursery)
    37     , m_waterMark(0)
     35    : m_waterMark(0)
    3836    , m_highWaterMark(0)
    3937    , m_heap(heap)
  • trunk/Source/JavaScriptCore/heap/NewSpace.h

    r94814 r95439  
    4747    public:
    4848        static const size_t maxCellSize = 1024;
    49         static const size_t PropertyStorageNurserySize = 4 * MB;
    5049
    5150        struct SizeClass {
     
    6564        SizeClass& sizeClassFor(size_t);
    6665        void* allocate(SizeClass&);
    67         inline void* allocatePropertyStorage(size_t);
    68         inline bool inPropertyStorageNursery(void* ptr);
    69         inline void resetPropertyStorageNursery();
    7066       
    7167        void resetAllocator();
     
    9793        SizeClass m_preciseSizeClasses[preciseCount];
    9894        SizeClass m_impreciseSizeClasses[impreciseCount];
    99         char* m_propertyStorageNursery;
    100         char* m_propertyStorageAllocationPoint;
    10195        size_t m_waterMark;
    10296        size_t m_highWaterMark;
     
    167161        return firstFreeCell;
    168162    }
    169 
    170     inline void NewSpace::resetPropertyStorageNursery()
    171     {
    172         m_propertyStorageAllocationPoint = m_propertyStorageNursery;
    173     }
    174    
    175     inline void* NewSpace::allocatePropertyStorage(size_t size)
    176     {
    177         char* result = m_propertyStorageAllocationPoint;
    178         if (size > PropertyStorageNurserySize)
    179             CRASH();
    180         m_propertyStorageAllocationPoint += size;
    181         if (static_cast<size_t>(m_propertyStorageAllocationPoint - m_propertyStorageNursery) > PropertyStorageNurserySize) {
    182             m_propertyStorageAllocationPoint = result;
    183             return 0;
    184         }
    185         return result;
    186     }
    187 
    188     inline bool NewSpace::inPropertyStorageNursery(void* ptr)
    189     {
    190         char* addr = static_cast<char*>(ptr);
    191         return static_cast<size_t>(addr - m_propertyStorageNursery) < PropertyStorageNurserySize;
    192     }
    193163   
    194164    template <typename Functor> inline typename Functor::ReturnType NewSpace::forEachBlock(Functor& functor)
  • trunk/Source/JavaScriptCore/runtime/JSObject.cpp

    r95318 r95439  
    597597    // we might be in the middle of a transition.
    598598    PropertyStorage newPropertyStorage = 0;
    599     if (globalData.heap.inPropertyStorageNursery(m_propertyStorage.get())) {
    600         newPropertyStorage = static_cast<PropertyStorage>(globalData.heap.allocatePropertyStorage(newSize * sizeof(WriteBarrierBase<Unknown>)));
    601         if (!newPropertyStorage || !globalData.heap.inPropertyStorageNursery(m_propertyStorage.get())) {
    602             // If allocation failed because it's too big, or it triggered a GC
    603             // that promoted us to old space, we need to allocate our property
    604             // storage in old space.
    605             newPropertyStorage = new WriteBarrierBase<Unknown>[newSize];
    606         }
    607     } else
    608         newPropertyStorage = new WriteBarrierBase<Unknown>[newSize];
     599    newPropertyStorage = new WriteBarrierBase<Unknown>[newSize];
    609600
    610601    PropertyStorage oldPropertyStorage = m_propertyStorage.get();
     
    614605       newPropertyStorage[i] = oldPropertyStorage[i];
    615606
    616     if (!isUsingInlineStorage() && !globalData.heap.inPropertyStorageNursery(m_propertyStorage.get()))
     607    if (!isUsingInlineStorage())
    617608        delete [] oldPropertyStorage;
    618609
  • trunk/Source/JavaScriptCore/runtime/JSObject.h

    r95357 r95439  
    439439inline JSObject::~JSObject()
    440440{
    441     if (!isUsingInlineStorage() && !Heap::heap(this)->inPropertyStorageNursery(m_propertyStorage.get()))
     441    if (!isUsingInlineStorage())
    442442        delete [] m_propertyStorage.get();
    443443}
     
    827827
    828828    PropertyStorage storage = propertyStorage();
    829     if (Heap::heap(this)->inPropertyStorageNursery(storage)) {
    830         m_propertyStorage.set(new WriteBarrierBase<Unknown>[structure()->propertyStorageCapacity()], StorageBarrier::Unchecked);
    831         if (structure()->propertyStorageCapacity() > m_structure->propertyStorageSize())
    832             ASSERT(!storage[m_structure->propertyStorageSize()]);
    833         memcpy(m_propertyStorage.get(), storage, m_structure->propertyStorageSize() * sizeof(WriteBarrierBase<Unknown>));
    834     }
    835829    size_t storageSize = m_structure->propertyStorageSize();
    836830    visitor.appendValues(storage, storageSize);
  • trunk/Source/JavaScriptCore/runtime/StorageBarrier.h

    r94814 r95439  
    4848    }
    4949   
    50     void set(JSGlobalData& globalData, JSCell* owner, PropertyStorage newStorage)
     50    void set(JSGlobalData&, JSCell*, PropertyStorage newStorage)
    5151    {
    52         if (!globalData.heap.inPropertyStorageNursery(m_storage))
    53             globalData.heap.writeBarrier(owner, JSValue());
    5452        m_storage = newStorage;
    5553    }
Note: See TracChangeset for help on using the changeset viewer.