Changeset 95439 in webkit
- Timestamp:
- Sep 19, 2011 10:41:51 AM (13 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r95417 r95439 1 2011-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 1 28 2011-09-19 Carlos Garcia Campos <cgarcia@igalia.com> 2 29 -
trunk/Source/JavaScriptCore/heap/Heap.cpp
r95308 r95439 693 693 size_t proportionalBytes = 2 * size(); 694 694 m_newSpace.setHighWaterMark(max(proportionalBytes, m_minBytesPerCycle)); 695 m_newSpace.resetPropertyStorageNursery();696 695 JAVASCRIPTCORE_GC_END(); 697 696 -
trunk/Source/JavaScriptCore/heap/Heap.h
r94814 r95439 92 92 void collectAllGarbage(); 93 93 94 inline void* allocatePropertyStorage(size_t);95 inline bool inPropertyStorageNursery(void*);96 97 94 void reportExtraMemoryCost(size_t cost); 98 95 … … 363 360 } 364 361 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 381 362 } // namespace JSC 382 363 -
trunk/Source/JavaScriptCore/heap/NewSpace.cpp
r94814 r95439 33 33 34 34 NewSpace::NewSpace(Heap* heap) 35 : m_propertyStorageNursery(static_cast<char*>(fastMalloc(PropertyStorageNurserySize))) 36 , m_propertyStorageAllocationPoint(m_propertyStorageNursery) 37 , m_waterMark(0) 35 : m_waterMark(0) 38 36 , m_highWaterMark(0) 39 37 , m_heap(heap) -
trunk/Source/JavaScriptCore/heap/NewSpace.h
r94814 r95439 47 47 public: 48 48 static const size_t maxCellSize = 1024; 49 static const size_t PropertyStorageNurserySize = 4 * MB;50 49 51 50 struct SizeClass { … … 65 64 SizeClass& sizeClassFor(size_t); 66 65 void* allocate(SizeClass&); 67 inline void* allocatePropertyStorage(size_t);68 inline bool inPropertyStorageNursery(void* ptr);69 inline void resetPropertyStorageNursery();70 66 71 67 void resetAllocator(); … … 97 93 SizeClass m_preciseSizeClasses[preciseCount]; 98 94 SizeClass m_impreciseSizeClasses[impreciseCount]; 99 char* m_propertyStorageNursery;100 char* m_propertyStorageAllocationPoint;101 95 size_t m_waterMark; 102 96 size_t m_highWaterMark; … … 167 161 return firstFreeCell; 168 162 } 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 }193 163 194 164 template <typename Functor> inline typename Functor::ReturnType NewSpace::forEachBlock(Functor& functor) -
trunk/Source/JavaScriptCore/runtime/JSObject.cpp
r95318 r95439 597 597 // we might be in the middle of a transition. 598 598 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]; 609 600 610 601 PropertyStorage oldPropertyStorage = m_propertyStorage.get(); … … 614 605 newPropertyStorage[i] = oldPropertyStorage[i]; 615 606 616 if (!isUsingInlineStorage() && !globalData.heap.inPropertyStorageNursery(m_propertyStorage.get()))607 if (!isUsingInlineStorage()) 617 608 delete [] oldPropertyStorage; 618 609 -
trunk/Source/JavaScriptCore/runtime/JSObject.h
r95357 r95439 439 439 inline JSObject::~JSObject() 440 440 { 441 if (!isUsingInlineStorage() && !Heap::heap(this)->inPropertyStorageNursery(m_propertyStorage.get()))441 if (!isUsingInlineStorage()) 442 442 delete [] m_propertyStorage.get(); 443 443 } … … 827 827 828 828 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 }835 829 size_t storageSize = m_structure->propertyStorageSize(); 836 830 visitor.appendValues(storage, storageSize); -
trunk/Source/JavaScriptCore/runtime/StorageBarrier.h
r94814 r95439 48 48 } 49 49 50 void set(JSGlobalData& globalData, JSCell* owner, PropertyStorage newStorage)50 void set(JSGlobalData&, JSCell*, PropertyStorage newStorage) 51 51 { 52 if (!globalData.heap.inPropertyStorageNursery(m_storage))53 globalData.heap.writeBarrier(owner, JSValue());54 52 m_storage = newStorage; 55 53 }
Note: See TracChangeset
for help on using the changeset viewer.