bmalloc should support strictly type-segregated isolated heaps
authorfpizlo@apple.com <fpizlo@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 7 Nov 2017 19:21:52 +0000 (19:21 +0000)
committerfpizlo@apple.com <fpizlo@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 7 Nov 2017 19:21:52 +0000 (19:21 +0000)
https://bugs.webkit.org/show_bug.cgi?id=178108

Reviewed by Saam Barati, Simon Fraser, and Ryosuke Niwa.
Source/bmalloc:

This introduces a new allocation API in bmalloc called IsoHeap. An IsoHeap is templatized by
type and created in static storage. When unused, it takes only a few words. When you do use
it, each IsoHeap gets a bag of virtual pages unique to it. This prevents use-after-free bugs
in one IsoHeap from affecting any other memory. At worst, two pointers of the same type will
point to the same object even though they should not have.

IsoHeaps allocate using a first-fit discipline that combines ideas from bmalloc and Riptide
(the JSC GC):

Like Riptide, it uses a bump'n'pop allocator. What Riptide calls blocks, IsoHeaps calls
pages. Pages are collected into directories. Directories track pages using bitvectors, so
that it's easy to quickly find a completely free page or one that has at least one free
object. I think that the bump'n'pop allocator is as fast as the bmalloc Immix-style (page and
line) allocator, but is better at allocating in holes. It's guaranteed to follow a first-fit
discipline. However, the real reason why I wrote it that was is that this is what I'm more
familiar with. This is a part of the design I want to revisit (bug 179278).

Like bmalloc, it uses a deallocation log. This means that the internal IsoHeap data
structures can be locked with a coarse-grained lock, since the deallocator only grabs it when
flushing the log. Similarly, the allocator only grabs it when refilling the bump'n'pop
FreeList.

This adds a unit test for IsoHeaps. In this change, IsoHeaps are adopted only by WebCore's
RenderObject.

Note that despite the use of GC concepts, it's not a goal to make this code directly sharable
with GC. The GC will probably have to do isolated heaps its own way (likely a special
Subspace or something like that).

* bmalloc.xcodeproj/project.pbxproj:
* bmalloc/Algorithm.h:
(bmalloc::findBitInWord):
* bmalloc/AllIsoHeaps.cpp: Added.
(bmalloc::AllIsoHeaps::AllIsoHeaps):
(bmalloc::AllIsoHeaps::add):
(bmalloc::AllIsoHeaps::head):
* bmalloc/AllIsoHeaps.h: Added.
* bmalloc/AllIsoHeapsInlines.h: Added.
(bmalloc::AllIsoHeaps::forEach):
* bmalloc/BMalloced.h: Added.
* bmalloc/Bits.h: Added.
(bmalloc::bitsArrayLength):
(bmalloc::BitsWordView::BitsWordView):
(bmalloc::BitsWordView::numBits const):
(bmalloc::BitsWordView::word const):
(bmalloc::BitsWordOwner::BitsWordOwner):
(bmalloc::BitsWordOwner::view const):
(bmalloc::BitsWordOwner::operator=):
(bmalloc::BitsWordOwner::setAll):
(bmalloc::BitsWordOwner::clearAll):
(bmalloc::BitsWordOwner::set):
(bmalloc::BitsWordOwner::numBits const):
(bmalloc::BitsWordOwner::arrayLength const):
(bmalloc::BitsWordOwner::word const):
(bmalloc::BitsWordOwner::word):
(bmalloc::BitsWordOwner::words const):
(bmalloc::BitsWordOwner::words):
(bmalloc::BitsAndWords::BitsAndWords):
(bmalloc::BitsAndWords::view const):
(bmalloc::BitsAndWords::numBits const):
(bmalloc::BitsAndWords::word const):
(bmalloc::BitsOrWords::BitsOrWords):
(bmalloc::BitsOrWords::view const):
(bmalloc::BitsOrWords::numBits const):
(bmalloc::BitsOrWords::word const):
(bmalloc::BitsNotWords::BitsNotWords):
(bmalloc::BitsNotWords::view const):
(bmalloc::BitsNotWords::numBits const):
(bmalloc::BitsNotWords::word const):
(bmalloc::BitsImpl::BitsImpl):
(bmalloc::BitsImpl::numBits const):
(bmalloc::BitsImpl::size const):
(bmalloc::BitsImpl::arrayLength const):
(bmalloc::BitsImpl::operator== const):
(bmalloc::BitsImpl::operator!= const):
(bmalloc::BitsImpl::at const):
(bmalloc::BitsImpl::operator[] const):
(bmalloc::BitsImpl::isEmpty const):
(bmalloc::BitsImpl::operator& const):
(bmalloc::BitsImpl::operator| const):
(bmalloc::BitsImpl::operator~ const):
(bmalloc::BitsImpl::forEachSetBit const):
(bmalloc::BitsImpl::forEachClearBit const):
(bmalloc::BitsImpl::forEachBit const):
(bmalloc::BitsImpl::findBit const):
(bmalloc::BitsImpl::findSetBit const):
(bmalloc::BitsImpl::findClearBit const):
(bmalloc::BitsImpl::wordView const):
(bmalloc::BitsImpl::atImpl const):
(bmalloc::Bits::Bits):
(bmalloc::Bits::operator=):
(bmalloc::Bits::resize):
(bmalloc::Bits::setAll):
(bmalloc::Bits::clearAll):
(bmalloc::Bits::setAndCheck):
(bmalloc::Bits::operator|=):
(bmalloc::Bits::operator&=):
(bmalloc::Bits::at const):
(bmalloc::Bits::operator[] const):
(bmalloc::Bits::BitReference::BitReference):
(bmalloc::Bits::BitReference::operator bool const):
(bmalloc::Bits::BitReference::operator=):
(bmalloc::Bits::at):
(bmalloc::Bits::operator[]):
* bmalloc/CryptoRandom.cpp: Replaced with Source/bmalloc/bmalloc/CryptoRandom.cpp.
(bmalloc::cryptoRandom):
* bmalloc/CryptoRandom.h: Replaced with Source/bmalloc/bmalloc/CryptoRandom.h.
* bmalloc/DeferredDecommit.h: Added.
* bmalloc/DeferredDecommitInlines.h: Added.
(bmalloc::DeferredDecommit::DeferredDecommit):
* bmalloc/DeferredTrigger.h: Added.
(bmalloc::DeferredTrigger::DeferredTrigger):
* bmalloc/DeferredTriggerInlines.h: Added.
(bmalloc::DeferredTrigger<trigger>::didBecome):
(bmalloc::DeferredTrigger<trigger>::handleDeferral):
* bmalloc/EligibilityResult.h: Added.
(bmalloc::EligibilityResult::EligibilityResult):
* bmalloc/EligibilityResultInlines.h: Added.
(bmalloc::EligibilityResult<Config>::EligibilityResult):
* bmalloc/FixedVector.h:
* bmalloc/FreeList.cpp: Added.
(bmalloc::FreeList::FreeList):
(bmalloc::FreeList::~FreeList):
(bmalloc::FreeList::clear):
(bmalloc::FreeList::initializeList):
(bmalloc::FreeList::initializeBump):
(bmalloc::FreeList::contains const):
* bmalloc/FreeList.h: Added.
(bmalloc::FreeCell::scramble):
(bmalloc::FreeCell::descramble):
(bmalloc::FreeCell::setNext):
(bmalloc::FreeCell::next const):
(bmalloc::FreeList::allocationWillFail const):
(bmalloc::FreeList::allocationWillSucceed const):
(bmalloc::FreeList::originalSize const):
(bmalloc::FreeList::head const):
* bmalloc/FreeListInlines.h: Added.
(bmalloc::FreeList::allocate):
(bmalloc::FreeList::forEach const):
* bmalloc/IsoAllocator.h: Added.
* bmalloc/IsoAllocatorInlines.h: Added.
(bmalloc::IsoAllocator<Config>::IsoAllocator):
(bmalloc::IsoAllocator<Config>::~IsoAllocator):
(bmalloc::IsoAllocator<Config>::allocate):
(bmalloc::IsoAllocator<Config>::allocateSlow):
(bmalloc::IsoAllocator<Config>::scavenge):
* bmalloc/IsoConfig.h: Added.
* bmalloc/IsoDeallocator.h: Added.
* bmalloc/IsoDeallocatorInlines.h: Added.
(bmalloc::IsoDeallocator<Config>::IsoDeallocator):
(bmalloc::IsoDeallocator<Config>::~IsoDeallocator):
(bmalloc::IsoDeallocator<Config>::deallocate):
(bmalloc::IsoDeallocator<Config>::scavenge):
* bmalloc/IsoDirectory.h: Added.
(bmalloc::IsoDirectoryBaseBase::IsoDirectoryBaseBase):
(bmalloc::IsoDirectoryBaseBase::~IsoDirectoryBaseBase):
(bmalloc::IsoDirectoryBase::heap):
* bmalloc/IsoDirectoryInlines.h: Added.
(bmalloc::IsoDirectoryBase<Config>::IsoDirectoryBase):
(bmalloc::passedNumPages>::IsoDirectory):
(bmalloc::passedNumPages>::takeFirstEligible):
(bmalloc::passedNumPages>::didBecome):
(bmalloc::passedNumPages>::didDecommit):
(bmalloc::passedNumPages>::scavenge):
(bmalloc::passedNumPages>::forEachCommittedPage):
* bmalloc/IsoDirectoryPage.h: Added.
(bmalloc::IsoDirectoryPage::index const):
* bmalloc/IsoDirectoryPageInlines.h: Added.
(bmalloc::IsoDirectoryPage<Config>::IsoDirectoryPage):
(bmalloc::IsoDirectoryPage<Config>::pageFor):
* bmalloc/IsoHeap.h: Added.
(bmalloc::api::IsoHeap::allocatorOffset):
(bmalloc::api::IsoHeap::setAllocatorOffset):
(bmalloc::api::IsoHeap::deallocatorOffset):
(bmalloc::api::IsoHeap::setDeallocatorOffset):
* bmalloc/IsoHeapImpl.cpp: Added.
(bmalloc::IsoHeapImplBase::IsoHeapImplBase):
(bmalloc::IsoHeapImplBase::~IsoHeapImplBase):
(bmalloc::IsoHeapImplBase::scavengeNow):
(bmalloc::IsoHeapImplBase::finishScavenging):
* bmalloc/IsoHeapImpl.h: Added.
* bmalloc/IsoHeapImplInlines.h: Added.
(bmalloc::IsoHeapImpl<Config>::IsoHeapImpl):
(bmalloc::IsoHeapImpl<Config>::takeFirstEligible):
(bmalloc::IsoHeapImpl<Config>::didBecomeEligible):
(bmalloc::IsoHeapImpl<Config>::scavenge):
(bmalloc::IsoHeapImpl<Config>::allocatorOffset):
(bmalloc::IsoHeapImpl<Config>::deallocatorOffset):
(bmalloc::IsoHeapImpl<Config>::numLiveObjects):
(bmalloc::IsoHeapImpl<Config>::numCommittedPages):
(bmalloc::IsoHeapImpl<Config>::forEachDirectory):
(bmalloc::IsoHeapImpl<Config>::forEachCommittedPage):
(bmalloc::IsoHeapImpl<Config>::forEachLiveObject):
* bmalloc/IsoHeapInlines.h: Added.
(bmalloc::api::IsoHeap<Type>::allocate):
(bmalloc::api::IsoHeap<Type>::tryAllocate):
(bmalloc::api::IsoHeap<Type>::deallocate):
(bmalloc::api::IsoHeap<Type>::scavenge):
(bmalloc::api::IsoHeap<Type>::isInitialized):
(bmalloc::api::IsoHeap<Type>::impl):
* bmalloc/IsoPage.h: Added.
(bmalloc::IsoPage::index const):
(bmalloc::IsoPage::directory):
(bmalloc::IsoPage::isInUseForAllocation const):
(bmalloc::IsoPage::indexOfFirstObject):
* bmalloc/IsoPageInlines.h: Added.
(bmalloc::IsoPage<Config>::tryCreate):
(bmalloc::IsoPage<Config>::IsoPage):
(bmalloc::IsoPage<Config>::free):
(bmalloc::IsoPage<Config>::startAllocating):
(bmalloc::IsoPage<Config>::stopAllocating):
(bmalloc::IsoPage<Config>::forEachLiveObject):
* bmalloc/IsoPageTrigger.h: Added.
* bmalloc/IsoTLS.cpp: Added.
(bmalloc::IsoTLS::scavenge):
(bmalloc::IsoTLS::IsoTLS):
(bmalloc::IsoTLS::ensureEntries):
(bmalloc::IsoTLS::destructor):
(bmalloc::IsoTLS::sizeForCapacity):
(bmalloc::IsoTLS::capacityForSize):
(bmalloc::IsoTLS::size):
(bmalloc::IsoTLS::forEachEntry):
* bmalloc/IsoTLS.h: Added.
* bmalloc/IsoTLSAllocatorEntry.h: Added.
* bmalloc/IsoTLSAllocatorEntryInlines.h: Added.
(bmalloc::IsoTLSAllocatorEntry<Config>::IsoTLSAllocatorEntry):
(bmalloc::IsoTLSAllocatorEntry<Config>::~IsoTLSAllocatorEntry):
(bmalloc::IsoTLSAllocatorEntry<Config>::construct):
* bmalloc/IsoTLSDeallocatorEntry.h: Added.
* bmalloc/IsoTLSDeallocatorEntryInlines.h: Added.
(bmalloc::IsoTLSDeallocatorEntry<Config>::IsoTLSDeallocatorEntry):
(bmalloc::IsoTLSDeallocatorEntry<Config>::~IsoTLSDeallocatorEntry):
(bmalloc::IsoTLSDeallocatorEntry<Config>::construct):
* bmalloc/IsoTLSEntry.cpp: Added.
(bmalloc::IsoTLSEntry::IsoTLSEntry):
(bmalloc::IsoTLSEntry::~IsoTLSEntry):
* bmalloc/IsoTLSEntry.h: Added.
(bmalloc::IsoTLSEntry::offset const):
(bmalloc::IsoTLSEntry::alignment const):
(bmalloc::IsoTLSEntry::size const):
(bmalloc::IsoTLSEntry::extent const):
* bmalloc/IsoTLSEntryInlines.h: Added.
(bmalloc::IsoTLSEntry::walkUpToInclusive):
(bmalloc::DefaultIsoTLSEntry<EntryType>::DefaultIsoTLSEntry):
(bmalloc::DefaultIsoTLSEntry<EntryType>::~DefaultIsoTLSEntry):
(bmalloc::DefaultIsoTLSEntry<EntryType>::move):
(bmalloc::DefaultIsoTLSEntry<EntryType>::destruct):
(bmalloc::DefaultIsoTLSEntry<EntryType>::scavenge):
* bmalloc/IsoTLSInlines.h: Added.
(bmalloc::IsoTLS::allocate):
(bmalloc::IsoTLS::deallocate):
(bmalloc::IsoTLS::scavenge):
(bmalloc::IsoTLS::allocator):
(bmalloc::IsoTLS::deallocator):
(bmalloc::IsoTLS::get):
(bmalloc::IsoTLS::set):
(bmalloc::IsoTLS::ensureHeap):
(bmalloc::IsoTLS::ensureHeapAndEntries):
* bmalloc/IsoTLSLayout.cpp: Added.
(bmalloc::IsoTLSLayout::IsoTLSLayout):
(bmalloc::IsoTLSLayout::add):
* bmalloc/IsoTLSLayout.h: Added.
(bmalloc::IsoTLSLayout::head const):
* bmalloc/PerHeapKind.h:
* bmalloc/PerProcess.h:
(bmalloc::PerProcess<T>::getFastCase):
* bmalloc/Scavenger.cpp:
(bmalloc::Scavenger::scavenge):
* bmalloc/Scavenger.h:
* bmalloc/bmalloc.h:
(bmalloc::api::scavengeThisThread):
* test: Added.
* test/testbmalloc.cpp: Added.
(hiddenTruthBecauseNoReturnIsStupid):
(usage):
(assertEmptyPointerSet):
(assertHasObjects):
(assertHasOnlyObjects):
(assertClean):
(testIsoSimple):
(testIsoSimpleScavengeBeforeDealloc):
(testIsoFlipFlopFragmentedPages):
(testIsoFlipFlopFragmentedPagesScavengeInMiddle):
(BisoMalloced::BisoMalloced):
(testBisoMalloced):
(BisoMallocedInline::BisoMallocedInline):
(testBisoMallocedInline):
(run):
(main):

Source/WebCore:

No new tests because no new change in behavior. Though, the bmalloc change has a unit test.

Adopting IsoHeap means dropping in macros in both the .h and .cpp file of each class that we
opt in. It's not pretty, but it helps ensure speedy allocation since it means that we never
have to do any kind of switch or dynamic lookup to find the right allocator for a type.

This change is perf-neutral on MotionMark, PLT3, and membuster.

* Sources.txt:
* html/shadow/SliderThumbElement.cpp:
* html/shadow/SliderThumbElement.h:
* html/shadow/mac/ImageControlsButtonElementMac.cpp:
* html/shadow/mac/ImageControlsRootElementMac.cpp:
* rendering/RenderAttachment.cpp:
* rendering/RenderAttachment.h:
* rendering/RenderBlock.cpp:
* rendering/RenderBlock.h:
* rendering/RenderBlockFlow.cpp:
* rendering/RenderBlockFlow.h:
* rendering/RenderBox.cpp:
* rendering/RenderBox.h:
* rendering/RenderBoxModelObject.cpp:
* rendering/RenderBoxModelObject.h:
* rendering/RenderButton.cpp:
* rendering/RenderButton.h:
* rendering/RenderCombineText.cpp:
* rendering/RenderCombineText.h:
* rendering/RenderCounter.cpp:
* rendering/RenderCounter.h:
* rendering/RenderDeprecatedFlexibleBox.cpp:
* rendering/RenderDeprecatedFlexibleBox.h:
* rendering/RenderDetailsMarker.cpp:
* rendering/RenderDetailsMarker.h:
* rendering/RenderElement.cpp:
* rendering/RenderElement.h:
* rendering/RenderEmbeddedObject.cpp:
* rendering/RenderEmbeddedObject.h:
* rendering/RenderFileUploadControl.cpp:
* rendering/RenderFileUploadControl.h:
* rendering/RenderFlexibleBox.cpp:
* rendering/RenderFlexibleBox.h:
* rendering/RenderFragmentContainer.cpp:
* rendering/RenderFragmentContainer.h:
* rendering/RenderFragmentContainerSet.cpp:
* rendering/RenderFragmentContainerSet.h:
* rendering/RenderFragmentedFlow.cpp:
* rendering/RenderFragmentedFlow.h:
* rendering/RenderFrameBase.cpp:
* rendering/RenderFrameBase.h:
* rendering/RenderFrameSet.cpp:
* rendering/RenderFrameSet.h:
* rendering/RenderFullScreen.cpp:
* rendering/RenderFullScreen.h:
* rendering/RenderGrid.cpp:
* rendering/RenderGrid.h:
* rendering/RenderHTMLCanvas.cpp:
* rendering/RenderHTMLCanvas.h:
* rendering/RenderImage.cpp:
* rendering/RenderImage.h:
* rendering/RenderImageResourceStyleImage.cpp:
* rendering/RenderImageResourceStyleImage.h:
* rendering/RenderInline.cpp:
* rendering/RenderInline.h:
* rendering/RenderLayerModelObject.cpp:
* rendering/RenderLayerModelObject.h:
* rendering/RenderLineBreak.cpp:
* rendering/RenderLineBreak.h:
* rendering/RenderListBox.cpp:
* rendering/RenderListBox.h:
* rendering/RenderListItem.cpp:
* rendering/RenderListItem.h:
* rendering/RenderListMarker.cpp:
* rendering/RenderListMarker.h:
* rendering/RenderMedia.cpp:
* rendering/RenderMedia.h:
* rendering/RenderMediaControlElements.cpp:
* rendering/RenderMediaControlElements.h:
* rendering/RenderMenuList.cpp:
* rendering/RenderMenuList.h:
* rendering/RenderMeter.cpp:
* rendering/RenderMeter.h:
* rendering/RenderMultiColumnFlow.cpp:
* rendering/RenderMultiColumnFlow.h:
* rendering/RenderMultiColumnSet.cpp:
* rendering/RenderMultiColumnSet.h:
* rendering/RenderMultiColumnSpannerPlaceholder.cpp:
* rendering/RenderMultiColumnSpannerPlaceholder.h:
* rendering/RenderObject.cpp:
* rendering/RenderObject.h:
* rendering/RenderProgress.cpp:
* rendering/RenderProgress.h:
* rendering/RenderQuote.cpp:
* rendering/RenderQuote.h:
* rendering/RenderReplaced.cpp:
* rendering/RenderReplaced.h:
* rendering/RenderReplica.cpp:
* rendering/RenderReplica.h:
* rendering/RenderRuby.cpp:
* rendering/RenderRuby.h:
* rendering/RenderRubyBase.cpp:
* rendering/RenderRubyBase.h:
* rendering/RenderRubyRun.cpp:
* rendering/RenderRubyRun.h:
* rendering/RenderRubyText.cpp:
* rendering/RenderRubyText.h:
* rendering/RenderScrollbarPart.cpp:
* rendering/RenderScrollbarPart.h:
* rendering/RenderSearchField.cpp:
* rendering/RenderSearchField.h:
* rendering/RenderSlider.cpp:
* rendering/RenderSlider.h:
* rendering/RenderTable.cpp:
* rendering/RenderTable.h:
* rendering/RenderTableCaption.cpp:
* rendering/RenderTableCaption.h:
* rendering/RenderTableCell.cpp:
* rendering/RenderTableCell.h:
* rendering/RenderTableCol.cpp:
* rendering/RenderTableCol.h:
* rendering/RenderTableRow.cpp:
* rendering/RenderTableRow.h:
* rendering/RenderTableSection.cpp:
* rendering/RenderTableSection.h:
* rendering/RenderText.cpp:
* rendering/RenderText.h:
* rendering/RenderTextControl.cpp:
* rendering/RenderTextControl.h:
* rendering/RenderTextControlMultiLine.cpp:
* rendering/RenderTextControlMultiLine.h:
* rendering/RenderTextControlSingleLine.cpp:
* rendering/RenderTextControlSingleLine.h:
* rendering/RenderTextFragment.cpp:
* rendering/RenderTextFragment.h:
* rendering/RenderVTTCue.cpp:
* rendering/RenderVTTCue.h:
* rendering/RenderVideo.cpp:
* rendering/RenderVideo.h:
* rendering/RenderView.cpp:
* rendering/RenderView.h:
* rendering/RenderWidget.cpp:
* rendering/RenderWidget.h:
* rendering/mathml/RenderMathMLBlock.cpp:
* rendering/mathml/RenderMathMLBlock.h:
* rendering/mathml/RenderMathMLFenced.cpp:
* rendering/mathml/RenderMathMLFenced.h:
* rendering/mathml/RenderMathMLFencedOperator.cpp:
* rendering/mathml/RenderMathMLFencedOperator.h:
* rendering/mathml/RenderMathMLFraction.cpp:
* rendering/mathml/RenderMathMLFraction.h:
* rendering/mathml/RenderMathMLMath.cpp:
* rendering/mathml/RenderMathMLMath.h:
* rendering/mathml/RenderMathMLMenclose.cpp:
* rendering/mathml/RenderMathMLMenclose.h:
* rendering/mathml/RenderMathMLOperator.cpp:
* rendering/mathml/RenderMathMLOperator.h:
* rendering/mathml/RenderMathMLPadded.cpp:
* rendering/mathml/RenderMathMLPadded.h:
* rendering/mathml/RenderMathMLRoot.cpp:
* rendering/mathml/RenderMathMLRoot.h:
* rendering/mathml/RenderMathMLRow.cpp:
* rendering/mathml/RenderMathMLRow.h:
* rendering/mathml/RenderMathMLScripts.cpp:
* rendering/mathml/RenderMathMLScripts.h:
* rendering/mathml/RenderMathMLSpace.cpp:
* rendering/mathml/RenderMathMLSpace.h:
* rendering/mathml/RenderMathMLToken.cpp:
* rendering/mathml/RenderMathMLToken.h:
* rendering/mathml/RenderMathMLUnderOver.cpp:
* rendering/mathml/RenderMathMLUnderOver.h:
* rendering/svg/RenderSVGBlock.cpp:
* rendering/svg/RenderSVGBlock.h:
* rendering/svg/RenderSVGContainer.cpp:
* rendering/svg/RenderSVGContainer.h:
* rendering/svg/RenderSVGEllipse.cpp:
* rendering/svg/RenderSVGEllipse.h:
* rendering/svg/RenderSVGForeignObject.cpp:
* rendering/svg/RenderSVGForeignObject.h:
* rendering/svg/RenderSVGGradientStop.cpp:
* rendering/svg/RenderSVGGradientStop.h:
* rendering/svg/RenderSVGHiddenContainer.cpp:
* rendering/svg/RenderSVGHiddenContainer.h:
* rendering/svg/RenderSVGImage.cpp:
* rendering/svg/RenderSVGImage.h:
* rendering/svg/RenderSVGInline.cpp:
* rendering/svg/RenderSVGInline.h:
* rendering/svg/RenderSVGInlineText.cpp:
* rendering/svg/RenderSVGInlineText.h:
* rendering/svg/RenderSVGModelObject.cpp:
* rendering/svg/RenderSVGModelObject.h:
* rendering/svg/RenderSVGPath.cpp:
* rendering/svg/RenderSVGPath.h:
* rendering/svg/RenderSVGRect.cpp:
* rendering/svg/RenderSVGRect.h:
* rendering/svg/RenderSVGResourceClipper.cpp:
* rendering/svg/RenderSVGResourceClipper.h:
* rendering/svg/RenderSVGResourceContainer.cpp:
* rendering/svg/RenderSVGResourceContainer.h:
* rendering/svg/RenderSVGResourceFilter.cpp:
* rendering/svg/RenderSVGResourceFilter.h:
* rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
* rendering/svg/RenderSVGResourceFilterPrimitive.h:
* rendering/svg/RenderSVGResourceGradient.cpp:
* rendering/svg/RenderSVGResourceGradient.h:
* rendering/svg/RenderSVGResourceLinearGradient.cpp:
* rendering/svg/RenderSVGResourceLinearGradient.h:
* rendering/svg/RenderSVGResourceMarker.cpp:
* rendering/svg/RenderSVGResourceMarker.h:
* rendering/svg/RenderSVGResourceMasker.cpp:
* rendering/svg/RenderSVGResourceMasker.h:
* rendering/svg/RenderSVGResourcePattern.cpp:
* rendering/svg/RenderSVGResourcePattern.h:
* rendering/svg/RenderSVGResourceRadialGradient.cpp:
* rendering/svg/RenderSVGResourceRadialGradient.h:
* rendering/svg/RenderSVGRoot.cpp:
* rendering/svg/RenderSVGRoot.h:
* rendering/svg/RenderSVGShape.cpp:
* rendering/svg/RenderSVGShape.h:
* rendering/svg/RenderSVGTSpan.cpp: Added.
* rendering/svg/RenderSVGTSpan.h:
* rendering/svg/RenderSVGText.cpp:
* rendering/svg/RenderSVGText.h:
* rendering/svg/RenderSVGTextPath.cpp:
* rendering/svg/RenderSVGTextPath.h:
* rendering/svg/RenderSVGTransformableContainer.cpp:
* rendering/svg/RenderSVGTransformableContainer.h:
* rendering/svg/RenderSVGViewportContainer.cpp:
* rendering/svg/RenderSVGViewportContainer.h:

Source/WTF:

This just adds an easy way of using the bmalloc IsoHeap API in WebKit. If bmalloc is not
enabled, these macros will just make the object FastMalloced.

* WTF.xcodeproj/project.pbxproj:
* wtf/FastTLS.h:
* wtf/IsoMalloc.h: Added.
* wtf/IsoMallocInlines.h: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@224537 268f45cc-cd09-0410-ab3c-d52691b4dbfc

286 files changed:
Source/WTF/ChangeLog
Source/WTF/WTF.xcodeproj/project.pbxproj
Source/WTF/wtf/FastTLS.h
Source/WTF/wtf/IsoMalloc.h [new file with mode: 0644]
Source/WTF/wtf/IsoMallocInlines.h [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/Sources.txt
Source/WebCore/html/shadow/SliderThumbElement.cpp
Source/WebCore/html/shadow/SliderThumbElement.h
Source/WebCore/html/shadow/mac/ImageControlsButtonElementMac.cpp
Source/WebCore/html/shadow/mac/ImageControlsRootElementMac.cpp
Source/WebCore/rendering/RenderAttachment.cpp
Source/WebCore/rendering/RenderAttachment.h
Source/WebCore/rendering/RenderBlock.cpp
Source/WebCore/rendering/RenderBlock.h
Source/WebCore/rendering/RenderBlockFlow.cpp
Source/WebCore/rendering/RenderBlockFlow.h
Source/WebCore/rendering/RenderBox.cpp
Source/WebCore/rendering/RenderBox.h
Source/WebCore/rendering/RenderBoxModelObject.cpp
Source/WebCore/rendering/RenderBoxModelObject.h
Source/WebCore/rendering/RenderButton.cpp
Source/WebCore/rendering/RenderButton.h
Source/WebCore/rendering/RenderCombineText.cpp
Source/WebCore/rendering/RenderCombineText.h
Source/WebCore/rendering/RenderCounter.cpp
Source/WebCore/rendering/RenderCounter.h
Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp
Source/WebCore/rendering/RenderDeprecatedFlexibleBox.h
Source/WebCore/rendering/RenderDetailsMarker.cpp
Source/WebCore/rendering/RenderDetailsMarker.h
Source/WebCore/rendering/RenderElement.cpp
Source/WebCore/rendering/RenderElement.h
Source/WebCore/rendering/RenderEmbeddedObject.cpp
Source/WebCore/rendering/RenderEmbeddedObject.h
Source/WebCore/rendering/RenderFileUploadControl.cpp
Source/WebCore/rendering/RenderFileUploadControl.h
Source/WebCore/rendering/RenderFlexibleBox.cpp
Source/WebCore/rendering/RenderFlexibleBox.h
Source/WebCore/rendering/RenderFragmentContainer.cpp
Source/WebCore/rendering/RenderFragmentContainer.h
Source/WebCore/rendering/RenderFragmentContainerSet.cpp
Source/WebCore/rendering/RenderFragmentContainerSet.h
Source/WebCore/rendering/RenderFragmentedFlow.cpp
Source/WebCore/rendering/RenderFragmentedFlow.h
Source/WebCore/rendering/RenderFrameBase.cpp
Source/WebCore/rendering/RenderFrameBase.h
Source/WebCore/rendering/RenderFrameSet.cpp
Source/WebCore/rendering/RenderFrameSet.h
Source/WebCore/rendering/RenderFullScreen.cpp
Source/WebCore/rendering/RenderFullScreen.h
Source/WebCore/rendering/RenderGrid.cpp
Source/WebCore/rendering/RenderGrid.h
Source/WebCore/rendering/RenderHTMLCanvas.cpp
Source/WebCore/rendering/RenderHTMLCanvas.h
Source/WebCore/rendering/RenderImage.cpp
Source/WebCore/rendering/RenderImage.h
Source/WebCore/rendering/RenderImageResource.cpp
Source/WebCore/rendering/RenderImageResource.h
Source/WebCore/rendering/RenderImageResourceStyleImage.cpp
Source/WebCore/rendering/RenderImageResourceStyleImage.h
Source/WebCore/rendering/RenderInline.cpp
Source/WebCore/rendering/RenderInline.h
Source/WebCore/rendering/RenderLayerModelObject.cpp
Source/WebCore/rendering/RenderLayerModelObject.h
Source/WebCore/rendering/RenderLineBreak.cpp
Source/WebCore/rendering/RenderLineBreak.h
Source/WebCore/rendering/RenderListBox.cpp
Source/WebCore/rendering/RenderListBox.h
Source/WebCore/rendering/RenderListItem.cpp
Source/WebCore/rendering/RenderListItem.h
Source/WebCore/rendering/RenderListMarker.cpp
Source/WebCore/rendering/RenderListMarker.h
Source/WebCore/rendering/RenderMedia.cpp
Source/WebCore/rendering/RenderMedia.h
Source/WebCore/rendering/RenderMediaControlElements.cpp
Source/WebCore/rendering/RenderMediaControlElements.h
Source/WebCore/rendering/RenderMenuList.cpp
Source/WebCore/rendering/RenderMenuList.h
Source/WebCore/rendering/RenderMeter.cpp
Source/WebCore/rendering/RenderMeter.h
Source/WebCore/rendering/RenderMultiColumnFlow.cpp
Source/WebCore/rendering/RenderMultiColumnFlow.h
Source/WebCore/rendering/RenderMultiColumnSet.cpp
Source/WebCore/rendering/RenderMultiColumnSet.h
Source/WebCore/rendering/RenderMultiColumnSpannerPlaceholder.cpp
Source/WebCore/rendering/RenderMultiColumnSpannerPlaceholder.h
Source/WebCore/rendering/RenderObject.cpp
Source/WebCore/rendering/RenderObject.h
Source/WebCore/rendering/RenderProgress.cpp
Source/WebCore/rendering/RenderProgress.h
Source/WebCore/rendering/RenderQuote.cpp
Source/WebCore/rendering/RenderQuote.h
Source/WebCore/rendering/RenderReplaced.cpp
Source/WebCore/rendering/RenderReplaced.h
Source/WebCore/rendering/RenderReplica.cpp
Source/WebCore/rendering/RenderReplica.h
Source/WebCore/rendering/RenderRuby.cpp
Source/WebCore/rendering/RenderRuby.h
Source/WebCore/rendering/RenderRubyBase.cpp
Source/WebCore/rendering/RenderRubyBase.h
Source/WebCore/rendering/RenderRubyRun.cpp
Source/WebCore/rendering/RenderRubyRun.h
Source/WebCore/rendering/RenderRubyText.cpp
Source/WebCore/rendering/RenderRubyText.h
Source/WebCore/rendering/RenderScrollbarPart.cpp
Source/WebCore/rendering/RenderScrollbarPart.h
Source/WebCore/rendering/RenderSearchField.cpp
Source/WebCore/rendering/RenderSearchField.h
Source/WebCore/rendering/RenderSlider.cpp
Source/WebCore/rendering/RenderSlider.h
Source/WebCore/rendering/RenderTable.cpp
Source/WebCore/rendering/RenderTable.h
Source/WebCore/rendering/RenderTableCaption.cpp
Source/WebCore/rendering/RenderTableCaption.h
Source/WebCore/rendering/RenderTableCell.cpp
Source/WebCore/rendering/RenderTableCell.h
Source/WebCore/rendering/RenderTableCol.cpp
Source/WebCore/rendering/RenderTableCol.h
Source/WebCore/rendering/RenderTableRow.cpp
Source/WebCore/rendering/RenderTableRow.h
Source/WebCore/rendering/RenderTableSection.cpp
Source/WebCore/rendering/RenderTableSection.h
Source/WebCore/rendering/RenderText.cpp
Source/WebCore/rendering/RenderText.h
Source/WebCore/rendering/RenderTextControl.cpp
Source/WebCore/rendering/RenderTextControl.h
Source/WebCore/rendering/RenderTextControlMultiLine.cpp
Source/WebCore/rendering/RenderTextControlMultiLine.h
Source/WebCore/rendering/RenderTextControlSingleLine.cpp
Source/WebCore/rendering/RenderTextControlSingleLine.h
Source/WebCore/rendering/RenderTextFragment.cpp
Source/WebCore/rendering/RenderTextFragment.h
Source/WebCore/rendering/RenderVTTCue.cpp
Source/WebCore/rendering/RenderVTTCue.h
Source/WebCore/rendering/RenderVideo.cpp
Source/WebCore/rendering/RenderVideo.h
Source/WebCore/rendering/RenderView.cpp
Source/WebCore/rendering/RenderView.h
Source/WebCore/rendering/RenderWidget.cpp
Source/WebCore/rendering/RenderWidget.h
Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp
Source/WebCore/rendering/mathml/RenderMathMLBlock.h
Source/WebCore/rendering/mathml/RenderMathMLFenced.cpp
Source/WebCore/rendering/mathml/RenderMathMLFenced.h
Source/WebCore/rendering/mathml/RenderMathMLFencedOperator.cpp
Source/WebCore/rendering/mathml/RenderMathMLFencedOperator.h
Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp
Source/WebCore/rendering/mathml/RenderMathMLFraction.h
Source/WebCore/rendering/mathml/RenderMathMLMath.cpp
Source/WebCore/rendering/mathml/RenderMathMLMath.h
Source/WebCore/rendering/mathml/RenderMathMLMenclose.cpp
Source/WebCore/rendering/mathml/RenderMathMLMenclose.h
Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp
Source/WebCore/rendering/mathml/RenderMathMLOperator.h
Source/WebCore/rendering/mathml/RenderMathMLPadded.cpp
Source/WebCore/rendering/mathml/RenderMathMLPadded.h
Source/WebCore/rendering/mathml/RenderMathMLRoot.cpp
Source/WebCore/rendering/mathml/RenderMathMLRoot.h
Source/WebCore/rendering/mathml/RenderMathMLRow.cpp
Source/WebCore/rendering/mathml/RenderMathMLRow.h
Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp
Source/WebCore/rendering/mathml/RenderMathMLScripts.h
Source/WebCore/rendering/mathml/RenderMathMLSpace.cpp
Source/WebCore/rendering/mathml/RenderMathMLSpace.h
Source/WebCore/rendering/mathml/RenderMathMLToken.cpp
Source/WebCore/rendering/mathml/RenderMathMLToken.h
Source/WebCore/rendering/mathml/RenderMathMLUnderOver.cpp
Source/WebCore/rendering/mathml/RenderMathMLUnderOver.h
Source/WebCore/rendering/svg/RenderSVGBlock.cpp
Source/WebCore/rendering/svg/RenderSVGBlock.h
Source/WebCore/rendering/svg/RenderSVGContainer.cpp
Source/WebCore/rendering/svg/RenderSVGContainer.h
Source/WebCore/rendering/svg/RenderSVGEllipse.cpp
Source/WebCore/rendering/svg/RenderSVGEllipse.h
Source/WebCore/rendering/svg/RenderSVGForeignObject.cpp
Source/WebCore/rendering/svg/RenderSVGForeignObject.h
Source/WebCore/rendering/svg/RenderSVGGradientStop.cpp
Source/WebCore/rendering/svg/RenderSVGGradientStop.h
Source/WebCore/rendering/svg/RenderSVGHiddenContainer.cpp
Source/WebCore/rendering/svg/RenderSVGHiddenContainer.h
Source/WebCore/rendering/svg/RenderSVGImage.cpp
Source/WebCore/rendering/svg/RenderSVGImage.h
Source/WebCore/rendering/svg/RenderSVGInline.cpp
Source/WebCore/rendering/svg/RenderSVGInline.h
Source/WebCore/rendering/svg/RenderSVGInlineText.cpp
Source/WebCore/rendering/svg/RenderSVGInlineText.h
Source/WebCore/rendering/svg/RenderSVGModelObject.cpp
Source/WebCore/rendering/svg/RenderSVGModelObject.h
Source/WebCore/rendering/svg/RenderSVGPath.cpp
Source/WebCore/rendering/svg/RenderSVGPath.h
Source/WebCore/rendering/svg/RenderSVGRect.cpp
Source/WebCore/rendering/svg/RenderSVGRect.h
Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp
Source/WebCore/rendering/svg/RenderSVGResourceClipper.h
Source/WebCore/rendering/svg/RenderSVGResourceContainer.cpp
Source/WebCore/rendering/svg/RenderSVGResourceContainer.h
Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp
Source/WebCore/rendering/svg/RenderSVGResourceFilter.h
Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.cpp
Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.h
Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp
Source/WebCore/rendering/svg/RenderSVGResourceGradient.h
Source/WebCore/rendering/svg/RenderSVGResourceLinearGradient.cpp
Source/WebCore/rendering/svg/RenderSVGResourceLinearGradient.h
Source/WebCore/rendering/svg/RenderSVGResourceMarker.cpp
Source/WebCore/rendering/svg/RenderSVGResourceMarker.h
Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp
Source/WebCore/rendering/svg/RenderSVGResourceMasker.h
Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp
Source/WebCore/rendering/svg/RenderSVGResourcePattern.h
Source/WebCore/rendering/svg/RenderSVGResourceRadialGradient.cpp
Source/WebCore/rendering/svg/RenderSVGResourceRadialGradient.h
Source/WebCore/rendering/svg/RenderSVGRoot.cpp
Source/WebCore/rendering/svg/RenderSVGRoot.h
Source/WebCore/rendering/svg/RenderSVGShape.cpp
Source/WebCore/rendering/svg/RenderSVGShape.h
Source/WebCore/rendering/svg/RenderSVGTSpan.cpp [new file with mode: 0644]
Source/WebCore/rendering/svg/RenderSVGTSpan.h
Source/WebCore/rendering/svg/RenderSVGText.cpp
Source/WebCore/rendering/svg/RenderSVGText.h
Source/WebCore/rendering/svg/RenderSVGTextPath.cpp
Source/WebCore/rendering/svg/RenderSVGTextPath.h
Source/WebCore/rendering/svg/RenderSVGTransformableContainer.cpp
Source/WebCore/rendering/svg/RenderSVGTransformableContainer.h
Source/WebCore/rendering/svg/RenderSVGViewportContainer.cpp
Source/WebCore/rendering/svg/RenderSVGViewportContainer.h
Source/bmalloc/CMakeLists.txt
Source/bmalloc/ChangeLog
Source/bmalloc/bmalloc.xcodeproj/project.pbxproj
Source/bmalloc/bmalloc/Algorithm.h
Source/bmalloc/bmalloc/AllIsoHeaps.cpp [new file with mode: 0644]
Source/bmalloc/bmalloc/AllIsoHeaps.h [new file with mode: 0644]
Source/bmalloc/bmalloc/AllIsoHeapsInlines.h [new file with mode: 0644]
Source/bmalloc/bmalloc/BMalloced.h [new file with mode: 0644]
Source/bmalloc/bmalloc/Bits.h [new file with mode: 0644]
Source/bmalloc/bmalloc/CryptoRandom.cpp
Source/bmalloc/bmalloc/CryptoRandom.h
Source/bmalloc/bmalloc/DeferredDecommit.h [new file with mode: 0644]
Source/bmalloc/bmalloc/DeferredDecommitInlines.h [new file with mode: 0644]
Source/bmalloc/bmalloc/DeferredTrigger.h [new file with mode: 0644]
Source/bmalloc/bmalloc/DeferredTriggerInlines.h [new file with mode: 0644]
Source/bmalloc/bmalloc/EligibilityResult.h [new file with mode: 0644]
Source/bmalloc/bmalloc/EligibilityResultInlines.h [new file with mode: 0644]
Source/bmalloc/bmalloc/FixedVector.h
Source/bmalloc/bmalloc/FreeList.cpp [new file with mode: 0644]
Source/bmalloc/bmalloc/FreeList.h [new file with mode: 0644]
Source/bmalloc/bmalloc/FreeListInlines.h [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoAllocator.h [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoAllocatorInlines.h [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoConfig.h [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoDeallocator.h [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoDeallocatorInlines.h [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoDirectory.h [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoDirectoryInlines.h [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoDirectoryPage.h [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoDirectoryPageInlines.h [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoHeap.h [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoHeapImpl.cpp [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoHeapImpl.h [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoHeapImplInlines.h [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoHeapInlines.h [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoPage.h [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoPageInlines.h [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoPageTrigger.h [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoTLS.cpp [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoTLS.h [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoTLSAllocatorEntry.h [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoTLSAllocatorEntryInlines.h [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoTLSDeallocatorEntry.h [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoTLSDeallocatorEntryInlines.h [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoTLSEntry.cpp [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoTLSEntry.h [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoTLSEntryInlines.h [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoTLSInlines.h [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoTLSLayout.cpp [new file with mode: 0644]
Source/bmalloc/bmalloc/IsoTLSLayout.h [new file with mode: 0644]
Source/bmalloc/bmalloc/Logging.h
Source/bmalloc/bmalloc/PerHeapKind.h
Source/bmalloc/bmalloc/PerProcess.h
Source/bmalloc/bmalloc/Scavenger.cpp
Source/bmalloc/bmalloc/Scavenger.h
Source/bmalloc/bmalloc/StaticMutex.h
Source/bmalloc/bmalloc/bmalloc.cpp [new file with mode: 0644]
Source/bmalloc/bmalloc/bmalloc.h
Source/bmalloc/test/testbmalloc.cpp [new file with mode: 0644]

index 407ddfa..b0ce219 100644 (file)
@@ -1,3 +1,18 @@
+2017-10-31  Filip Pizlo  <fpizlo@apple.com>
+
+        bmalloc should support strictly type-segregated isolated heaps
+        https://bugs.webkit.org/show_bug.cgi?id=178108
+
+        Reviewed by Saam Barati, Simon Fraser, and Ryosuke Niwa.
+        
+        This just adds an easy way of using the bmalloc IsoHeap API in WebKit. If bmalloc is not
+        enabled, these macros will just make the object FastMalloced.
+
+        * WTF.xcodeproj/project.pbxproj:
+        * wtf/FastTLS.h:
+        * wtf/IsoMalloc.h: Added.
+        * wtf/IsoMallocInlines.h: Added.
+
 2017-11-06  Christopher Reid  <chris.reid@sony.com>
 
         Use enum classes within FileSystem
index 9b881ac..0b559a1 100644 (file)
                0F725CAB1C50461600AD943A /* RangeSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RangeSet.h; sourceTree = "<group>"; };
                0F79C7C31E73511800EB34D1 /* FastTLS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FastTLS.h; sourceTree = "<group>"; };
                0F7C5FB51D885CF20044F5E2 /* FastBitVector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FastBitVector.cpp; sourceTree = "<group>"; };
+               0F7EB85B1FA8FF4100F1ABCB /* IsoMalloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IsoMalloc.h; sourceTree = "<group>"; };
+               0F7EB85C1FA8FF4200F1ABCB /* IsoMallocInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IsoMallocInlines.h; sourceTree = "<group>"; };
                0F824A641B7443A0002E345D /* ParkingLot.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ParkingLot.cpp; sourceTree = "<group>"; };
                0F824A651B7443A0002E345D /* ParkingLot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ParkingLot.h; sourceTree = "<group>"; };
                0F87105916643F190090B0AD /* RawPointer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RawPointer.h; sourceTree = "<group>"; };
                                A8A472BC151A825A004123FF /* InlineASM.h */,
                                A70DA0821799F04D00529A9B /* Insertion.h */,
                                5182C22C1F2BC7E60059BA7C /* InstanceCounted.h */,
+                               0F7EB85B1FA8FF4100F1ABCB /* IsoMalloc.h */,
+                               0F7EB85C1FA8FF4200F1ABCB /* IsoMallocInlines.h */,
                                7CDD7FF7186D291E007433CD /* IteratorAdaptors.h */,
                                7CDD7FF9186D2A54007433CD /* IteratorRange.h */,
                                7C9692941F66306E00267A9E /* KeyValuePair.h */,
index b44329f..b57ae0f 100644 (file)
 
 namespace WTF {
 
-// __PTK_FRAMEWORK_JAVASCRIPTCORE_KEY0 is taken by bmalloc, so WTF's KEY0 maps to the
-// system's KEY1.
-#define WTF_FAST_TLS_KEY0 __PTK_FRAMEWORK_JAVASCRIPTCORE_KEY1
-#define WTF_FAST_TLS_KEY1 __PTK_FRAMEWORK_JAVASCRIPTCORE_KEY2
-#define WTF_FAST_TLS_KEY2 __PTK_FRAMEWORK_JAVASCRIPTCORE_KEY3
-#define WTF_FAST_TLS_KEY3 __PTK_FRAMEWORK_JAVASCRIPTCORE_KEY4
+// __PTK_FRAMEWORK_JAVASCRIPTCORE_KEY0-1 is taken by bmalloc, so WTF's KEY0 maps to the
+// system's KEY2.
+#define WTF_FAST_TLS_KEY0 __PTK_FRAMEWORK_JAVASCRIPTCORE_KEY2
+#define WTF_FAST_TLS_KEY1 __PTK_FRAMEWORK_JAVASCRIPTCORE_KEY3
+#define WTF_FAST_TLS_KEY2 __PTK_FRAMEWORK_JAVASCRIPTCORE_KEY4
 
 // NOTE: We should manage our use of these keys here. If you want to use a key for something,
 // put a #define in here to give your key a symbolic name. This ensures that we don't
@@ -46,7 +45,7 @@ namespace WTF {
 
 #define WTF_THREAD_DATA_KEY WTF_FAST_TLS_KEY0
 #define WTF_WASM_CONTEXT_KEY WTF_FAST_TLS_KEY1
-#define WTF_TESTING_KEY WTF_FAST_TLS_KEY3
+#define WTF_TESTING_KEY WTF_FAST_TLS_KEY2
 
 #if ENABLE(FAST_TLS_JIT)
 inline unsigned fastTLSOffsetForKey(unsigned long slot)
diff --git a/Source/WTF/wtf/IsoMalloc.h b/Source/WTF/wtf/IsoMalloc.h
new file mode 100644 (file)
index 0000000..1a60179
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#pragma once
+
+#if defined(USE_SYSTEM_MALLOC) && USE_SYSTEM_MALLOC
+
+#include <wtf/FastMalloc.h>
+
+#define WTF_MAKE_ISO_ALLOCATED(name) WTF_MAKE_FAST_ALLOCATED
+
+#else
+
+#include <bmalloc/IsoHeap.h>
+
+#define WTF_MAKE_ISO_ALLOCATED(name) MAKE_BISO_MALLOCED(name)
+
+#endif
+
diff --git a/Source/WTF/wtf/IsoMallocInlines.h b/Source/WTF/wtf/IsoMallocInlines.h
new file mode 100644 (file)
index 0000000..367bbcc
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#pragma once
+
+#if defined(USE_SYSTEM_MALLOC) && USE_SYSTEM_MALLOC
+
+#include <wtf/FastMalloc.h>
+
+#define WTF_MAKE_ISO_ALLOCATED_INLINE(name) WTF_MAKE_FAST_ALLOCATED
+#define WTF_MAKE_ISO_ALLOCATED_IMPL(name) struct WTFIsoMallocSemicolonifier##name { }
+
+#else
+
+#include <bmalloc/IsoHeapInlines.h>
+
+#define WTF_MAKE_ISO_ALLOCATED_INLINE(name) MAKE_BISO_MALLOCED_INLINE(name)
+#define WTF_MAKE_ISO_ALLOCATED_IMPL(name) MAKE_BISO_MALLOCED_IMPL(name)
+
+#endif
+
index 0f1f099..a6245bf 100644 (file)
@@ -1,3 +1,238 @@
+2017-10-31  Filip Pizlo  <fpizlo@apple.com>
+
+        bmalloc should support strictly type-segregated isolated heaps
+        https://bugs.webkit.org/show_bug.cgi?id=178108
+
+        Reviewed by Saam Barati, Simon Fraser, and Ryosuke Niwa.
+
+        No new tests because no new change in behavior. Though, the bmalloc change has a unit test.
+        
+        Adopting IsoHeap means dropping in macros in both the .h and .cpp file of each class that we
+        opt in. It's not pretty, but it helps ensure speedy allocation since it means that we never
+        have to do any kind of switch or dynamic lookup to find the right allocator for a type.
+        
+        This change is perf-neutral on MotionMark, PLT3, and membuster.
+
+        * Sources.txt:
+        * html/shadow/SliderThumbElement.cpp:
+        * html/shadow/SliderThumbElement.h:
+        * html/shadow/mac/ImageControlsButtonElementMac.cpp:
+        * html/shadow/mac/ImageControlsRootElementMac.cpp:
+        * rendering/RenderAttachment.cpp:
+        * rendering/RenderAttachment.h:
+        * rendering/RenderBlock.cpp:
+        * rendering/RenderBlock.h:
+        * rendering/RenderBlockFlow.cpp:
+        * rendering/RenderBlockFlow.h:
+        * rendering/RenderBox.cpp:
+        * rendering/RenderBox.h:
+        * rendering/RenderBoxModelObject.cpp:
+        * rendering/RenderBoxModelObject.h:
+        * rendering/RenderButton.cpp:
+        * rendering/RenderButton.h:
+        * rendering/RenderCombineText.cpp:
+        * rendering/RenderCombineText.h:
+        * rendering/RenderCounter.cpp:
+        * rendering/RenderCounter.h:
+        * rendering/RenderDeprecatedFlexibleBox.cpp:
+        * rendering/RenderDeprecatedFlexibleBox.h:
+        * rendering/RenderDetailsMarker.cpp:
+        * rendering/RenderDetailsMarker.h:
+        * rendering/RenderElement.cpp:
+        * rendering/RenderElement.h:
+        * rendering/RenderEmbeddedObject.cpp:
+        * rendering/RenderEmbeddedObject.h:
+        * rendering/RenderFileUploadControl.cpp:
+        * rendering/RenderFileUploadControl.h:
+        * rendering/RenderFlexibleBox.cpp:
+        * rendering/RenderFlexibleBox.h:
+        * rendering/RenderFragmentContainer.cpp:
+        * rendering/RenderFragmentContainer.h:
+        * rendering/RenderFragmentContainerSet.cpp:
+        * rendering/RenderFragmentContainerSet.h:
+        * rendering/RenderFragmentedFlow.cpp:
+        * rendering/RenderFragmentedFlow.h:
+        * rendering/RenderFrameBase.cpp:
+        * rendering/RenderFrameBase.h:
+        * rendering/RenderFrameSet.cpp:
+        * rendering/RenderFrameSet.h:
+        * rendering/RenderFullScreen.cpp:
+        * rendering/RenderFullScreen.h:
+        * rendering/RenderGrid.cpp:
+        * rendering/RenderGrid.h:
+        * rendering/RenderHTMLCanvas.cpp:
+        * rendering/RenderHTMLCanvas.h:
+        * rendering/RenderImage.cpp:
+        * rendering/RenderImage.h:
+        * rendering/RenderImageResourceStyleImage.cpp:
+        * rendering/RenderImageResourceStyleImage.h:
+        * rendering/RenderInline.cpp:
+        * rendering/RenderInline.h:
+        * rendering/RenderLayerModelObject.cpp:
+        * rendering/RenderLayerModelObject.h:
+        * rendering/RenderLineBreak.cpp:
+        * rendering/RenderLineBreak.h:
+        * rendering/RenderListBox.cpp:
+        * rendering/RenderListBox.h:
+        * rendering/RenderListItem.cpp:
+        * rendering/RenderListItem.h:
+        * rendering/RenderListMarker.cpp:
+        * rendering/RenderListMarker.h:
+        * rendering/RenderMedia.cpp:
+        * rendering/RenderMedia.h:
+        * rendering/RenderMediaControlElements.cpp:
+        * rendering/RenderMediaControlElements.h:
+        * rendering/RenderMenuList.cpp:
+        * rendering/RenderMenuList.h:
+        * rendering/RenderMeter.cpp:
+        * rendering/RenderMeter.h:
+        * rendering/RenderMultiColumnFlow.cpp:
+        * rendering/RenderMultiColumnFlow.h:
+        * rendering/RenderMultiColumnSet.cpp:
+        * rendering/RenderMultiColumnSet.h:
+        * rendering/RenderMultiColumnSpannerPlaceholder.cpp:
+        * rendering/RenderMultiColumnSpannerPlaceholder.h:
+        * rendering/RenderObject.cpp:
+        * rendering/RenderObject.h:
+        * rendering/RenderProgress.cpp:
+        * rendering/RenderProgress.h:
+        * rendering/RenderQuote.cpp:
+        * rendering/RenderQuote.h:
+        * rendering/RenderReplaced.cpp:
+        * rendering/RenderReplaced.h:
+        * rendering/RenderReplica.cpp:
+        * rendering/RenderReplica.h:
+        * rendering/RenderRuby.cpp:
+        * rendering/RenderRuby.h:
+        * rendering/RenderRubyBase.cpp:
+        * rendering/RenderRubyBase.h:
+        * rendering/RenderRubyRun.cpp:
+        * rendering/RenderRubyRun.h:
+        * rendering/RenderRubyText.cpp:
+        * rendering/RenderRubyText.h:
+        * rendering/RenderScrollbarPart.cpp:
+        * rendering/RenderScrollbarPart.h:
+        * rendering/RenderSearchField.cpp:
+        * rendering/RenderSearchField.h:
+        * rendering/RenderSlider.cpp:
+        * rendering/RenderSlider.h:
+        * rendering/RenderTable.cpp:
+        * rendering/RenderTable.h:
+        * rendering/RenderTableCaption.cpp:
+        * rendering/RenderTableCaption.h:
+        * rendering/RenderTableCell.cpp:
+        * rendering/RenderTableCell.h:
+        * rendering/RenderTableCol.cpp:
+        * rendering/RenderTableCol.h:
+        * rendering/RenderTableRow.cpp:
+        * rendering/RenderTableRow.h:
+        * rendering/RenderTableSection.cpp:
+        * rendering/RenderTableSection.h:
+        * rendering/RenderText.cpp:
+        * rendering/RenderText.h:
+        * rendering/RenderTextControl.cpp:
+        * rendering/RenderTextControl.h:
+        * rendering/RenderTextControlMultiLine.cpp:
+        * rendering/RenderTextControlMultiLine.h:
+        * rendering/RenderTextControlSingleLine.cpp:
+        * rendering/RenderTextControlSingleLine.h:
+        * rendering/RenderTextFragment.cpp:
+        * rendering/RenderTextFragment.h:
+        * rendering/RenderVTTCue.cpp:
+        * rendering/RenderVTTCue.h:
+        * rendering/RenderVideo.cpp:
+        * rendering/RenderVideo.h:
+        * rendering/RenderView.cpp:
+        * rendering/RenderView.h:
+        * rendering/RenderWidget.cpp:
+        * rendering/RenderWidget.h:
+        * rendering/mathml/RenderMathMLBlock.cpp:
+        * rendering/mathml/RenderMathMLBlock.h:
+        * rendering/mathml/RenderMathMLFenced.cpp:
+        * rendering/mathml/RenderMathMLFenced.h:
+        * rendering/mathml/RenderMathMLFencedOperator.cpp:
+        * rendering/mathml/RenderMathMLFencedOperator.h:
+        * rendering/mathml/RenderMathMLFraction.cpp:
+        * rendering/mathml/RenderMathMLFraction.h:
+        * rendering/mathml/RenderMathMLMath.cpp:
+        * rendering/mathml/RenderMathMLMath.h:
+        * rendering/mathml/RenderMathMLMenclose.cpp:
+        * rendering/mathml/RenderMathMLMenclose.h:
+        * rendering/mathml/RenderMathMLOperator.cpp:
+        * rendering/mathml/RenderMathMLOperator.h:
+        * rendering/mathml/RenderMathMLPadded.cpp:
+        * rendering/mathml/RenderMathMLPadded.h:
+        * rendering/mathml/RenderMathMLRoot.cpp:
+        * rendering/mathml/RenderMathMLRoot.h:
+        * rendering/mathml/RenderMathMLRow.cpp:
+        * rendering/mathml/RenderMathMLRow.h:
+        * rendering/mathml/RenderMathMLScripts.cpp:
+        * rendering/mathml/RenderMathMLScripts.h:
+        * rendering/mathml/RenderMathMLSpace.cpp:
+        * rendering/mathml/RenderMathMLSpace.h:
+        * rendering/mathml/RenderMathMLToken.cpp:
+        * rendering/mathml/RenderMathMLToken.h:
+        * rendering/mathml/RenderMathMLUnderOver.cpp:
+        * rendering/mathml/RenderMathMLUnderOver.h:
+        * rendering/svg/RenderSVGBlock.cpp:
+        * rendering/svg/RenderSVGBlock.h:
+        * rendering/svg/RenderSVGContainer.cpp:
+        * rendering/svg/RenderSVGContainer.h:
+        * rendering/svg/RenderSVGEllipse.cpp:
+        * rendering/svg/RenderSVGEllipse.h:
+        * rendering/svg/RenderSVGForeignObject.cpp:
+        * rendering/svg/RenderSVGForeignObject.h:
+        * rendering/svg/RenderSVGGradientStop.cpp:
+        * rendering/svg/RenderSVGGradientStop.h:
+        * rendering/svg/RenderSVGHiddenContainer.cpp:
+        * rendering/svg/RenderSVGHiddenContainer.h:
+        * rendering/svg/RenderSVGImage.cpp:
+        * rendering/svg/RenderSVGImage.h:
+        * rendering/svg/RenderSVGInline.cpp:
+        * rendering/svg/RenderSVGInline.h:
+        * rendering/svg/RenderSVGInlineText.cpp:
+        * rendering/svg/RenderSVGInlineText.h:
+        * rendering/svg/RenderSVGModelObject.cpp:
+        * rendering/svg/RenderSVGModelObject.h:
+        * rendering/svg/RenderSVGPath.cpp:
+        * rendering/svg/RenderSVGPath.h:
+        * rendering/svg/RenderSVGRect.cpp:
+        * rendering/svg/RenderSVGRect.h:
+        * rendering/svg/RenderSVGResourceClipper.cpp:
+        * rendering/svg/RenderSVGResourceClipper.h:
+        * rendering/svg/RenderSVGResourceContainer.cpp:
+        * rendering/svg/RenderSVGResourceContainer.h:
+        * rendering/svg/RenderSVGResourceFilter.cpp:
+        * rendering/svg/RenderSVGResourceFilter.h:
+        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
+        * rendering/svg/RenderSVGResourceFilterPrimitive.h:
+        * rendering/svg/RenderSVGResourceGradient.cpp:
+        * rendering/svg/RenderSVGResourceGradient.h:
+        * rendering/svg/RenderSVGResourceLinearGradient.cpp:
+        * rendering/svg/RenderSVGResourceLinearGradient.h:
+        * rendering/svg/RenderSVGResourceMarker.cpp:
+        * rendering/svg/RenderSVGResourceMarker.h:
+        * rendering/svg/RenderSVGResourceMasker.cpp:
+        * rendering/svg/RenderSVGResourceMasker.h:
+        * rendering/svg/RenderSVGResourcePattern.cpp:
+        * rendering/svg/RenderSVGResourcePattern.h:
+        * rendering/svg/RenderSVGResourceRadialGradient.cpp:
+        * rendering/svg/RenderSVGResourceRadialGradient.h:
+        * rendering/svg/RenderSVGRoot.cpp:
+        * rendering/svg/RenderSVGRoot.h:
+        * rendering/svg/RenderSVGShape.cpp:
+        * rendering/svg/RenderSVGShape.h:
+        * rendering/svg/RenderSVGTSpan.cpp: Added.
+        * rendering/svg/RenderSVGTSpan.h:
+        * rendering/svg/RenderSVGText.cpp:
+        * rendering/svg/RenderSVGText.h:
+        * rendering/svg/RenderSVGTextPath.cpp:
+        * rendering/svg/RenderSVGTextPath.h:
+        * rendering/svg/RenderSVGTransformableContainer.cpp:
+        * rendering/svg/RenderSVGTransformableContainer.h:
+        * rendering/svg/RenderSVGViewportContainer.cpp:
+        * rendering/svg/RenderSVGViewportContainer.h:
+
 2017-11-07  Antti Koivisto  <antti@apple.com>
 
         Dynamic media queries don't update in shadow tree stylesheets
index 050b8ed..7757ef0 100644 (file)
@@ -1919,6 +1919,7 @@ rendering/svg/RenderSVGResourceRadialGradient.cpp
 rendering/svg/RenderSVGResourceSolidColor.cpp
 rendering/svg/RenderSVGRoot.cpp
 rendering/svg/RenderSVGShape.cpp
+rendering/svg/RenderSVGTSpan.cpp
 rendering/svg/RenderSVGText.cpp
 rendering/svg/RenderSVGTextPath.cpp
 rendering/svg/RenderSVGTransformableContainer.cpp
index 6c5eba5..768b79b 100644 (file)
@@ -46,6 +46,7 @@
 #include "RenderTheme.h"
 #include "ShadowRoot.h"
 #include "StyleResolver.h"
+#include <wtf/IsoMallocInlines.h>
 
 #if ENABLE(IOS_TOUCH_EVENTS)
 #include "Document.h"
@@ -57,6 +58,8 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSliderThumb);
+
 inline static Decimal sliderPosition(HTMLInputElement& element)
 {
     const StepRange stepRange(element.createStepRange(RejectAny));
@@ -112,6 +115,7 @@ bool RenderSliderThumb::isSliderThumb() const
 // FIXME: Find a way to cascade appearance and adjust heights, and get rid of this class.
 // http://webkit.org/b/62535
 class RenderSliderContainer final : public RenderFlexibleBox {
+    WTF_MAKE_ISO_ALLOCATED_INLINE(RenderSliderContainer);
 public:
     RenderSliderContainer(SliderContainerElement& element, RenderStyle&& style)
         : RenderFlexibleBox(element, WTFMove(style))
index 175dba1..b47b98f 100644 (file)
@@ -116,6 +116,7 @@ inline Ref<SliderThumbElement> SliderThumbElement::create(Document& document)
 // --------------------------------
 
 class RenderSliderThumb final : public RenderBlockFlow {
+    WTF_MAKE_ISO_ALLOCATED(RenderSliderThumb);
 public:
     RenderSliderThumb(SliderThumbElement&, RenderStyle&&);
     void updateAppearance(const RenderStyle* parentStyle);
index 831ccf5..1b51d7e 100644 (file)
 #include "RenderStyle.h"
 #include "RenderTheme.h"
 #include "ShadowRoot.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
 class RenderImageControlsButton final : public RenderBlockFlow {
+    WTF_MAKE_ISO_ALLOCATED_INLINE(RenderImageControlsButton);
 public:
     RenderImageControlsButton(HTMLElement&, RenderStyle&&);
     virtual ~RenderImageControlsButton();
index fe079cb..98dbc0a 100644 (file)
 #include "RenderBlockFlow.h"
 #include "RenderImage.h"
 #include "RenderStyle.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
 class RenderImageControls final : public RenderBlockFlow {
+    WTF_MAKE_ISO_ALLOCATED_INLINE(RenderImageControls);
 public:
     RenderImageControls(HTMLElement&, RenderStyle&&);
     virtual ~RenderImageControls();
index a45134d..a69fc93 100644 (file)
 #include "HTMLAttachmentElement.h"
 #include "RenderTheme.h"
 #include "URL.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
 using namespace HTMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderAttachment);
+
 RenderAttachment::RenderAttachment(HTMLAttachmentElement& element, RenderStyle&& style)
     : RenderReplaced(element, WTFMove(style), LayoutSize())
 {
index 91d262b..4caae03 100644 (file)
@@ -33,6 +33,7 @@
 namespace WebCore {
 
 class RenderAttachment final : public RenderReplaced {
+    WTF_MAKE_ISO_ALLOCATED(RenderAttachment);
 public:
     RenderAttachment(HTMLAttachmentElement&, RenderStyle&&);
 
index 341c21e..1258918 100644 (file)
@@ -68,6 +68,7 @@
 #include "ShapeOutsideInfo.h"
 #include "TransformState.h"
 
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/NeverDestroyed.h>
 #include <wtf/Optional.h>
 #include <wtf/SetForScope.h>
@@ -80,6 +81,8 @@ using namespace Unicode;
 
 using namespace HTMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderBlock);
+
 struct SameSizeAsRenderBlock : public RenderBox {
 };
 
index c8b3e65..e5bd963 100644 (file)
@@ -54,6 +54,7 @@ enum TextRunFlag {
 typedef unsigned TextRunFlags;
 
 class RenderBlock : public RenderBox {
+    WTF_MAKE_ISO_ALLOCATED(RenderBlock);
 public:
     friend class LineLayoutState;
     virtual ~RenderBlock();
index 61fb0c7..67ace7f 100644 (file)
 #include "TextAutoSizing.h"
 #include "VerticalPositionCache.h"
 #include "VisiblePosition.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderBlockFlow);
+
 bool RenderBlock::s_canPropagateFloatIntoSibling = false;
 
 struct SameSizeAsMarginInfo {
index 9279801..0068c06 100644 (file)
@@ -51,6 +51,7 @@ enum LineCount {
 #endif
 
 class RenderBlockFlow : public RenderBlock {
+    WTF_MAKE_ISO_ALLOCATED(RenderBlockFlow);
 public:
     RenderBlockFlow(Element&, RenderStyle&&);
     RenderBlockFlow(Document&, RenderStyle&&);
index d9fcac4..6a90d1f 100644 (file)
@@ -72,6 +72,7 @@
 #include "TransformState.h"
 #include <algorithm>
 #include <math.h>
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 
 #include "RenderGrid.h"
@@ -82,6 +83,8 @@
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderBox);
+
 struct SameSizeAsRenderBox : public RenderBoxModelObject {
     virtual ~SameSizeAsRenderBox() = default;
     LayoutRect frameRect;
index 3198ca8..7f94315 100644 (file)
@@ -43,6 +43,7 @@ enum OverlayScrollbarSizeRelevancy { IgnoreOverlayScrollbarSize, IncludeOverlayS
 enum ShouldComputePreferred { ComputeActual, ComputePreferred };
 
 class RenderBox : public RenderBoxModelObject {
+    WTF_MAKE_ISO_ALLOCATED(RenderBox);
 public:
     virtual ~RenderBox();
 
index 7c8f602..a3665c6 100644 (file)
@@ -57,6 +57,7 @@
 #include "ScrollingConstraints.h"
 #include "Settings.h"
 #include "TransformState.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/NeverDestroyed.h>
 #if !ASSERT_DISABLED
 #include <wtf/SetForScope.h>
@@ -70,6 +71,8 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderBoxModelObject);
+
 // The HashMap for storing continuation pointers.
 // An inline can be split with blocks occuring in between the inline content.
 // When this occurs we need a pointer to the next object. We can basically be
index d574b20..6c17533 100644 (file)
@@ -104,6 +104,7 @@ private:
 // at http://www.w3.org/TR/CSS21/box.html
 
 class RenderBoxModelObject : public RenderLayerModelObject {
+    WTF_MAKE_ISO_ALLOCATED(RenderBoxModelObject);
 public:
     virtual ~RenderBoxModelObject();
     
index 0d3255f..22dc477 100644 (file)
@@ -28,6 +28,7 @@
 #include "RenderTextFragment.h"
 #include "RenderTheme.h"
 #include "StyleInheritedData.h"
+#include <wtf/IsoMallocInlines.h>
 
 #if PLATFORM(IOS)
 #include "RenderThemeIOS.h"
@@ -37,6 +38,8 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderButton);
+
 RenderButton::RenderButton(HTMLFormControlElement& element, RenderStyle&& style)
     : RenderFlexibleBox(element, WTFMove(style))
 {
index 0a6f107..7d40716 100644 (file)
@@ -32,6 +32,7 @@ class RenderTextFragment;
 // For inputs, they will also generate an anonymous RenderText and keep its style and content up
 // to date as the button changes.
 class RenderButton final : public RenderFlexibleBox {
+    WTF_MAKE_ISO_ALLOCATED(RenderButton);
 public:
     RenderButton(HTMLFormControlElement&, RenderStyle&&);
     virtual ~RenderButton();
index b6e088f..8386eaf 100644 (file)
 
 #include "RenderBlock.h"
 #include "StyleInheritedData.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/NeverDestroyed.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderCombineText);
+
 const float textCombineMargin = 1.15f; // Allow em + 15% margin
 
 RenderCombineText::RenderCombineText(Text& textNode, const String& string)
index 968a65c..15850f1 100644 (file)
@@ -27,6 +27,7 @@
 namespace WebCore {
 
 class RenderCombineText final : public RenderText {
+    WTF_MAKE_ISO_ALLOCATED(RenderCombineText);
 public:
     RenderCombineText(Text&, const String&);
 
index 5f14673..6274285 100644 (file)
@@ -33,6 +33,7 @@
 #include "RenderListMarker.h"
 #include "RenderStyle.h"
 #include "RenderView.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StdLibExtras.h>
 
 #if ENABLE(TREE_DEBUGGING)
@@ -43,6 +44,8 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderCounter);
+
 typedef HashMap<AtomicString, RefPtr<CounterNode>> CounterMap;
 typedef HashMap<const RenderElement*, std::unique_ptr<CounterMap>> CounterMaps;
 
index 8e42764..8a90202 100644 (file)
@@ -29,6 +29,7 @@ namespace WebCore {
 class CounterNode;
 
 class RenderCounter final : public RenderText {
+    WTF_MAKE_ISO_ALLOCATED(RenderCounter);
 public:
     RenderCounter(Document&, const CounterContent&);
     virtual ~RenderCounter();
index 62bea30..e664608 100644 (file)
 #include "LayoutRepainter.h"
 #include "RenderLayer.h"
 #include "RenderView.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StdLibExtras.h>
 #include <wtf/unicode/CharacterNames.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderDeprecatedFlexibleBox);
+
 class FlexBoxIterator {
 public:
     FlexBoxIterator(RenderDeprecatedFlexibleBox* parent)
index 9362147..e2bf1a9 100644 (file)
@@ -29,6 +29,7 @@ namespace WebCore {
 class FlexBoxIterator;
 
 class RenderDeprecatedFlexibleBox final : public RenderBlock {
+    WTF_MAKE_ISO_ALLOCATED(RenderDeprecatedFlexibleBox);
 public:
     RenderDeprecatedFlexibleBox(Element&, RenderStyle&&);
     virtual ~RenderDeprecatedFlexibleBox();
index a17851c..260bbb6 100644 (file)
 #include "HTMLInputElement.h"
 #include "HTMLNames.h"
 #include "PaintInfo.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
 using namespace HTMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderDetailsMarker);
+
 RenderDetailsMarker::RenderDetailsMarker(DetailsMarkerControl& element, RenderStyle&& style)
     : RenderBlockFlow(element, WTFMove(style))
 {
index f15444c..abd883d 100644 (file)
@@ -26,6 +26,7 @@
 namespace WebCore {
 
 class RenderDetailsMarker final : public RenderBlockFlow {
+    WTF_MAKE_ISO_ALLOCATED(RenderDetailsMarker);
 public:
     RenderDetailsMarker(DetailsMarkerControl&, RenderStyle&&);
     DetailsMarkerControl& element() const { return static_cast<DetailsMarkerControl&>(nodeForNonAnonymous()); }
index 5069b8f..92c92ad 100644 (file)
@@ -73,6 +73,7 @@
 #include "StylePendingResources.h"
 #include "StyleResolver.h"
 #include "TextAutoSizing.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/MathExtras.h>
 #include <wtf/StackStats.h>
 
@@ -80,6 +81,8 @@
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderElement);
+
 struct SameSizeAsRenderElement : public RenderObject {
     unsigned bitfields : 25;
     void* firstChild;
index 4cdeceb..e40ed9a 100644 (file)
@@ -31,6 +31,7 @@ class ControlStates;
 class RenderBlock;
 
 class RenderElement : public RenderObject {
+    WTF_MAKE_ISO_ALLOCATED(RenderElement);
 public:
     virtual ~RenderElement();
 
index ee13565..ad05445 100644 (file)
 #include "Settings.h"
 #include "Text.h"
 #include "TextRun.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 
 namespace WebCore {
 
 using namespace HTMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderEmbeddedObject);
+
 static const float replacementTextRoundedRectHeight = 22;
 static const float replacementTextRoundedRectLeftTextMargin = 10;
 static const float replacementTextRoundedRectRightTextMargin = 10;
index 471606a..eaab786 100644 (file)
@@ -33,6 +33,7 @@ class TextRun;
 // Renderer for embeds and objects, often, but not always, rendered via plug-ins.
 // For example, <embed src="foo.html"> does not invoke a plug-in.
 class RenderEmbeddedObject : public RenderWidget {
+    WTF_MAKE_ISO_ALLOCATED(RenderEmbeddedObject);
 public:
     RenderEmbeddedObject(HTMLFrameOwnerElement&, RenderStyle&&);
     virtual ~RenderEmbeddedObject();
index 4e7da10..d0532bd 100644 (file)
 #include "TextRun.h"
 #include "VisiblePosition.h"
 #include <math.h>
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
 using namespace HTMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderFileUploadControl);
+
 const int afterButtonSpacing = 4;
 #if !PLATFORM(IOS)
 const int iconHeight = 16;
index f26a1cb..d30a9bb 100644 (file)
@@ -31,6 +31,7 @@ class HTMLInputElement;
 // associated with it to receive click/hover events.
 
 class RenderFileUploadControl final : public RenderBlockFlow {
+    WTF_MAKE_ISO_ALLOCATED(RenderFileUploadControl);
 public:
     RenderFileUploadControl(HTMLInputElement&, RenderStyle&&);
     virtual ~RenderFileUploadControl();
index 96d94fa..73fccf1 100644 (file)
 #include "RenderView.h"
 #include "RuntimeEnabledFeatures.h"
 #include <limits>
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/MathExtras.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderFlexibleBox);
+
 struct RenderFlexibleBox::LineContext {
     LineContext(LayoutUnit crossAxisOffset, LayoutUnit crossAxisExtent, LayoutUnit maxAscent, Vector<FlexItem>&& flexItems)
         : crossAxisOffset(crossAxisOffset)
index 2c6fb0c..ef4a8a2 100644 (file)
@@ -38,6 +38,7 @@ namespace WebCore {
 class FlexItem;
     
 class RenderFlexibleBox : public RenderBlock {
+    WTF_MAKE_ISO_ALLOCATED(RenderFlexibleBox);
 public:
     RenderFlexibleBox(Element&, RenderStyle&&);
     RenderFlexibleBox(Document&, RenderStyle&&);
index b0ecc28..8418279 100644 (file)
 #include "RenderLayer.h"
 #include "RenderView.h"
 #include "StyleResolver.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderFragmentContainer);
+
 RenderFragmentContainer::RenderFragmentContainer(Element& element, RenderStyle&& style, RenderFragmentedFlow* fragmentedFlow)
     : RenderBlockFlow(element, WTFMove(style))
     , m_fragmentedFlow(fragmentedFlow)
index b3ef7c6..b05bada 100644 (file)
@@ -42,6 +42,7 @@ class RenderBoxFragmentInfo;
 class RenderFragmentedFlow;
 
 class RenderFragmentContainer : public RenderBlockFlow {
+    WTF_MAKE_ISO_ALLOCATED(RenderFragmentContainer);
 public:
     void styleDidChange(StyleDifference, const RenderStyle* oldStyle) override;
 
index 733ba7f..e0713d2 100644 (file)
 
 #include "RenderBoxFragmentInfo.h"
 #include "RenderFragmentedFlow.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderFragmentContainerSet);
+
 RenderFragmentContainerSet::RenderFragmentContainerSet(Document& document, RenderStyle&& style, RenderFragmentedFlow& fragmentedFlow)
     : RenderFragmentContainer(document, WTFMove(style), &fragmentedFlow)
 {
index 06f07cc..e44b2df 100644 (file)
@@ -43,6 +43,7 @@ class RenderFragmentedFlow;
 // FIXME: For now we derive from RenderFragmentContainer, but this may change at some point.
 
 class RenderFragmentContainerSet : public RenderFragmentContainer {
+    WTF_MAKE_ISO_ALLOCATED(RenderFragmentContainerSet);
 public:
     void expandToEncompassFragmentedFlowContentsIfNeeded();
 
index bd76dc5..9704846 100644 (file)
 #include "RenderTheme.h"
 #include "RenderView.h"
 #include "TransformState.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderFragmentedFlow);
+
 RenderFragmentedFlow::RenderFragmentedFlow(Document& document, RenderStyle&& style)
     : RenderBlockFlow(document, WTFMove(style))
     , m_currentFragmentMaintainer(nullptr)
index 14df659..28128e6 100644 (file)
@@ -53,6 +53,7 @@ typedef HashMap<const RootInlineBox*, RenderFragmentContainer*> ContainingFragme
 // of the RenderFragmentedFlow.
 
 class RenderFragmentedFlow: public RenderBlockFlow {
+    WTF_MAKE_ISO_ALLOCATED(RenderFragmentedFlow);
 public:
     virtual ~RenderFragmentedFlow() = default;
 
index f1e802b..8745d10 100644 (file)
 #include "FrameView.h"
 #include "HTMLFrameElementBase.h"
 #include "RenderView.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderFrameBase);
+
 RenderFrameBase::RenderFrameBase(HTMLFrameElementBase& element, RenderStyle&& style)
     : RenderWidget(element, WTFMove(style))
 {
index c8839e1..7977d74 100644 (file)
@@ -35,6 +35,7 @@ class RenderView;
 
 // Base class for RenderFrame and RenderIFrame
 class RenderFrameBase : public RenderWidget {
+    WTF_MAKE_ISO_ALLOCATED(RenderFrameBase);
 protected:
     RenderFrameBase(HTMLFrameElementBase&, RenderStyle&&);
 
index a902f43..26078f6 100644 (file)
 #include "RenderLayer.h"
 #include "RenderView.h"
 #include "Settings.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderFrameSet);
+
 RenderFrameSet::RenderFrameSet(HTMLFrameSetElement& frameSet, RenderStyle&& style)
     : RenderBox(frameSet, WTFMove(style), 0)
     , m_isResizing(false)
index 843e215..0f8a090 100644 (file)
@@ -53,6 +53,7 @@ private:
 };
 
 class RenderFrameSet final : public RenderBox {
+    WTF_MAKE_ISO_ALLOCATED(RenderFrameSet);
 public:
     RenderFrameSet(HTMLFrameSetElement&, RenderStyle&&);
     virtual ~RenderFrameSet();
index 94aeb11..729d01b 100644 (file)
 #include "RenderBlockFlow.h"
 #include "RenderLayer.h"
 #include "RenderLayerCompositor.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderFullScreen);
+
 class RenderFullScreenPlaceholder final : public RenderBlockFlow {
 public:
     RenderFullScreenPlaceholder(Document& document, RenderStyle&& style)
index ce3cbf5..dce83ac 100644 (file)
@@ -31,6 +31,7 @@
 namespace WebCore {
 
 class RenderFullScreen final : public RenderFlexibleBox {
+    WTF_MAKE_ISO_ALLOCATED(RenderFullScreen);
 public:
     RenderFullScreen(Document&, RenderStyle&&);
 
index 517a722..a4cf76d 100644 (file)
 #include "RenderLayer.h"
 #include "RenderView.h"
 #include <cstdlib>
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderGrid);
+
 enum TrackSizeRestriction {
     AllowInfinity,
     ForbidInfinity,
index 67b8e42..6caaffa 100644 (file)
@@ -41,6 +41,7 @@ enum GridAxisPosition {GridAxisStart, GridAxisEnd, GridAxisCenter};
 enum GridAxis { GridRowAxis, GridColumnAxis };
 
 class RenderGrid final : public RenderBlock {
+    WTF_MAKE_ISO_ALLOCATED(RenderGrid);
 public:
     RenderGrid(Element&, RenderStyle&&);
     virtual ~RenderGrid();
index c88cb13..986defe 100644 (file)
 #include "Page.h"
 #include "PaintInfo.h"
 #include "RenderView.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
 using namespace HTMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderHTMLCanvas);
+
 RenderHTMLCanvas::RenderHTMLCanvas(HTMLCanvasElement& element, RenderStyle&& style)
     : RenderReplaced(element, WTFMove(style), element.size())
 {
index 77e5dde..ff3563c 100644 (file)
@@ -32,6 +32,7 @@ namespace WebCore {
 class HTMLCanvasElement;
 
 class RenderHTMLCanvas final : public RenderReplaced {
+    WTF_MAKE_ISO_ALLOCATED(RenderHTMLCanvas);
 public:
     RenderHTMLCanvas(HTMLCanvasElement&, RenderStyle&&);
 
index 49da957..2ae3ce2 100644 (file)
@@ -51,6 +51,7 @@
 #include "RenderImageResourceStyleImage.h"
 #include "RenderView.h"
 #include "SVGImage.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 
 #if PLATFORM(IOS)
@@ -65,6 +66,8 @@
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderImage);
+
 #if PLATFORM(IOS)
 // FIXME: This doesn't behave correctly for floating or positioned images, but WebCore doesn't handle those well
 // during selection creation yet anyway.
index 0593118..5654310 100644 (file)
@@ -38,6 +38,7 @@ enum ImageSizeChangeType {
 };
 
 class RenderImage : public RenderReplaced {
+    WTF_MAKE_ISO_ALLOCATED(RenderImage);
 public:
     RenderImage(Element&, RenderStyle&&, StyleImage* = nullptr, const float = 1.0f);
     RenderImage(Document&, RenderStyle&&, StyleImage* = nullptr);
index 13b1b11..cce2b0c 100644 (file)
 #include "RenderElement.h"
 #include "RenderImage.h"
 #include "RenderImageResourceStyleImage.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderImageResource);
+
 RenderImageResource::RenderImageResource()
 {
 }
index b5ccb8a..b4d9038 100644 (file)
@@ -28,6 +28,7 @@
 #include "CachedImage.h"
 #include "CachedResourceHandle.h"
 #include "StyleImage.h"
+#include <wtf/IsoMalloc.h>
 
 namespace WebCore {
 
@@ -35,7 +36,7 @@ class CachedImage;
 class RenderElement;
 
 class RenderImageResource {
-    WTF_MAKE_NONCOPYABLE(RenderImageResource); WTF_MAKE_FAST_ALLOCATED;
+    WTF_MAKE_NONCOPYABLE(RenderImageResource); WTF_MAKE_ISO_ALLOCATED(RenderImageResource);
 public:
     RenderImageResource();
     virtual ~RenderImageResource() = default;
index 69c404e..8d49a5e 100644 (file)
 #include "CachedImage.h"
 #include "RenderElement.h"
 #include "StyleCachedImage.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderImageResourceStyleImage);
+
 RenderImageResourceStyleImage::RenderImageResourceStyleImage(StyleImage& styleImage)
     : m_styleImage(styleImage)
 {
index be6c4f4..b7bd498 100644 (file)
@@ -34,6 +34,7 @@ namespace WebCore {
 class RenderElement;
 
 class RenderImageResourceStyleImage final : public RenderImageResource {
+    WTF_MAKE_ISO_ALLOCATED(RenderImageResourceStyleImage);
 public:
     explicit RenderImageResourceStyleImage(StyleImage&);
 
index 70302ac..1e48971 100644 (file)
@@ -47,6 +47,7 @@
 #include "StyleInheritedData.h"
 #include "TransformState.h"
 #include "VisiblePosition.h"
+#include <wtf/IsoMallocInlines.h>
 
 #if ENABLE(DASHBOARD_SUPPORT)
 #include "Frame.h"
@@ -54,6 +55,8 @@
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderInline);
+
 RenderInline::RenderInline(Element& element, RenderStyle&& style)
     : RenderBoxModelObject(element, WTFMove(style), RenderInlineFlag)
 {
index 7090f95..82b06d7 100644 (file)
@@ -32,6 +32,7 @@ class Position;
 class RenderFragmentContainer;
 
 class RenderInline : public RenderBoxModelObject {
+    WTF_MAKE_ISO_ALLOCATED(RenderInline);
 public:
     RenderInline(Element&, RenderStyle&&);
     RenderInline(Document&, RenderStyle&&);
index 34eb640..f598606 100644 (file)
 #include "RenderView.h"
 #include "Settings.h"
 #include "StyleScrollSnapPoints.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderLayerModelObject);
+
 bool RenderLayerModelObject::s_wasFloating = false;
 bool RenderLayerModelObject::s_hadLayer = false;
 bool RenderLayerModelObject::s_hadTransform = false;
index 6cdd482..e605a48 100644 (file)
@@ -37,6 +37,7 @@ struct RepaintLayoutRects {
 };
 
 class RenderLayerModelObject : public RenderElement {
+    WTF_MAKE_ISO_ALLOCATED(RenderLayerModelObject);
 public:
     virtual ~RenderLayerModelObject();
 
index 9a97a3a..f42f6de 100644 (file)
@@ -33,6 +33,7 @@
 #include "RootInlineBox.h"
 #include "SimpleLineLayoutFunctions.h"
 #include "VisiblePosition.h"
+#include <wtf/IsoMallocInlines.h>
 
 #if PLATFORM(IOS)
 #include "SelectionRect.h"
@@ -40,6 +41,8 @@
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderLineBreak);
+
 static const int invalidLineHeight = -1;
 
 static const SimpleLineLayout::Layout* simpleLineLayout(const RenderLineBreak& renderer)
index 7deefb8..9ebab80 100644 (file)
@@ -30,6 +30,7 @@ class HTMLElement;
 class Position;
 
 class RenderLineBreak final : public RenderBoxModelObject {
+    WTF_MAKE_ISO_ALLOCATED(RenderLineBreak);
 public:
     RenderLineBreak(HTMLElement&, RenderStyle&&);
     virtual ~RenderLineBreak();
index afccd59..0360cd7 100644 (file)
 #include "StyleTreeResolver.h"
 #include "WheelEventTestTrigger.h"
 #include <math.h>
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 
 namespace WebCore {
 
 using namespace HTMLNames;
+
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderListBox);
  
 const int rowSpacing = 1;
 
index 7f86ec1..9d694df 100644 (file)
@@ -39,6 +39,7 @@ namespace WebCore {
 class HTMLSelectElement;
 
 class RenderListBox final : public RenderBlockFlow, public ScrollableArea {
+    WTF_MAKE_ISO_ALLOCATED(RenderListBox);
 public:
     RenderListBox(HTMLSelectElement&, RenderStyle&&);
     virtual ~RenderListBox();
index 816ea25..5a08509 100644 (file)
@@ -36,6 +36,7 @@
 #include "RenderListMarker.h"
 #include "RenderView.h"
 #include "StyleInheritedData.h"
+#include <wtf/IsoMallocInlines.h>
 #if !ASSERT_DISABLED
 #include <wtf/SetForScope.h>
 #endif
@@ -46,6 +47,8 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderListItem);
+
 RenderListItem::RenderListItem(Element& element, RenderStyle&& style)
     : RenderBlockFlow(element, WTFMove(style))
     , m_hasExplicitValue(false)
index 7dda841..47f5283 100644 (file)
@@ -30,6 +30,7 @@ namespace WebCore {
 class HTMLOListElement;
 
 class RenderListItem final : public RenderBlockFlow {
+    WTF_MAKE_ISO_ALLOCATED(RenderListItem);
 public:
     RenderListItem(Element&, RenderStyle&&);
     virtual ~RenderListItem();
index 5ff914e..dd18777 100644 (file)
@@ -32,6 +32,7 @@
 #include "RenderLayer.h"
 #include "RenderListItem.h"
 #include "RenderView.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 #include <wtf/text/StringBuilder.h>
 #include <wtf/unicode/CharacterNames.h>
@@ -41,6 +42,8 @@ namespace WebCore {
 using namespace WTF;
 using namespace Unicode;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderListMarker);
+
 const int cMarkerPadding = 7;
 
 enum SequenceType { NumericSequence, AlphabeticSequence };
index c998db6..13f124f 100644 (file)
@@ -33,6 +33,7 @@ String listMarkerText(EListStyleType, int value);
 // Used to render the list item's marker.
 // The RenderListMarker always has to be a child of a RenderListItem.
 class RenderListMarker final : public RenderBox {
+    WTF_MAKE_ISO_ALLOCATED(RenderListMarker);
 public:
     RenderListMarker(RenderListItem&, RenderStyle&&);
     virtual ~RenderListMarker();
index 739af49..f60609a 100644 (file)
 
 #include "RenderFragmentedFlow.h"
 #include "RenderView.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderMedia);
+
 RenderMedia::RenderMedia(HTMLMediaElement& element, RenderStyle&& style)
     : RenderImage(element, WTFMove(style))
 {
index 7c5cfda..504c572 100644 (file)
@@ -33,6 +33,7 @@
 namespace WebCore {
 
 class RenderMedia : public RenderImage {
+    WTF_MAKE_ISO_ALLOCATED(RenderMedia);
 public:
     RenderMedia(HTMLMediaElement&, RenderStyle&&);
     RenderMedia(HTMLMediaElement&, RenderStyle&&, const IntSize& intrinsicSize);
index 26842e7..94e6601 100644 (file)
 #include "MediaControlElements.h"
 #include "RenderTheme.h"
 #include "RenderView.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderMediaVolumeSliderContainer);
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderMediaControlTimelineContainer);
+#if ENABLE(VIDEO_TRACK)
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderTextTrackContainerElement);
+#endif
+
 RenderMediaVolumeSliderContainer::RenderMediaVolumeSliderContainer(Element& element, RenderStyle&& style)
     : RenderBlockFlow(element, WTFMove(style))
 {
index eee2eab..d223fea 100644 (file)
@@ -35,6 +35,7 @@
 namespace WebCore {
 
 class RenderMediaVolumeSliderContainer final : public RenderBlockFlow {
+    WTF_MAKE_ISO_ALLOCATED(RenderMediaVolumeSliderContainer);
 public:
     RenderMediaVolumeSliderContainer(Element&, RenderStyle&&);
 
@@ -45,6 +46,7 @@ private:
 // ----------------------------
 
 class RenderMediaControlTimelineContainer final : public RenderFlexibleBox {
+    WTF_MAKE_ISO_ALLOCATED(RenderMediaControlTimelineContainer);
 public:
     RenderMediaControlTimelineContainer(Element&, RenderStyle&&);
 
@@ -58,6 +60,7 @@ private:
 #if ENABLE(VIDEO_TRACK)
 
 class RenderTextTrackContainerElement final : public RenderBlockFlow {
+    WTF_MAKE_ISO_ALLOCATED(RenderTextTrackContainerElement);
 public:
     RenderTextTrackContainerElement(Element&, RenderStyle&&);
 
index da4607f..e10455e 100644 (file)
@@ -45,6 +45,7 @@
 #include "StyleResolver.h"
 #include "TextRun.h"
 #include <math.h>
+#include <wtf/IsoMallocInlines.h>
 
 #if PLATFORM(IOS)
 #include "LocalizedStrings.h"
@@ -54,6 +55,8 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderMenuList);
+
 #if PLATFORM(IOS)
 static size_t selectedOptionCount(const RenderMenuList& renderMenuList)
 {
index ef4333f..3b16cc5 100644 (file)
@@ -40,7 +40,7 @@ class HTMLSelectElement;
 class RenderText;
 
 class RenderMenuList final : public RenderFlexibleBox, private PopupMenuClient {
-
+    WTF_MAKE_ISO_ALLOCATED(RenderMenuList);
 public:
     RenderMenuList(HTMLSelectElement&, RenderStyle&&);
     virtual ~RenderMenuList();
index 8261351..c6b4b04 100644 (file)
 #include "HTMLMeterElement.h"
 #include "HTMLNames.h"
 #include "RenderTheme.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
 using namespace HTMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderMeter);
+
 RenderMeter::RenderMeter(HTMLElement& element, RenderStyle&& style)
     : RenderBlockFlow(element, WTFMove(style))
 {
index 5e517fb..3e47749 100644 (file)
@@ -29,6 +29,7 @@ namespace WebCore {
 class HTMLMeterElement;
 
 class RenderMeter final : public RenderBlockFlow {
+    WTF_MAKE_ISO_ALLOCATED(RenderMeter);
 public:
     RenderMeter(HTMLElement&, RenderStyle&&);
     virtual ~RenderMeter();
index 851c4a2..ffa7b83 100644 (file)
 #include "RenderMultiColumnSpannerPlaceholder.h"
 #include "RenderView.h"
 #include "TransformState.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderMultiColumnFlow);
+
 bool RenderMultiColumnFlow::gShiftingSpanner = false;
 
 RenderMultiColumnFlow::RenderMultiColumnFlow(Document& document, RenderStyle&& style)
index 309afee..9cc2a0c 100644 (file)
@@ -34,6 +34,7 @@ class RenderMultiColumnSet;
 class RenderMultiColumnSpannerPlaceholder;
 
 class RenderMultiColumnFlow final : public RenderFragmentedFlow {
+    WTF_MAKE_ISO_ALLOCATED(RenderMultiColumnFlow);
 public:
     RenderMultiColumnFlow(Document&, RenderStyle&&);
     ~RenderMultiColumnFlow();
index 749f2fb..0ee59d7 100644 (file)
 #include "RenderMultiColumnFlow.h"
 #include "RenderMultiColumnSpannerPlaceholder.h"
 #include "RenderView.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderMultiColumnSet);
+
 RenderMultiColumnSet::RenderMultiColumnSet(RenderFragmentedFlow& fragmentedFlow, RenderStyle&& style)
     : RenderFragmentContainerSet(fragmentedFlow.document(), WTFMove(style), fragmentedFlow)
     , m_computedColumnCount(1)
index abdc244..375081b 100644 (file)
@@ -43,6 +43,7 @@ namespace WebCore {
 // Column spans result in the creation of new column sets as well, since a spanning fragment has to be placed in between the column sets that
 // come before and after the span.
 class RenderMultiColumnSet final : public RenderFragmentContainerSet {
+    WTF_MAKE_ISO_ALLOCATED(RenderMultiColumnSet);
 public:
     RenderMultiColumnSet(RenderFragmentedFlow&, RenderStyle&&);
 
index 0a5abf0..97fc801 100644 (file)
 #include "RenderMultiColumnSpannerPlaceholder.h"
 
 #include "RenderMultiColumnFlow.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderMultiColumnSpannerPlaceholder);
+
 RenderPtr<RenderMultiColumnSpannerPlaceholder> RenderMultiColumnSpannerPlaceholder::createAnonymous(RenderMultiColumnFlow& fragmentedFlow, RenderBox& spanner, const RenderStyle& parentStyle)
 {
     auto newStyle = RenderStyle::createAnonymousStyleWithDisplay(parentStyle, BLOCK);
index 41ffbe7..a059561 100644 (file)
@@ -36,6 +36,7 @@ namespace WebCore {
 class RenderMultiColumnFlow;
 
 class RenderMultiColumnSpannerPlaceholder final : public RenderBox {
+    WTF_MAKE_ISO_ALLOCATED(RenderMultiColumnSpannerPlaceholder);
 public:
     static RenderPtr<RenderMultiColumnSpannerPlaceholder> createAnonymous(RenderMultiColumnFlow&, RenderBox& spanner, const RenderStyle& parentStyle);
 
index 8fd4480..3c937e3 100644 (file)
@@ -69,6 +69,7 @@
 #include "TransformState.h"
 #include <algorithm>
 #include <stdio.h>
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/RefCountedLeakCounter.h>
 #include <wtf/text/TextStream.h>
 
@@ -80,6 +81,8 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderObject);
+
 #ifndef NDEBUG
 
 RenderObject::SetLayoutNeededForbiddenScope::SetLayoutNeededForbiddenScope(RenderObject* renderObject, bool isForbidden)
index 1107192..fc047c5 100644 (file)
@@ -36,6 +36,7 @@
 #include "ScrollAlignment.h"
 #include "StyleImage.h"
 #include "TextAffinity.h"
+#include <wtf/IsoMalloc.h>
 #include <wtf/WeakPtr.h>
 
 namespace WebCore {
@@ -98,7 +99,7 @@ struct AnnotatedRegionValue {
 
 // Base class for all rendering tree objects.
 class RenderObject : public CachedImageClient {
-    WTF_MAKE_FAST_ALLOCATED;
+    WTF_MAKE_ISO_ALLOCATED(RenderObject);
     friend class RenderBlock;
     friend class RenderBlockFlow;
     friend class RenderElement;
index cb688de..c078cd2 100644 (file)
 #include "HTMLProgressElement.h"
 #include "RenderTheme.h"
 #include <wtf/CurrentTime.h>
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/RefPtr.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderProgress);
+
 RenderProgress::RenderProgress(HTMLElement& element, RenderStyle&& style)
     : RenderBlockFlow(element, WTFMove(style))
     , m_position(HTMLProgressElement::InvalidPosition)
index 2964ec5..d57a19c 100644 (file)
@@ -27,6 +27,7 @@ namespace WebCore {
 class HTMLProgressElement;
 
 class RenderProgress final : public RenderBlockFlow {
+    WTF_MAKE_ISO_ALLOCATED(RenderProgress);
 public:
     RenderProgress(HTMLElement&, RenderStyle&&);
     virtual ~RenderProgress();
index 1b35d3c..dd02ec3 100644 (file)
 #include "QuotesData.h"
 #include "RenderTextFragment.h"
 #include "RenderView.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/unicode/CharacterNames.h>
 
 
 namespace WebCore {
 using namespace WTF::Unicode;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderQuote);
+
 RenderQuote::RenderQuote(Document& document, RenderStyle&& style, QuoteType quote)
     : RenderInline(document, WTFMove(style))
     , m_type(quote)
index 082d24f..50e956f 100644 (file)
@@ -27,6 +27,7 @@
 namespace WebCore {
 
 class RenderQuote final : public RenderInline {
+    WTF_MAKE_ISO_ALLOCATED(RenderQuote);
 public:
     RenderQuote(Document&, RenderStyle&&, QuoteType);
     virtual ~RenderQuote();
index a3b2d91..caddd4e 100644 (file)
 #include "RenderView.h"
 #include "RenderedDocumentMarker.h"
 #include "VisiblePosition.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderReplaced);
+
 const int cDefaultWidth = 300;
 const int cDefaultHeight = 150;
 
index 8205818..ae5d954 100644 (file)
@@ -26,6 +26,7 @@
 namespace WebCore {
 
 class RenderReplaced : public RenderBox {
+    WTF_MAKE_ISO_ALLOCATED(RenderReplaced);
 public:
     virtual ~RenderReplaced();
 
index ed5dbb7..0361871 100644 (file)
 #include "RenderReplica.h"
 
 #include "RenderLayer.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderReplica);
+
 RenderReplica::RenderReplica(Document& document, RenderStyle&& style)
     : RenderBox(document, WTFMove(style), 0)
 {
index 91373cb..2ce7861 100644 (file)
@@ -33,6 +33,7 @@
 namespace WebCore {
 
 class RenderReplica final : public RenderBox {
+    WTF_MAKE_ISO_ALLOCATED(RenderReplica);
 public:
     RenderReplica(Document&, RenderStyle&&);
     virtual ~RenderReplica();
index 23e1e09..518c0bd 100644 (file)
 #include "RenderRubyRun.h"
 #include "RenderStyle.h"
 #include "StyleInheritedData.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/RefPtr.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderRubyAsInline);
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderRubyAsBlock);
+
 //=== generic helper functions to avoid excessive code duplication ===
 
 static inline bool isAnonymousRubyInlineBlock(const RenderObject* object)
index ce74193..a53b59c 100644 (file)
@@ -51,6 +51,7 @@ namespace WebCore {
 
 // <ruby> when used as 'display:inline'
 class RenderRubyAsInline final : public RenderInline {
+    WTF_MAKE_ISO_ALLOCATED(RenderRubyAsInline);
 public:
     RenderRubyAsInline(Element&, RenderStyle&&);
     virtual ~RenderRubyAsInline();
@@ -69,6 +70,7 @@ private:
 
 // <ruby> when used as 'display:block' or 'display:inline-block'
 class RenderRubyAsBlock final : public RenderBlockFlow {
+    WTF_MAKE_ISO_ALLOCATED(RenderRubyAsBlock);
 public:
     RenderRubyAsBlock(Element&, RenderStyle&&);
     virtual ~RenderRubyAsBlock();
index a6231e2..01d2df5 100644 (file)
 #include "RenderRubyBase.h"
 #include "RenderRubyRun.h"
 #include "RenderRubyText.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderRubyBase);
+
 RenderRubyBase::RenderRubyBase(Document& document, RenderStyle&& style)
     : RenderBlockFlow(document, WTFMove(style))
     , m_initialOffset(0)
index 977dd77..92212bb 100644 (file)
@@ -37,6 +37,7 @@ namespace WebCore {
 class RenderRubyRun;
 
 class RenderRubyBase final : public RenderBlockFlow {
+    WTF_MAKE_ISO_ALLOCATED(RenderRubyBase);
 public:
     RenderRubyBase(Document&, RenderStyle&&);
     virtual ~RenderRubyBase();
index 0615b83..7398240 100644 (file)
 #include "RenderText.h"
 #include "RenderView.h"
 #include "StyleInheritedData.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 
 namespace WebCore {
 
 using namespace std;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderRubyRun);
+
 RenderRubyRun::RenderRubyRun(Document& document, RenderStyle&& style)
     : RenderBlockFlow(document, WTFMove(style))
     , m_lastCharacter(0)
index 1c86941..febf3c3 100644 (file)
@@ -41,6 +41,7 @@ class RenderRubyText;
 // See RenderRuby.h for further comments on the structure
 
 class RenderRubyRun final : public RenderBlockFlow {
+    WTF_MAKE_ISO_ALLOCATED(RenderRubyRun);
 public:
     RenderRubyRun(Document&, RenderStyle&&);
     virtual ~RenderRubyRun();
index 42ee2f6..43d483f 100644 (file)
@@ -36,6 +36,8 @@
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderRubyText);
+
 RenderRubyText::RenderRubyText(Element& element, RenderStyle&& style)
     : RenderBlockFlow(element, WTFMove(style))
 {
index 0c46c6c..82666a5 100644 (file)
@@ -35,6 +35,7 @@
 namespace WebCore {
 
 class RenderRubyText final : public RenderBlockFlow {
+    WTF_MAKE_ISO_ALLOCATED(RenderRubyText);
 public:
     RenderRubyText(Element&, RenderStyle&&);
     virtual ~RenderRubyText();
index e234744..4c1d677 100644 (file)
 #include "RenderScrollbar.h"
 #include "RenderScrollbarTheme.h"
 #include "RenderView.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderScrollbarPart);
+
 RenderScrollbarPart::RenderScrollbarPart(Document& document, RenderStyle&& style, RenderScrollbar* scrollbar, ScrollbarPart part)
     : RenderBlock(document, WTFMove(style), 0)
     , m_scrollbar(scrollbar)
index da0ccd6..8f8b9e9 100644 (file)
@@ -33,6 +33,7 @@ namespace WebCore {
 class RenderScrollbar;
 
 class RenderScrollbarPart final : public RenderBlock {
+    WTF_MAKE_ISO_ALLOCATED(RenderScrollbarPart);
 public:
     RenderScrollbarPart(Document&, RenderStyle&&, RenderScrollbar* = nullptr, ScrollbarPart = NoPart);
     
index 1afac0c..d430604 100644 (file)
 #include "RenderView.h"
 #include "StyleResolver.h"
 #include "TextControlInnerElements.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
 using namespace HTMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSearchField);
+
 RenderSearchField::RenderSearchField(HTMLInputElement& element, RenderStyle&& style)
     : RenderTextControlSingleLine(element, WTFMove(style))
     , m_searchPopupIsVisible(false)
index de50152..3a841de 100644 (file)
@@ -31,6 +31,7 @@ namespace WebCore {
 class HTMLInputElement;
 
 class RenderSearchField final : public RenderTextControlSingleLine, private PopupMenuClient {
+    WTF_MAKE_ISO_ALLOCATED(RenderSearchField);
 public:
     RenderSearchField(HTMLInputElement&, RenderStyle&&);
     virtual ~RenderSearchField();
index 39b5554..37ec8f5 100644 (file)
 #include "SliderThumbElement.h"
 #include "StepRange.h"
 #include "StyleResolver.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/MathExtras.h>
 #include <wtf/StackStats.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSlider);
+
 const int RenderSlider::defaultTrackLength = 129;
 
 RenderSlider::RenderSlider(HTMLInputElement& element, RenderStyle&& style)
index 038c840..5144024 100644 (file)
@@ -28,6 +28,7 @@ class HTMLInputElement;
 class MouseEvent;
 
 class RenderSlider final : public RenderFlexibleBox {
+    WTF_MAKE_ISO_ALLOCATED(RenderSlider);
 public:
     static const int defaultTrackLength;
 
index 59a44cf..ae1f161 100644 (file)
@@ -47,6 +47,7 @@
 #include "RenderTableSection.h"
 #include "RenderView.h"
 #include "StyleInheritedData.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/SetForScope.h>
 #include <wtf/StackStats.h>
 
@@ -54,6 +55,8 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderTable);
+
 RenderTable::RenderTable(Element& element, RenderStyle&& style)
     : RenderBlock(element, WTFMove(style), 0)
     , m_currentBorder(nullptr)
index c3f8b21..01ccc5d 100644 (file)
@@ -42,6 +42,7 @@ class TableLayout;
 enum SkipEmptySectionsValue { DoNotSkipEmptySections, SkipEmptySections };
 
 class RenderTable : public RenderBlock {
+    WTF_MAKE_ISO_ALLOCATED(RenderTable);
 public:
     RenderTable(Element&, RenderStyle&&);
     RenderTable(Document&, RenderStyle&&);
index 224a619..b76d7f5 100644 (file)
 #include "RenderTableCaption.h"
 
 #include "RenderTable.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderTableCaption);
+
 RenderTableCaption::RenderTableCaption(Element& element, RenderStyle&& style)
     : RenderBlockFlow(element, WTFMove(style))
 {
index 7fb19cf..36f87aa 100644 (file)
@@ -26,6 +26,7 @@ namespace WebCore {
 class RenderTable;
 
 class RenderTableCaption final : public RenderBlockFlow {
+    WTF_MAKE_ISO_ALLOCATED(RenderTableCaption);
 public:
     RenderTableCaption(Element&, RenderStyle&&);
     virtual ~RenderTableCaption();
index f416034..28e7639 100644 (file)
@@ -35,6 +35,7 @@
 #include "RenderView.h"
 #include "StyleProperties.h"
 #include "TransformState.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 
 #if ENABLE(MATHML)
@@ -46,6 +47,8 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderTableCell);
+
 struct SameSizeAsRenderTableCell : public RenderBlockFlow {
     unsigned bitfields;
     LayoutUnit paddings[2];
index 88422e0..3894c4b 100644 (file)
@@ -37,6 +37,7 @@ static const unsigned maxColumnIndex = 0x1FFFFFE; // 33554430
 enum IncludeBorderColorOrNot { DoNotIncludeBorderColor, IncludeBorderColor };
 
 class RenderTableCell final : public RenderBlockFlow {
+    WTF_MAKE_ISO_ALLOCATED(RenderTableCell);
 public:
     RenderTableCell(Element&, RenderStyle&&);
     RenderTableCell(Document&, RenderStyle&&);
index b655d52..1e2f544 100644 (file)
 #include "RenderTable.h"
 #include "RenderTableCaption.h"
 #include "RenderTableCell.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
 using namespace HTMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderTableCol);
+
 RenderTableCol::RenderTableCol(Element& element, RenderStyle&& style)
     : RenderBox(element, WTFMove(style), 0)
 {
index e9fbd96..05745dd 100644 (file)
@@ -33,6 +33,7 @@ class RenderTable;
 class RenderTableCell;
 
 class RenderTableCol final : public RenderBox {
+    WTF_MAKE_ISO_ALLOCATED(RenderTableCol);
 public:
     RenderTableCol(Element&, RenderStyle&&);
     Element& element() const { return downcast<Element>(nodeForNonAnonymous()); }
index 112bc66..4d49b9f 100644 (file)
 #include "RenderTableCell.h"
 #include "RenderView.h"
 #include "StyleInheritedData.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 
 namespace WebCore {
 
 using namespace HTMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderTableRow);
+
 RenderTableRow::RenderTableRow(Element& element, RenderStyle&& style)
     : RenderBox(element, WTFMove(style), 0)
     , m_rowIndex(unsetRowIndex)
index 4106188..9e54771 100644 (file)
@@ -32,6 +32,7 @@ static const unsigned unsetRowIndex = 0x7FFFFFFF;
 static const unsigned maxRowIndex = 0x7FFFFFFE; // 2,147,483,646
 
 class RenderTableRow final : public RenderBox {
+    WTF_MAKE_ISO_ALLOCATED(RenderTableRow);
 public:
     RenderTableRow(Element&, RenderStyle&&);
     RenderTableRow(Document&, RenderStyle&&);
index c8b2098..faac5b5 100644 (file)
@@ -38,6 +38,7 @@
 #include "RenderView.h"
 #include "StyleInheritedData.h"
 #include <limits>
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/HashSet.h>
 #include <wtf/StackStats.h>
 
@@ -45,6 +46,8 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderTableSection);
+
 // Those 2 variables are used to balance the memory consumption vs the repaint time on big tables.
 static const unsigned gMinTableSizeToUseFastPaintPathWithOverflowingCell = 75 * 75;
 static const float gMaxAllowedOverflowingCellRatioForFastPaintPath = 0.1f;
index 45c6cde..25ceb08 100644 (file)
@@ -53,6 +53,7 @@ public:
 };
 
 class RenderTableSection final : public RenderBox {
+    WTF_MAKE_ISO_ALLOCATED(RenderTableSection);
 public:
     RenderTableSection(Element&, RenderStyle&&);
     RenderTableSection(Document&, RenderStyle&&);
index f6b5722..d2cdf42 100644 (file)
@@ -49,6 +49,7 @@
 #include <wtf/text/TextBreakIterator.h>
 #include "TextResourceDecoder.h"
 #include "VisiblePosition.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/NeverDestroyed.h>
 #include <wtf/text/StringBuffer.h>
 #include <wtf/text/StringBuilder.h>
@@ -67,6 +68,8 @@ namespace WebCore {
 using namespace WTF;
 using namespace Unicode;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderText);
+
 struct SameSizeAsRenderText : public RenderObject {
     void* pointers[2];
     uint32_t bitfields : 16;
index 3e2b5fb..d86f0b4 100644 (file)
@@ -36,6 +36,7 @@ class InlineTextBox;
 struct GlyphOverflow;
 
 class RenderText : public RenderObject {
+    WTF_MAKE_ISO_ALLOCATED(RenderText);
 public:
     RenderText(Text&, const String&);
     RenderText(Document&, const String&);
index 11dc013..060be39 100644 (file)
 #include "StyleProperties.h"
 #include "TextControlInnerElements.h"
 #include "VisiblePosition.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/unicode/CharacterNames.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderTextControl);
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderTextControlInnerContainer);
+
 RenderTextControl::RenderTextControl(HTMLTextFormControlElement& element, RenderStyle&& style)
     : RenderBlockFlow(element, WTFMove(style))
 {
index 56b76a5..a92e5fc 100644 (file)
@@ -30,6 +30,7 @@ class TextControlInnerTextElement;
 class HTMLTextFormControlElement;
 
 class RenderTextControl : public RenderBlockFlow {
+    WTF_MAKE_ISO_ALLOCATED(RenderTextControl);
 public:
     virtual ~RenderTextControl();
 
@@ -87,6 +88,7 @@ private:
 // baseline definition, and then inputs of different types wouldn't line up
 // anymore.
 class RenderTextControlInnerContainer final : public RenderFlexibleBox {
+    WTF_MAKE_ISO_ALLOCATED(RenderTextControlInnerContainer);
 public:
     explicit RenderTextControlInnerContainer(Element& element, RenderStyle&& style)
         : RenderFlexibleBox(element, WTFMove(style))
index fd632a6..526385c 100644 (file)
 #include "ShadowRoot.h"
 #include "StyleInheritedData.h"
 #include "TextControlInnerElements.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderTextControlMultiLine);
+
 RenderTextControlMultiLine::RenderTextControlMultiLine(HTMLTextAreaElement& element, RenderStyle&& style)
     : RenderTextControl(element, WTFMove(style))
 {
index 2e91b24..721af9f 100644 (file)
@@ -27,6 +27,7 @@
 namespace WebCore {
 
 class RenderTextControlMultiLine final : public RenderTextControl {
+    WTF_MAKE_ISO_ALLOCATED(RenderTextControlMultiLine);
 public:
     RenderTextControlMultiLine(HTMLTextAreaElement&, RenderStyle&&);
     virtual ~RenderTextControlMultiLine();
index 7102252..1ea4e8f 100644 (file)
@@ -39,6 +39,7 @@
 #include "RenderView.h"
 #include "StyleResolver.h"
 #include "TextControlInnerElements.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 
 #if PLATFORM(IOS)
@@ -49,6 +50,9 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderTextControlSingleLine);
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderTextControlInnerBlock);
+
 RenderTextControlSingleLine::RenderTextControlSingleLine(HTMLInputElement& element, RenderStyle&& style)
     : RenderTextControl(element, WTFMove(style))
 {
index cba5d60..914481f 100644 (file)
@@ -28,6 +28,7 @@
 namespace WebCore {
 
 class RenderTextControlSingleLine : public RenderTextControl {
+    WTF_MAKE_ISO_ALLOCATED(RenderTextControlSingleLine);
 public:
     RenderTextControlSingleLine(HTMLInputElement&, RenderStyle&&);
     virtual ~RenderTextControlSingleLine();
@@ -84,6 +85,7 @@ inline HTMLElement* RenderTextControlSingleLine::innerBlockElement() const
 // ----------------------------
 
 class RenderTextControlInnerBlock final : public RenderBlockFlow {
+    WTF_MAKE_ISO_ALLOCATED(RenderTextControlInnerBlock);
 public:
     RenderTextControlInnerBlock(Element& element, RenderStyle&& style)
         : RenderBlockFlow(element, WTFMove(style))
index 008cbcd..f15beec 100644 (file)
 #include "RenderIterator.h"
 #include "RenderMultiColumnFlow.h"
 #include "Text.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderTextFragment);
+
 RenderTextFragment::RenderTextFragment(Text& textNode, const String& text, int startOffset, int length)
     : RenderText(textNode, text.substring(startOffset, length))
     , m_start(startOffset)
index 08fba8f..47ba069 100644 (file)
@@ -31,6 +31,7 @@ namespace WebCore {
 // We cache offsets so that text transformations can be applied in such a way that we can recover
 // the original unaltered string from our corresponding DOM node.
 class RenderTextFragment final : public RenderText {
+    WTF_MAKE_ISO_ALLOCATED(RenderTextFragment);
 public:
     RenderTextFragment(Text&, const String&, int startOffset, int length);
     RenderTextFragment(Document&, const String&, int startOffset, int length);
index 56fd910..55c9811 100644 (file)
 #include "RenderView.h"
 #include "TextTrackCueGeneric.h"
 #include "VTTCue.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderVTTCue);
+
 RenderVTTCue::RenderVTTCue(VTTCueBox& element, RenderStyle&& style)
     : RenderBlockFlow(element, WTFMove(style))
     , m_cue(element.getCue())
index f9ca5d8..d966c94 100644 (file)
@@ -37,6 +37,7 @@ class VTTCue;
 class VTTCueBox;
 
 class RenderVTTCue final : public RenderBlockFlow {
+    WTF_MAKE_ISO_ALLOCATED(RenderVTTCue);
 public:
     RenderVTTCue(VTTCueBox&, RenderStyle&&);
 
index fbf125c..0289205 100644 (file)
@@ -38,6 +38,7 @@
 #include "Page.h"
 #include "PaintInfo.h"
 #include "RenderView.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 
 #if ENABLE(FULLSCREEN_API)
@@ -48,6 +49,8 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderVideo);
+
 RenderVideo::RenderVideo(HTMLVideoElement& element, RenderStyle&& style)
     : RenderMedia(element, WTFMove(style))
 {
index 50e907c..8e25c68 100644 (file)
@@ -33,6 +33,7 @@
 namespace WebCore {
 
 class RenderVideo final : public RenderMedia {
+    WTF_MAKE_ISO_ALLOCATED(RenderVideo);
 public:
     RenderVideo(HTMLVideoElement&, RenderStyle&&);
     virtual ~RenderVideo();
index 5aa5f18..6a822ca 100644 (file)
 #include "Settings.h"
 #include "StyleInheritedData.h"
 #include "TransformState.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/SetForScope.h>
 #include <wtf/StackStats.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderView);
+
 struct FrameFlatteningLayoutDisallower {
     FrameFlatteningLayoutDisallower(FrameView& frameView)
         : m_frameView(frameView)
index d555e9b..9c5bb98 100644 (file)
@@ -38,6 +38,7 @@ class RenderLayerCompositor;
 class RenderQuote;
 
 class RenderView final : public RenderBlockFlow {
+    WTF_MAKE_ISO_ALLOCATED(RenderView);
 public:
     RenderView(Document&, RenderStyle&&);
     virtual ~RenderView();
index dc9c530..a2ecd08 100644 (file)
 #include "RenderLayerBacking.h"
 #include "RenderView.h"
 #include "SecurityOrigin.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 #include <wtf/Ref.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderWidget);
+
 static HashMap<const Widget*, RenderWidget*>& widgetRendererMap()
 {
     static HashMap<const Widget*, RenderWidget*>* staticWidgetRendererMap = new HashMap<const Widget*, RenderWidget*>;
index 8419811..8ae3d2c 100644 (file)
@@ -54,6 +54,7 @@ private:
 };
     
 class RenderWidget : public RenderReplaced, private OverlapTestRequestClient {
+    WTF_MAKE_ISO_ALLOCATED(RenderWidget);
 public:
     virtual ~RenderWidget();
 
index fc92e83..441f160 100644 (file)
@@ -36,6 +36,7 @@
 #include "MathMLNames.h"
 #include "MathMLPresentationElement.h"
 #include "RenderView.h"
+#include <wtf/IsoMallocInlines.h>
 
 #if ENABLE(DEBUG_MATH_LAYOUT)
 #include "PaintInfo.h"
@@ -45,6 +46,9 @@ namespace WebCore {
 
 using namespace MathMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderMathMLBlock);
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderMathMLTable);
+
 RenderMathMLBlock::RenderMathMLBlock(MathMLPresentationElement& container, RenderStyle&& style)
     : RenderBlock(container, WTFMove(style), 0)
     , m_mathMLStyle(MathMLStyle::create())
index 61a12ca..a0b2fb2 100644 (file)
@@ -40,6 +40,7 @@ class RenderMathMLOperator;
 class MathMLPresentationElement;
 
 class RenderMathMLBlock : public RenderBlock {
+    WTF_MAKE_ISO_ALLOCATED(RenderMathMLBlock);
 public:
     RenderMathMLBlock(MathMLPresentationElement&, RenderStyle&&);
     RenderMathMLBlock(Document&, RenderStyle&&);
@@ -96,6 +97,7 @@ private:
 };
 
 class RenderMathMLTable final : public RenderTable {
+    WTF_MAKE_ISO_ALLOCATED(RenderMathMLTable);
 public:
     explicit RenderMathMLTable(MathMLElement& element, RenderStyle&& style)
         : RenderTable(element, WTFMove(style))
index a98fa02..ec1a012 100644 (file)
 #include "RenderInline.h"
 #include "RenderMathMLFencedOperator.h"
 #include "RenderText.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/text/StringBuilder.h>
 
 namespace WebCore {
 
 using namespace MathMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderMathMLFenced);
+
 static const char* gOpeningBraceChar = "(";
 static const char* gClosingBraceChar = ")";
 
index 0db7df7..77a63c9 100644 (file)
@@ -35,6 +35,7 @@ namespace WebCore {
 class MathMLRowElement;
 
 class RenderMathMLFenced final : public RenderMathMLRow {
+    WTF_MAKE_ISO_ALLOCATED(RenderMathMLFenced);
 public:
     RenderMathMLFenced(MathMLRowElement&, RenderStyle&&);
 
index f244175..2a0255f 100644 (file)
 
 #include "MathMLOperatorDictionary.h"
 #include "MathMLOperatorElement.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
 using namespace MathMLOperatorDictionary;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderMathMLFencedOperator);
+
 RenderMathMLFencedOperator::RenderMathMLFencedOperator(Document& document, RenderStyle&& style, const String& operatorString, MathMLOperatorDictionary::Form form, unsigned short flags)
     : RenderMathMLOperator(document, WTFMove(style))
     , m_operatorForm(form)
index dc46641..6790718 100644 (file)
@@ -34,6 +34,7 @@
 namespace WebCore {
 
 class RenderMathMLFencedOperator final : public RenderMathMLOperator {
+    WTF_MAKE_ISO_ALLOCATED(RenderMathMLFencedOperator);
 public:
     RenderMathMLFencedOperator(Document&, RenderStyle&&, const String& operatorString, MathMLOperatorDictionary::Form, unsigned short flags = 0);
     void updateOperatorContent(const String&);
index a20bd12..dd5a230 100644 (file)
 #include "MathMLFractionElement.h"
 #include "PaintInfo.h"
 #include <cmath>
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderMathMLFraction);
+
 RenderMathMLFraction::RenderMathMLFraction(MathMLFractionElement& element, RenderStyle&& style)
     : RenderMathMLBlock(element, WTFMove(style))
 {
index 0ad9dff..2ed6924 100644 (file)
@@ -37,6 +37,7 @@ namespace WebCore {
 class MathMLFractionElement;
 
 class RenderMathMLFraction final : public RenderMathMLBlock {
+    WTF_MAKE_ISO_ALLOCATED(RenderMathMLFraction);
 public:
     RenderMathMLFraction(MathMLFractionElement&, RenderStyle&&);
 
index 615c50b..f8d8fa7 100644 (file)
 
 #include "MathMLNames.h"
 #include "MathMLRowElement.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
 using namespace MathMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderMathMLMath);
+
 RenderMathMLMath::RenderMathMLMath(MathMLRowElement& element, RenderStyle&& style)
     : RenderMathMLRow(element, WTFMove(style))
 {
index 11cc776..8ece511 100644 (file)
@@ -34,6 +34,7 @@ namespace WebCore {
 class MathMLRowElement;
 
 class RenderMathMLMath final : public RenderMathMLRow {
+    WTF_MAKE_ISO_ALLOCATED(RenderMathMLMath);
 public:
     RenderMathMLMath(MathMLRowElement&, RenderStyle&&);
 
index 7dde7a9..86fafe5 100644 (file)
 #include "GraphicsContext.h"
 #include "MathMLNames.h"
 #include "PaintInfo.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/MathExtras.h>
 
 namespace WebCore {
 
 using namespace MathMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderMathMLMenclose);
+
 // The MathML in HTML5 implementation note suggests drawing the left part of longdiv with a parenthesis.
 // For now, we use a Bezier curve and this somewhat arbitrary value.
 const unsigned short longDivLeftSpace = 10;
index e6168a6..7855e59 100644 (file)
@@ -33,7 +33,8 @@
 
 namespace WebCore {
 
-class RenderMathMLMenclose final: public RenderMathMLRow {
+class RenderMathMLMenclose final : public RenderMathMLRow {
+    WTF_MAKE_ISO_ALLOCATED(RenderMathMLMenclose);
 public:
     RenderMathMLMenclose(MathMLMencloseElement&, RenderStyle&&);
 
index 9f97926..9fc4a1b 100644 (file)
@@ -39,6 +39,7 @@
 #include "ScaleTransformOperation.h"
 #include "TransformOperations.h"
 #include <cmath>
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/MathExtras.h>
 #include <wtf/unicode/CharacterNames.h>
 
@@ -46,6 +47,8 @@ namespace WebCore {
 
 using namespace MathMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderMathMLOperator);
+
 RenderMathMLOperator::RenderMathMLOperator(MathMLOperatorElement& element, RenderStyle&& style)
     : RenderMathMLToken(element, WTFMove(style))
 {
index 1c99e44..be7dcb1 100644 (file)
@@ -36,6 +36,7 @@ namespace WebCore {
 class MathMLOperatorElement;
 
 class RenderMathMLOperator : public RenderMathMLToken {
+    WTF_MAKE_ISO_ALLOCATED(RenderMathMLOperator);
 public:
     RenderMathMLOperator(MathMLOperatorElement&, RenderStyle&&);
     RenderMathMLOperator(Document&, RenderStyle&&);
index 59b2b01..13dc894 100644 (file)
 #if ENABLE(MATHML)
 
 #include <cmath>
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderMathMLPadded);
+
 RenderMathMLPadded::RenderMathMLPadded(MathMLPaddedElement& element, RenderStyle&& style)
     : RenderMathMLRow(element, WTFMove(style))
 {
index b1598d8..71333e0 100644 (file)
@@ -33,6 +33,7 @@
 namespace WebCore {
 
 class RenderMathMLPadded final : public RenderMathMLRow {
+    WTF_MAKE_ISO_ALLOCATED(RenderMathMLPadded);
 public:
     RenderMathMLPadded(MathMLPaddedElement&, RenderStyle&&);
 
index 3d757a7..c8b9c0c 100644 (file)
 #include "RenderIterator.h"
 #include "RenderMathMLMenclose.h"
 #include "RenderMathMLOperator.h"
+#include <wtf/IsoMallocInlines.h>
 
 static const UChar gRadicalCharacter = 0x221A;
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderMathMLRoot);
+
 RenderMathMLRoot::RenderMathMLRoot(MathMLRowElement& element, RenderStyle&& style)
     : RenderMathMLRow(element, WTFMove(style))
 {
index 8211ff1..89fb161 100644 (file)
@@ -37,7 +37,7 @@ class MathMLRowElement;
 
 // Render base^(1/index), or sqrt(base) using radical notation.
 class RenderMathMLRoot final : public RenderMathMLRow {
-
+    WTF_MAKE_ISO_ALLOCATED(RenderMathMLRoot);
 public:
     RenderMathMLRoot(MathMLRowElement&, RenderStyle&&);
     void updateStyle();
index c9ac06e..89d26da 100644 (file)
 #include "RenderIterator.h"
 #include "RenderMathMLOperator.h"
 #include "RenderMathMLRoot.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
 using namespace MathMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderMathMLRow);
+
 RenderMathMLRow::RenderMathMLRow(MathMLRowElement& element, RenderStyle&& style)
     : RenderMathMLBlock(element, WTFMove(style))
 {
index f9c1678..a32317a 100644 (file)
@@ -35,6 +35,7 @@ namespace WebCore {
 class MathMLRowElement;
 
 class RenderMathMLRow : public RenderMathMLBlock {
+    WTF_MAKE_ISO_ALLOCATED(RenderMathMLRow);
 public:
     RenderMathMLRow(MathMLRowElement&, RenderStyle&&);
     MathMLRowElement& element() const;
index 05d50e0..6665014 100644 (file)
 #include "MathMLElement.h"
 #include "MathMLScriptsElement.h"
 #include "RenderMathMLOperator.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderMathMLScripts);
+
 static bool isPrescriptDelimiter(const RenderObject& renderObject)
 {
     return renderObject.node() && renderObject.node()->hasTagName(MathMLNames::mprescriptsTag);
index ff04e86..aa51833 100644 (file)
@@ -37,6 +37,7 @@ class MathMLScriptsElement;
 
 // Render a base with scripts.
 class RenderMathMLScripts : public RenderMathMLBlock {
+    WTF_MAKE_ISO_ALLOCATED(RenderMathMLScripts);
 public:
     RenderMathMLScripts(MathMLScriptsElement&, RenderStyle&&);
     RenderMathMLOperator* unembellishedOperator() final;
index 292c835..b645176 100644 (file)
 #if ENABLE(MATHML)
 
 #include "GraphicsContext.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderMathMLSpace);
+
 RenderMathMLSpace::RenderMathMLSpace(MathMLSpaceElement& element, RenderStyle&& style)
     : RenderMathMLBlock(element, WTFMove(style))
 {
index fd19be2..20cb155 100644 (file)
@@ -33,6 +33,7 @@
 namespace WebCore {
 
 class RenderMathMLSpace final : public RenderMathMLBlock {
+    WTF_MAKE_ISO_ALLOCATED(RenderMathMLSpace);
 public:
     RenderMathMLSpace(MathMLSpaceElement&, RenderStyle&&);
     MathMLSpaceElement& element() const { return static_cast<MathMLSpaceElement&>(nodeForNonAnonymous()); }
index a5c4c1c..e25f2a7 100644 (file)
 #include "PaintInfo.h"
 #include "RenderElement.h"
 #include "RenderIterator.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
 using namespace MathMLNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderMathMLToken);
+
 RenderMathMLToken::RenderMathMLToken(MathMLTokenElement& element, RenderStyle&& style)
     : RenderMathMLBlock(element, WTFMove(style))
 {
index 5101d6a..b7466f1 100644 (file)
@@ -36,6 +36,7 @@ namespace WebCore {
 class MathMLTokenElement;
 
 class RenderMathMLToken : public RenderMathMLBlock {
+    WTF_MAKE_ISO_ALLOCATED(RenderMathMLToken);
 public:
     RenderMathMLToken(MathMLTokenElement&, RenderStyle&&);
     RenderMathMLToken(Document&, RenderStyle&&);
index 2ab8cc5..676016f 100644 (file)
 #include "MathMLUnderOverElement.h"
 #include "RenderIterator.h"
 #include "RenderMathMLOperator.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderMathMLUnderOver);
+
 RenderMathMLUnderOver::RenderMathMLUnderOver(MathMLUnderOverElement& element, RenderStyle&& style)
     : RenderMathMLScripts(element, WTFMove(style))
 {
index 6c08d47..cfb2221 100644 (file)
@@ -35,6 +35,7 @@ namespace WebCore {
 class MathMLUnderOverElement;
 
 class RenderMathMLUnderOver final : public RenderMathMLScripts {
+    WTF_MAKE_ISO_ALLOCATED(RenderMathMLUnderOver);
 public:
     RenderMathMLUnderOver(MathMLUnderOverElement&, RenderStyle&&);
 
index ab63ecf..b011675 100644 (file)
 #include "RenderSVGResource.h"
 #include "SVGResourcesCache.h"
 #include "StyleInheritedData.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGBlock);
+
 RenderSVGBlock::RenderSVGBlock(SVGGraphicsElement& element, RenderStyle&& style)
     : RenderBlockFlow(element, WTFMove(style))
 {
index fc3a25a..fedba66 100644 (file)
@@ -27,6 +27,7 @@ namespace WebCore {
 class SVGElement;
 
 class RenderSVGBlock : public RenderBlockFlow {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGBlock);
 public:
     LayoutRect visualOverflowRect() const final;
 
index 4338750..9b1dffd 100644 (file)
 #include "SVGRenderingContext.h"
 #include "SVGResources.h"
 #include "SVGResourcesCache.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGContainer);
+
 RenderSVGContainer::RenderSVGContainer(SVGElement& element, RenderStyle&& style)
     : RenderSVGModelObject(element, WTFMove(style))
     , m_objectBoundingBoxValid(false)
index 4d30a9a..307f511 100644 (file)
@@ -29,6 +29,7 @@ namespace WebCore {
 class SVGElement;
 
 class RenderSVGContainer : public RenderSVGModelObject {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGContainer);
 public:
     virtual ~RenderSVGContainer();
 
index 28b471f..c80e4fc 100644 (file)
 
 #include "SVGCircleElement.h"
 #include "SVGEllipseElement.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGEllipse);
+
 RenderSVGEllipse::RenderSVGEllipse(SVGGraphicsElement& element, RenderStyle&& style)
     : RenderSVGShape(element, WTFMove(style))
     , m_usePathFallback(false)
index a4deb99..9f74938 100644 (file)
@@ -31,6 +31,7 @@
 namespace WebCore {
 
 class RenderSVGEllipse final : public RenderSVGShape {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGEllipse);
 public:
     RenderSVGEllipse(SVGGraphicsElement&, RenderStyle&&);
     virtual ~RenderSVGEllipse();
index 7203bb2..f0724a9 100644 (file)
 #include "SVGRenderingContext.h"
 #include "SVGResourcesCache.h"
 #include "TransformState.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGForeignObject);
+
 RenderSVGForeignObject::RenderSVGForeignObject(SVGForeignObjectElement& element, RenderStyle&& style)
     : RenderSVGBlock(element, WTFMove(style))
 {
index 3461d2c..1d53ce0 100644 (file)
@@ -30,6 +30,7 @@ namespace WebCore {
 class SVGForeignObjectElement;
 
 class RenderSVGForeignObject final : public RenderSVGBlock {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGForeignObject);
 public:
     RenderSVGForeignObject(SVGForeignObjectElement&, RenderStyle&&);
     virtual ~RenderSVGForeignObject();
index e040307..a839762 100644 (file)
 #include "SVGNames.h"
 #include "SVGResourcesCache.h"
 #include "SVGStopElement.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 
 namespace WebCore {
     
 using namespace SVGNames;
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGGradientStop);
+
 RenderSVGGradientStop::RenderSVGGradientStop(SVGStopElement& element, RenderStyle&& style)
     : RenderElement(element, WTFMove(style), 0)
 {
index 46ba3d3..3550ed1 100644 (file)
@@ -30,6 +30,7 @@ class SVGGradientElement;
 
 // This class exists mostly so we can hear about gradient stop style changes
 class RenderSVGGradientStop final : public RenderElement {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGGradientStop);
 public:
     RenderSVGGradientStop(SVGStopElement&, RenderStyle&&);
     virtual ~RenderSVGGradientStop();
index 39487aa..f8ebb12 100644 (file)
 #include "RenderSVGHiddenContainer.h"
 
 #include "RenderSVGPath.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGHiddenContainer);
+
 RenderSVGHiddenContainer::RenderSVGHiddenContainer(SVGElement& element, RenderStyle&& style)
     : RenderSVGContainer(element, WTFMove(style))
 {
index 236438d..3f08195 100644 (file)
@@ -28,6 +28,7 @@ class SVGElement;
 // This class is for containers which are never drawn, but do need to support style
 // <defs>, <linearGradient>, <radialGradient> are all good examples
 class RenderSVGHiddenContainer : public RenderSVGContainer {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGHiddenContainer);
 public:
     RenderSVGHiddenContainer(SVGElement&, RenderStyle&&);
 
index 49c76c1..94eefe8 100644 (file)
 #include "SVGRenderingContext.h"
 #include "SVGResources.h"
 #include "SVGResourcesCache.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGImage);
+
 RenderSVGImage::RenderSVGImage(SVGImageElement& element, RenderStyle&& style)
     : RenderSVGModelObject(element, WTFMove(style))
     , m_needsBoundariesUpdate(true)
index 0b688f3..a227c16 100644 (file)
@@ -33,6 +33,7 @@ class RenderImageResource;
 class SVGImageElement;
 
 class RenderSVGImage final : public RenderSVGModelObject {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGImage);
 public:
     RenderSVGImage(SVGImageElement&, RenderStyle&&);
     virtual ~RenderSVGImage();
index c95c972..2839a7f 100644 (file)
 #include "RenderSVGText.h"
 #include "SVGInlineFlowBox.h"
 #include "SVGResourcesCache.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
+
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGInline);
     
 RenderSVGInline::RenderSVGInline(SVGGraphicsElement& element, RenderStyle&& style)
     : RenderInline(element, WTFMove(style))
index 8b8bcee..af9e23b 100644 (file)
@@ -26,6 +26,7 @@
 namespace WebCore {
 
 class RenderSVGInline : public RenderInline {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGInline);
 public:
     RenderSVGInline(SVGGraphicsElement&, RenderStyle&&);
 
index 373c5b2..29fda46 100644 (file)
 #include "StyleFontSizeFunctions.h"
 #include "StyleResolver.h"
 #include "VisiblePosition.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGInlineText);
+
 static String applySVGWhitespaceRules(const String& string, bool preserveWhiteSpace)
 {
     String newString = string;
index 8b5751a..dc9cd90 100644 (file)
@@ -31,6 +31,7 @@ namespace WebCore {
 class SVGInlineTextBox;
 
 class RenderSVGInlineText final : public RenderText {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGInlineText);
 public:
     RenderSVGInlineText(Text&, const String&);
 
index caa74ef..92ab653 100644 (file)
 #include "SVGNames.h"
 #include "SVGResourcesCache.h"
 #include "ShadowRoot.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGModelObject);
+
 RenderSVGModelObject::RenderSVGModelObject(SVGElement& element, RenderStyle&& style)
     : RenderElement(element, WTFMove(style), 0)
     , m_hasSVGShadow(false)
index d396bec..8e3a0e1 100644 (file)
@@ -44,6 +44,7 @@ namespace WebCore {
 class SVGElement;
 
 class RenderSVGModelObject : public RenderElement {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGModelObject);
 public:
     LayoutRect clippedOverflowRectForRepaint(const RenderLayerModelObject* repaintContainer) const override;
     FloatRect computeFloatRectForRepaint(const FloatRect&, const RenderLayerModelObject* repaintContainer, bool fixed = false) const final;
index 5e4ee3f..494ad55 100644 (file)
 
 #include "SVGPathElement.h"
 #include "SVGSubpathData.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGPath);
+
 RenderSVGPath::RenderSVGPath(SVGGraphicsElement& element, RenderStyle&& style)
     : RenderSVGShape(element, WTFMove(style))
 {
index 6b69e23..5316790 100644 (file)
@@ -30,6 +30,7 @@
 namespace WebCore {
 
 class RenderSVGPath final : public RenderSVGShape {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGPath);
 public:
     RenderSVGPath(SVGGraphicsElement&, RenderStyle&&);
     virtual ~RenderSVGPath();
index 7727b87..e1a594f 100644 (file)
 #include "config.h"
 #include "RenderSVGRect.h"
 
+#include <wtf/IsoMallocInlines.h>
+
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGRect);
+
 RenderSVGRect::RenderSVGRect(SVGRectElement& element, RenderStyle&& style)
     : RenderSVGShape(element, WTFMove(style))
     , m_usePathFallback(false)
index b4fde17..fbe6718 100644 (file)
@@ -33,6 +33,7 @@
 namespace WebCore {
 
 class RenderSVGRect final : public RenderSVGShape {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGRect);
 public:
     RenderSVGRect(SVGRectElement&, RenderStyle&&);
     virtual ~RenderSVGRect();
index ebd8c1f..617db84 100644 (file)
 #include "SVGResources.h"
 #include "SVGResourcesCache.h"
 #include "SVGUseElement.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGResourceClipper);
+
 RenderSVGResourceClipper::RenderSVGResourceClipper(SVGClipPathElement& element, RenderStyle&& style)
     : RenderSVGResourceContainer(element, WTFMove(style))
 {
index 46c32a1..556cc1d 100644 (file)
@@ -33,6 +33,7 @@ class ImageBuffer;
 typedef std::unique_ptr<ImageBuffer> ClipperMaskImage;
 
 class RenderSVGResourceClipper final : public RenderSVGResourceContainer {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGResourceClipper);
 public:
     RenderSVGResourceClipper(SVGClipPathElement&, RenderStyle&&);
     virtual ~RenderSVGResourceClipper();
index a5facda..014494b 100644 (file)
 #include "RenderView.h"
 #include "SVGRenderingContext.h"
 #include "SVGResourcesCache.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGResourceContainer);
+
 static inline SVGDocumentExtensions& svgExtensionsFromElement(SVGElement& element)
 {
     return element.document().accessSVGExtensions();
index 680a9e1..f637b71 100644 (file)
@@ -29,6 +29,7 @@ class RenderLayer;
 
 class RenderSVGResourceContainer : public RenderSVGHiddenContainer,
                                    public RenderSVGResource {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGResourceContainer);
 public:
     virtual ~RenderSVGResourceContainer();
 
index 0df66ce..3711783 100644 (file)
 #include "SVGRenderingContext.h"
 #include "Settings.h"
 #include "SourceGraphic.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGResourceFilter);
+
 RenderSVGResourceFilter::RenderSVGResourceFilter(SVGFilterElement& element, RenderStyle&& style)
     : RenderSVGResourceContainer(element, WTFMove(style))
 {
index 0982e82..8310ddf 100644 (file)
@@ -59,6 +59,7 @@ public:
 class GraphicsContext;
 
 class RenderSVGResourceFilter final : public RenderSVGResourceContainer {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGResourceFilter);
 public:
     RenderSVGResourceFilter(SVGFilterElement&, RenderStyle&&);
     virtual ~RenderSVGResourceFilter();
index 323643b..0e62b79 100644 (file)
 #include "SVGFESpecularLightingElement.h"
 #include "SVGFilterPrimitiveStandardAttributes.h"
 #include "SVGNames.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGResourceFilterPrimitive);
+
 RenderSVGResourceFilterPrimitive::RenderSVGResourceFilterPrimitive(SVGFilterPrimitiveStandardAttributes& filterPrimitiveElement, RenderStyle&& style)
     : RenderSVGHiddenContainer(filterPrimitiveElement, WTFMove(style))
 {
index 7b546bf..e5f6b06 100644 (file)
@@ -34,6 +34,7 @@ class FilterEffect;
 class SVGFilterPrimitiveStandardAttributes;
 
 class RenderSVGResourceFilterPrimitive final : public RenderSVGHiddenContainer {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGResourceFilterPrimitive);
 public:
     RenderSVGResourceFilterPrimitive(SVGFilterPrimitiveStandardAttributes&, RenderStyle&&);
     SVGFilterPrimitiveStandardAttributes& filterPrimitiveElement() const;
index 198a0eb..0b5d9b6 100644 (file)
 #include "GraphicsContext.h"
 #include "RenderSVGText.h"
 #include "SVGRenderingContext.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGResourceGradient);
+
 RenderSVGResourceGradient::RenderSVGResourceGradient(SVGGradientElement& node, RenderStyle&& style)
     : RenderSVGResourceContainer(node, WTFMove(style))
 {
index ee8522a..cc360f4 100644 (file)
@@ -40,6 +40,7 @@ public:
 class GraphicsContext;
 
 class RenderSVGResourceGradient : public RenderSVGResourceContainer {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGResourceGradient);
 public:
     SVGGradientElement& gradientElement() const { return static_cast<SVGGradientElement&>(RenderSVGResourceContainer::element()); }
 
index d957d15..90b67bb 100644 (file)
 #include "config.h"
 #include "RenderSVGResourceLinearGradient.h"
 
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGResourceLinearGradient);
+
 RenderSVGResourceLinearGradient::RenderSVGResourceLinearGradient(SVGLinearGradientElement& element, RenderStyle&& style)
     : RenderSVGResourceGradient(element, WTFMove(style))
 {
index 8a28d75..ba2ab89 100644 (file)
@@ -27,6 +27,7 @@
 namespace WebCore {
 
 class RenderSVGResourceLinearGradient final : public RenderSVGResourceGradient {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGResourceLinearGradient);
 public:
     RenderSVGResourceLinearGradient(SVGLinearGradientElement&, RenderStyle&&);
     virtual ~RenderSVGResourceLinearGradient();
index cc5e21e..5948119 100644 (file)
 
 #include "GraphicsContext.h"
 #include "RenderSVGRoot.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGResourceMarker);
+
 RenderSVGResourceMarker::RenderSVGResourceMarker(SVGMarkerElement& element, RenderStyle&& style)
     : RenderSVGResourceContainer(element, WTFMove(style))
 {
index 90074f6..e3d9f83 100644 (file)
@@ -28,6 +28,7 @@ class AffineTransform;
 class RenderObject;
 
 class RenderSVGResourceMarker final : public RenderSVGResourceContainer {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGResourceMarker);
 public:
     RenderSVGResourceMarker(SVGMarkerElement&, RenderStyle&&);
     virtual ~RenderSVGResourceMarker();
index 22fd716..4717880 100644 (file)
 #include "Image.h"
 #include "IntRect.h"
 #include "SVGRenderingContext.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGResourceMasker);
+
 RenderSVGResourceMasker::RenderSVGResourceMasker(SVGMaskElement& element, RenderStyle&& style)
     : RenderSVGResourceContainer(element, WTFMove(style))
 {
index f3c7201..29e8e7c 100644 (file)
@@ -35,6 +35,7 @@ struct MaskerData {
 };
 
 class RenderSVGResourceMasker final : public RenderSVGResourceContainer {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGResourceMasker);
 public:
     RenderSVGResourceMasker(SVGMaskElement&, RenderStyle&&);
     virtual ~RenderSVGResourceMasker();
index b70189f..13ce6d7 100644 (file)
 #include "SVGRenderingContext.h"
 #include "SVGResources.h"
 #include "SVGResourcesCache.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGResourcePattern);
+
 RenderSVGResourcePattern::RenderSVGResourcePattern(SVGPatternElement& element, RenderStyle&& style)
     : RenderSVGResourceContainer(element, WTFMove(style))
 {
index fda0048..aed7b05 100644 (file)
@@ -26,6 +26,7 @@
 #include "RenderSVGResourceContainer.h"
 #include "SVGPatternElement.h"
 #include <memory>
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/HashMap.h>
 
 namespace WebCore {
@@ -38,6 +39,7 @@ public:
 };
 
 class RenderSVGResourcePattern final : public RenderSVGResourceContainer {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGResourcePattern);
 public:
     RenderSVGResourcePattern(SVGPatternElement&, RenderStyle&&);
     SVGPatternElement& patternElement() const;
index aba2186..012ca48 100644 (file)
 #include "config.h"
 #include "RenderSVGResourceRadialGradient.h"
 
+#include <wtf/IsoMallocInlines.h>
+
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGResourceRadialGradient);
+
 RenderSVGResourceRadialGradient::RenderSVGResourceRadialGradient(SVGRadialGradientElement& element, RenderStyle&& style)
     : RenderSVGResourceGradient(element, WTFMove(style))
 {
index 0b8ae3e..fb3050b 100644 (file)
@@ -29,6 +29,7 @@ namespace WebCore {
 class SVGRadialGradientElement;
 
 class RenderSVGResourceRadialGradient final : public RenderSVGResourceGradient {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGResourceRadialGradient);
 public:
     RenderSVGResourceRadialGradient(SVGRadialGradientElement&, RenderStyle&&);
     virtual ~RenderSVGResourceRadialGradient();
index 3b2b84d..8d53d8d 100644 (file)
 #include "SVGSVGElement.h"
 #include "SVGViewSpec.h"
 #include "TransformState.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGRoot);
+
 RenderSVGRoot::RenderSVGRoot(SVGSVGElement& element, RenderStyle&& style)
     : RenderReplaced(element, WTFMove(style))
     , m_objectBoundingBoxValid(false)
index d4bd390..4984262 100644 (file)
@@ -33,6 +33,7 @@ class RenderSVGResourceContainer;
 class SVGSVGElement;
 
 class RenderSVGRoot final : public RenderReplaced {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGRoot);
 public:
     RenderSVGRoot(SVGSVGElement&, RenderStyle&&);
     virtual ~RenderSVGRoot();
index 676782b..30a40e1 100644 (file)
 #include "SVGResourcesCache.h"
 #include "SVGURIReference.h"
 #include "StrokeStyleApplier.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGShape);
+
 class BoundingRectStrokeStyleApplier final : public StrokeStyleApplier {
 public:
     BoundingRectStrokeStyleApplier(const RenderSVGShape& renderer)
index 5adacd2..effa248 100644 (file)
@@ -43,6 +43,7 @@ class RenderSVGResource;
 class SVGGraphicsElement;
 
 class RenderSVGShape : public RenderSVGModelObject {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGShape);
 public:
     RenderSVGShape(SVGGraphicsElement&, RenderStyle&&);
     virtual ~RenderSVGShape();
diff --git a/Source/WebCore/rendering/svg/RenderSVGTSpan.cpp b/Source/WebCore/rendering/svg/RenderSVGTSpan.cpp
new file mode 100644 (file)
index 0000000..afa30ad
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#include "config.h"
+#include "RenderSVGTSpan.h"
+
+#include <wtf/IsoMallocInlines.h>
+
+namespace WebCore {
+
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGTSpan);
+
+} // namespace WebCore
+
index fd75d15..6a6e97c 100644 (file)
@@ -27,6 +27,7 @@
 namespace WebCore {
 
 class RenderSVGTSpan final : public RenderSVGInline {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGTSpan);
 public:
     explicit RenderSVGTSpan(SVGTextPositioningElement& element, RenderStyle&& style)
         : RenderSVGInline(element, WTFMove(style))
index 991d3b4..a52c07e 100644 (file)
 #include "SVGURIReference.h"
 #include "TransformState.h"
 #include "VisiblePosition.h"
+#include <wtf/IsoMallocInlines.h>
 #include <wtf/StackStats.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGText);
+
 RenderSVGText::RenderSVGText(SVGTextElement& element, RenderStyle&& style)
     : RenderSVGBlock(element, WTFMove(style))
     , m_needsReordering(false)
index 158671a..4fee655 100644 (file)
@@ -32,6 +32,7 @@ class SVGTextElement;
 class RenderSVGInlineText;
 
 class RenderSVGText final : public RenderSVGBlock {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGText);
 public:
     RenderSVGText(SVGTextElement&, RenderStyle&&);
     virtual ~RenderSVGText();
index 9c18e9e..b7dc3b0 100644 (file)
 #include "SVGPathElement.h"
 #include "SVGRootInlineBox.h"
 #include "SVGTextPathElement.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGTextPath);
+
 RenderSVGTextPath::RenderSVGTextPath(SVGTextPathElement& element, RenderStyle&& style)
     : RenderSVGInline(element, WTFMove(style))
 {
index 95a3792..5bc4b59 100644 (file)
@@ -25,6 +25,7 @@
 namespace WebCore {
 
 class RenderSVGTextPath final : public RenderSVGInline {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGTextPath);
 public:
     RenderSVGTextPath(SVGTextPathElement&, RenderStyle&&);
 
index 449886d..66353ec 100644 (file)
 
 #include "SVGGElement.h"
 #include "SVGUseElement.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
+
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGTransformableContainer);
     
 RenderSVGTransformableContainer::RenderSVGTransformableContainer(SVGGraphicsElement& element, RenderStyle&& style)
     : RenderSVGContainer(element, WTFMove(style))
index f211990..9a235ad 100644 (file)
@@ -27,6 +27,7 @@ namespace WebCore {
     
 class SVGGraphicsElement;
 class RenderSVGTransformableContainer final : public RenderSVGContainer {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGTransformableContainer);
 public:
     RenderSVGTransformableContainer(SVGGraphicsElement&, RenderStyle&&);
     SVGGraphicsElement& graphicsElement() { return downcast<SVGGraphicsElement>(RenderSVGContainer::element()); }
index 932fb85..b5bd36e 100644 (file)
 #include "GraphicsContext.h"
 #include "RenderView.h"
 #include "SVGSVGElement.h"
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(RenderSVGViewportContainer);
+
 RenderSVGViewportContainer::RenderSVGViewportContainer(SVGSVGElement& element, RenderStyle&& style)
     : RenderSVGContainer(element, WTFMove(style))
     , m_didTransformToRootUpdate(false)
index 56ac6fc..6b68539 100644 (file)
@@ -29,6 +29,7 @@ namespace WebCore {
 // This is used for non-root <svg> elements and <marker> elements, neither of which are SVGTransformable
 // thus we inherit from RenderSVGContainer instead of RenderSVGTransformableContainer
 class RenderSVGViewportContainer final : public RenderSVGContainer {
+    WTF_MAKE_ISO_ALLOCATED(RenderSVGViewportContainer);
 public:
     RenderSVGViewportContainer(SVGSVGElement&, RenderStyle&&);
 
index ee3ab99..114f9e7 100644 (file)
@@ -5,6 +5,7 @@ set(bmalloc_INCLUDE_DIRECTORIES
 )
 
 set(bmalloc_SOURCES
+    bmalloc/AllIsoHeaps.cpp
     bmalloc/Allocator.cpp
     bmalloc/AvailableMemory.cpp
     bmalloc/Cache.cpp
@@ -12,15 +13,21 @@ set(bmalloc_SOURCES
     bmalloc/Deallocator.cpp
     bmalloc/DebugHeap.cpp
     bmalloc/Environment.cpp
+    bmalloc/FreeList.cpp
     bmalloc/Gigacage.cpp
     bmalloc/Heap.cpp
     bmalloc/HeapKind.cpp
+    bmalloc/IsoHeapImpl.cpp
+    bmalloc/IsoTLS.cpp
+    bmalloc/IsoTLSEntry.cpp
+    bmalloc/IsoTLSLayout.cpp
     bmalloc/LargeMap.cpp
     bmalloc/Logging.cpp
     bmalloc/ObjectType.cpp
     bmalloc/Scavenger.cpp
     bmalloc/StaticMutex.cpp
     bmalloc/VMHeap.cpp
+    bmalloc/bmalloc.cpp
     bmalloc/mbmalloc.cpp
 )
 
index 7a8cb65..b1cd91f 100644 (file)
@@ -1,3 +1,300 @@
+2017-10-31  Filip Pizlo  <fpizlo@apple.com>
+
+        bmalloc should support strictly type-segregated isolated heaps
+        https://bugs.webkit.org/show_bug.cgi?id=178108
+
+        Reviewed by Saam Barati, Simon Fraser, and Ryosuke Niwa.
+        
+        This introduces a new allocation API in bmalloc called IsoHeap. An IsoHeap is templatized by
+        type and created in static storage. When unused, it takes only a few words. When you do use
+        it, each IsoHeap gets a bag of virtual pages unique to it. This prevents use-after-free bugs
+        in one IsoHeap from affecting any other memory. At worst, two pointers of the same type will
+        point to the same object even though they should not have.
+        
+        IsoHeaps allocate using a first-fit discipline that combines ideas from bmalloc and Riptide
+        (the JSC GC):
+        
+        Like Riptide, it uses a bump'n'pop allocator. What Riptide calls blocks, IsoHeaps calls
+        pages. Pages are collected into directories. Directories track pages using bitvectors, so
+        that it's easy to quickly find a completely free page or one that has at least one free
+        object. I think that the bump'n'pop allocator is as fast as the bmalloc Immix-style (page and
+        line) allocator, but is better at allocating in holes. It's guaranteed to follow a first-fit
+        discipline. However, the real reason why I wrote it that was is that this is what I'm more
+        familiar with. This is a part of the design I want to revisit (bug 179278).
+        
+        Like bmalloc, it uses a deallocation log. This means that the internal IsoHeap data
+        structures can be locked with a coarse-grained lock, since the deallocator only grabs it when
+        flushing the log. Similarly, the allocator only grabs it when refilling the bump'n'pop
+        FreeList.
+        
+        This adds a unit test for IsoHeaps. In this change, IsoHeaps are adopted only by WebCore's
+        RenderObject.
+        
+        Note that despite the use of GC concepts, it's not a goal to make this code directly sharable
+        with GC. The GC will probably have to do isolated heaps its own way (likely a special
+        Subspace or something like that).
+
+        * bmalloc.xcodeproj/project.pbxproj:
+        * bmalloc/Algorithm.h:
+        (bmalloc::findBitInWord):
+        * bmalloc/AllIsoHeaps.cpp: Added.
+        (bmalloc::AllIsoHeaps::AllIsoHeaps):
+        (bmalloc::AllIsoHeaps::add):
+        (bmalloc::AllIsoHeaps::head):
+        * bmalloc/AllIsoHeaps.h: Added.
+        * bmalloc/AllIsoHeapsInlines.h: Added.
+        (bmalloc::AllIsoHeaps::forEach):
+        * bmalloc/BMalloced.h: Added.
+        * bmalloc/Bits.h: Added.
+        (bmalloc::bitsArrayLength):
+        (bmalloc::BitsWordView::BitsWordView):
+        (bmalloc::BitsWordView::numBits const):
+        (bmalloc::BitsWordView::word const):
+        (bmalloc::BitsWordOwner::BitsWordOwner):
+        (bmalloc::BitsWordOwner::view const):
+        (bmalloc::BitsWordOwner::operator=):
+        (bmalloc::BitsWordOwner::setAll):
+        (bmalloc::BitsWordOwner::clearAll):
+        (bmalloc::BitsWordOwner::set):
+        (bmalloc::BitsWordOwner::numBits const):
+        (bmalloc::BitsWordOwner::arrayLength const):
+        (bmalloc::BitsWordOwner::word const):
+        (bmalloc::BitsWordOwner::word):
+        (bmalloc::BitsWordOwner::words const):
+        (bmalloc::BitsWordOwner::words):
+        (bmalloc::BitsAndWords::BitsAndWords):
+        (bmalloc::BitsAndWords::view const):
+        (bmalloc::BitsAndWords::numBits const):
+        (bmalloc::BitsAndWords::word const):
+        (bmalloc::BitsOrWords::BitsOrWords):
+        (bmalloc::BitsOrWords::view const):
+        (bmalloc::BitsOrWords::numBits const):
+        (bmalloc::BitsOrWords::word const):
+        (bmalloc::BitsNotWords::BitsNotWords):
+        (bmalloc::BitsNotWords::view const):
+        (bmalloc::BitsNotWords::numBits const):
+        (bmalloc::BitsNotWords::word const):
+        (bmalloc::BitsImpl::BitsImpl):
+        (bmalloc::BitsImpl::numBits const):
+        (bmalloc::BitsImpl::size const):
+        (bmalloc::BitsImpl::arrayLength const):
+        (bmalloc::BitsImpl::operator== const):
+        (bmalloc::BitsImpl::operator!= const):
+        (bmalloc::BitsImpl::at const):
+        (bmalloc::BitsImpl::operator[] const):
+        (bmalloc::BitsImpl::isEmpty const):
+        (bmalloc::BitsImpl::operator& const):
+        (bmalloc::BitsImpl::operator| const):
+        (bmalloc::BitsImpl::operator~ const):
+        (bmalloc::BitsImpl::forEachSetBit const):
+        (bmalloc::BitsImpl::forEachClearBit const):
+        (bmalloc::BitsImpl::forEachBit const):
+        (bmalloc::BitsImpl::findBit const):
+        (bmalloc::BitsImpl::findSetBit const):
+        (bmalloc::BitsImpl::findClearBit const):
+        (bmalloc::BitsImpl::wordView const):
+        (bmalloc::BitsImpl::atImpl const):
+        (bmalloc::Bits::Bits):
+        (bmalloc::Bits::operator=):
+        (bmalloc::Bits::resize):
+        (bmalloc::Bits::setAll):
+        (bmalloc::Bits::clearAll):
+        (bmalloc::Bits::setAndCheck):
+        (bmalloc::Bits::operator|=):
+        (bmalloc::Bits::operator&=):
+        (bmalloc::Bits::at const):
+        (bmalloc::Bits::operator[] const):
+        (bmalloc::Bits::BitReference::BitReference):
+        (bmalloc::Bits::BitReference::operator bool const):
+        (bmalloc::Bits::BitReference::operator=):
+        (bmalloc::Bits::at):
+        (bmalloc::Bits::operator[]):
+        * bmalloc/CryptoRandom.cpp: Replaced with Source/bmalloc/bmalloc/CryptoRandom.cpp.
+        (bmalloc::cryptoRandom):
+        * bmalloc/CryptoRandom.h: Replaced with Source/bmalloc/bmalloc/CryptoRandom.h.
+        * bmalloc/DeferredDecommit.h: Added.
+        * bmalloc/DeferredDecommitInlines.h: Added.
+        (bmalloc::DeferredDecommit::DeferredDecommit):
+        * bmalloc/DeferredTrigger.h: Added.
+        (bmalloc::DeferredTrigger::DeferredTrigger):
+        * bmalloc/DeferredTriggerInlines.h: Added.
+        (bmalloc::DeferredTrigger<trigger>::didBecome):
+        (bmalloc::DeferredTrigger<trigger>::handleDeferral):
+        * bmalloc/EligibilityResult.h: Added.
+        (bmalloc::EligibilityResult::EligibilityResult):
+        * bmalloc/EligibilityResultInlines.h: Added.
+        (bmalloc::EligibilityResult<Config>::EligibilityResult):
+        * bmalloc/FixedVector.h:
+        * bmalloc/FreeList.cpp: Added.
+        (bmalloc::FreeList::FreeList):
+        (bmalloc::FreeList::~FreeList):
+        (bmalloc::FreeList::clear):
+        (bmalloc::FreeList::initializeList):
+        (bmalloc::FreeList::initializeBump):
+        (bmalloc::FreeList::contains const):
+        * bmalloc/FreeList.h: Added.
+        (bmalloc::FreeCell::scramble):
+        (bmalloc::FreeCell::descramble):
+        (bmalloc::FreeCell::setNext):
+        (bmalloc::FreeCell::next const):
+        (bmalloc::FreeList::allocationWillFail const):
+        (bmalloc::FreeList::allocationWillSucceed const):
+        (bmalloc::FreeList::originalSize const):
+        (bmalloc::FreeList::head const):
+        * bmalloc/FreeListInlines.h: Added.
+        (bmalloc::FreeList::allocate):
+        (bmalloc::FreeList::forEach const):
+        * bmalloc/IsoAllocator.h: Added.
+        * bmalloc/IsoAllocatorInlines.h: Added.
+        (bmalloc::IsoAllocator<Config>::IsoAllocator):
+        (bmalloc::IsoAllocator<Config>::~IsoAllocator):
+        (bmalloc::IsoAllocator<Config>::allocate):
+        (bmalloc::IsoAllocator<Config>::allocateSlow):
+        (bmalloc::IsoAllocator<Config>::scavenge):
+        * bmalloc/IsoConfig.h: Added.
+        * bmalloc/IsoDeallocator.h: Added.
+        * bmalloc/IsoDeallocatorInlines.h: Added.
+        (bmalloc::IsoDeallocator<Config>::IsoDeallocator):
+        (bmalloc::IsoDeallocator<Config>::~IsoDeallocator):
+        (bmalloc::IsoDeallocator<Config>::deallocate):
+        (bmalloc::IsoDeallocator<Config>::scavenge):
+        * bmalloc/IsoDirectory.h: Added.
+        (bmalloc::IsoDirectoryBaseBase::IsoDirectoryBaseBase):
+        (bmalloc::IsoDirectoryBaseBase::~IsoDirectoryBaseBase):
+        (bmalloc::IsoDirectoryBase::heap):
+        * bmalloc/IsoDirectoryInlines.h: Added.
+        (bmalloc::IsoDirectoryBase<Config>::IsoDirectoryBase):
+        (bmalloc::passedNumPages>::IsoDirectory):
+        (bmalloc::passedNumPages>::takeFirstEligible):
+        (bmalloc::passedNumPages>::didBecome):
+        (bmalloc::passedNumPages>::didDecommit):
+        (bmalloc::passedNumPages>::scavenge):
+        (bmalloc::passedNumPages>::forEachCommittedPage):
+        * bmalloc/IsoDirectoryPage.h: Added.
+        (bmalloc::IsoDirectoryPage::index const):
+        * bmalloc/IsoDirectoryPageInlines.h: Added.
+        (bmalloc::IsoDirectoryPage<Config>::IsoDirectoryPage):
+        (bmalloc::IsoDirectoryPage<Config>::pageFor):
+        * bmalloc/IsoHeap.h: Added.
+        (bmalloc::api::IsoHeap::allocatorOffset):
+        (bmalloc::api::IsoHeap::setAllocatorOffset):
+        (bmalloc::api::IsoHeap::deallocatorOffset):
+        (bmalloc::api::IsoHeap::setDeallocatorOffset):
+        * bmalloc/IsoHeapImpl.cpp: Added.
+        (bmalloc::IsoHeapImplBase::IsoHeapImplBase):
+        (bmalloc::IsoHeapImplBase::~IsoHeapImplBase):
+        (bmalloc::IsoHeapImplBase::scavengeNow):
+        (bmalloc::IsoHeapImplBase::finishScavenging):
+        * bmalloc/IsoHeapImpl.h: Added.
+        * bmalloc/IsoHeapImplInlines.h: Added.
+        (bmalloc::IsoHeapImpl<Config>::IsoHeapImpl):
+        (bmalloc::IsoHeapImpl<Config>::takeFirstEligible):
+        (bmalloc::IsoHeapImpl<Config>::didBecomeEligible):
+        (bmalloc::IsoHeapImpl<Config>::scavenge):
+        (bmalloc::IsoHeapImpl<Config>::allocatorOffset):
+        (bmalloc::IsoHeapImpl<Config>::deallocatorOffset):
+        (bmalloc::IsoHeapImpl<Config>::numLiveObjects):
+        (bmalloc::IsoHeapImpl<Config>::numCommittedPages):
+        (bmalloc::IsoHeapImpl<Config>::forEachDirectory):
+        (bmalloc::IsoHeapImpl<Config>::forEachCommittedPage):
+        (bmalloc::IsoHeapImpl<Config>::forEachLiveObject):
+        * bmalloc/IsoHeapInlines.h: Added.
+        (bmalloc::api::IsoHeap<Type>::allocate):
+        (bmalloc::api::IsoHeap<Type>::tryAllocate):
+        (bmalloc::api::IsoHeap<Type>::deallocate):
+        (bmalloc::api::IsoHeap<Type>::scavenge):
+        (bmalloc::api::IsoHeap<Type>::isInitialized):
+        (bmalloc::api::IsoHeap<Type>::impl):
+        * bmalloc/IsoPage.h: Added.
+        (bmalloc::IsoPage::index const):
+        (bmalloc::IsoPage::directory):
+        (bmalloc::IsoPage::isInUseForAllocation const):
+        (bmalloc::IsoPage::indexOfFirstObject):
+        * bmalloc/IsoPageInlines.h: Added.
+        (bmalloc::IsoPage<Config>::tryCreate):
+        (bmalloc::IsoPage<Config>::IsoPage):
+        (bmalloc::IsoPage<Config>::free):
+        (bmalloc::IsoPage<Config>::startAllocating):
+        (bmalloc::IsoPage<Config>::stopAllocating):
+        (bmalloc::IsoPage<Config>::forEachLiveObject):
+        * bmalloc/IsoPageTrigger.h: Added.
+        * bmalloc/IsoTLS.cpp: Added.
+        (bmalloc::IsoTLS::scavenge):
+        (bmalloc::IsoTLS::IsoTLS):
+        (bmalloc::IsoTLS::ensureEntries):
+        (bmalloc::IsoTLS::destructor):
+        (bmalloc::IsoTLS::sizeForCapacity):
+        (bmalloc::IsoTLS::capacityForSize):
+        (bmalloc::IsoTLS::size):
+        (bmalloc::IsoTLS::forEachEntry):
+        * bmalloc/IsoTLS.h: Added.
+        * bmalloc/IsoTLSAllocatorEntry.h: Added.
+        * bmalloc/IsoTLSAllocatorEntryInlines.h: Added.
+        (bmalloc::IsoTLSAllocatorEntry<Config>::IsoTLSAllocatorEntry):
+        (bmalloc::IsoTLSAllocatorEntry<Config>::~IsoTLSAllocatorEntry):
+        (bmalloc::IsoTLSAllocatorEntry<Config>::construct):
+        * bmalloc/IsoTLSDeallocatorEntry.h: Added.
+        * bmalloc/IsoTLSDeallocatorEntryInlines.h: Added.
+        (bmalloc::IsoTLSDeallocatorEntry<Config>::IsoTLSDeallocatorEntry):
+        (bmalloc::IsoTLSDeallocatorEntry<Config>::~IsoTLSDeallocatorEntry):
+        (bmalloc::IsoTLSDeallocatorEntry<Config>::construct):
+        * bmalloc/IsoTLSEntry.cpp: Added.
+        (bmalloc::IsoTLSEntry::IsoTLSEntry):
+        (bmalloc::IsoTLSEntry::~IsoTLSEntry):
+        * bmalloc/IsoTLSEntry.h: Added.
+        (bmalloc::IsoTLSEntry::offset const):
+        (bmalloc::IsoTLSEntry::alignment const):
+        (bmalloc::IsoTLSEntry::size const):
+        (bmalloc::IsoTLSEntry::extent const):
+        * bmalloc/IsoTLSEntryInlines.h: Added.
+        (bmalloc::IsoTLSEntry::walkUpToInclusive):
+        (bmalloc::DefaultIsoTLSEntry<EntryType>::DefaultIsoTLSEntry):
+        (bmalloc::DefaultIsoTLSEntry<EntryType>::~DefaultIsoTLSEntry):
+        (bmalloc::DefaultIsoTLSEntry<EntryType>::move):
+        (bmalloc::DefaultIsoTLSEntry<EntryType>::destruct):
+        (bmalloc::DefaultIsoTLSEntry<EntryType>::scavenge):
+        * bmalloc/IsoTLSInlines.h: Added.
+        (bmalloc::IsoTLS::allocate):
+        (bmalloc::IsoTLS::deallocate):
+        (bmalloc::IsoTLS::scavenge):
+        (bmalloc::IsoTLS::allocator):
+        (bmalloc::IsoTLS::deallocator):
+        (bmalloc::IsoTLS::get):
+        (bmalloc::IsoTLS::set):
+        (bmalloc::IsoTLS::ensureHeap):
+        (bmalloc::IsoTLS::ensureHeapAndEntries):
+        * bmalloc/IsoTLSLayout.cpp: Added.
+        (bmalloc::IsoTLSLayout::IsoTLSLayout):
+        (bmalloc::IsoTLSLayout::add):
+        * bmalloc/IsoTLSLayout.h: Added.
+        (bmalloc::IsoTLSLayout::head const):
+        * bmalloc/PerHeapKind.h:
+        * bmalloc/PerProcess.h:
+        (bmalloc::PerProcess<T>::getFastCase):
+        * bmalloc/Scavenger.cpp:
+        (bmalloc::Scavenger::scavenge):
+        * bmalloc/Scavenger.h:
+        * bmalloc/bmalloc.h:
+        (bmalloc::api::scavengeThisThread):
+        * test: Added.
+        * test/testbmalloc.cpp: Added.
+        (hiddenTruthBecauseNoReturnIsStupid):
+        (usage):
+        (assertEmptyPointerSet):
+        (assertHasObjects):
+        (assertHasOnlyObjects):
+        (assertClean):
+        (testIsoSimple):
+        (testIsoSimpleScavengeBeforeDealloc):
+        (testIsoFlipFlopFragmentedPages):
+        (testIsoFlipFlopFragmentedPagesScavengeInMiddle):
+        (BisoMalloced::BisoMalloced):
+        (testBisoMalloced):
+        (BisoMallocedInline::BisoMallocedInline):
+        (testBisoMallocedInline):
+        (run):
+        (main):
+
 2017-10-30  Zan Dobersek  <zdobersek@igalia.com>
 
         [ARM64][Linux] Re-enable Gigacage
index f64fd9f..014b760 100644 (file)
@@ -6,8 +6,23 @@
        objectVersion = 46;
        objects = {
 
+/* Begin PBXAggregateTarget section */
+               0F7EB8501F95504B00F1ABCB /* All */ = {
+                       isa = PBXAggregateTarget;
+                       buildConfigurationList = 0F7EB8511F95504B00F1ABCB /* Build configuration list for PBXAggregateTarget "All" */;
+                       buildPhases = (
+                       );
+                       dependencies = (
+                               0F7EB8561F95505400F1ABCB /* PBXTargetDependency */,
+                       );
+                       name = All;
+                       productName = All;
+               };
+/* End PBXAggregateTarget section */
+
 /* Begin PBXBuildFile section */
                0F3DA0141F267AB800342C08 /* AllocationKind.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F3DA0131F267AB800342C08 /* AllocationKind.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F5167741FAD685C008236A8 /* bmalloc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F5167731FAD6852008236A8 /* bmalloc.cpp */; };
                0F5BF1471F22A8B10029D91D /* HeapKind.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F5BF1461F22A8B10029D91D /* HeapKind.h */; settings = {ATTRIBUTES = (Private, ); }; };
                0F5BF1491F22A8D80029D91D /* PerHeapKind.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F5BF1481F22A8D80029D91D /* PerHeapKind.h */; settings = {ATTRIBUTES = (Private, ); }; };
                0F5BF14D1F22B0C30029D91D /* Gigacage.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F5BF14C1F22B0C30029D91D /* Gigacage.h */; settings = {ATTRIBUTES = (Private, ); }; };
                0F5BF1521F22E1570029D91D /* Scavenger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F5BF1501F22E1570029D91D /* Scavenger.cpp */; };
                0F5BF1531F22E1570029D91D /* Scavenger.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F5BF1511F22E1570029D91D /* Scavenger.h */; settings = {ATTRIBUTES = (Private, ); }; };
                0F5BF1731F23C5710029D91D /* BExport.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F5BF1721F23C5710029D91D /* BExport.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               0F74B93E1F89713E00B935D3 /* CryptoRandom.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F74B93C1F89713E00B935D3 /* CryptoRandom.h */; };
+               0F74B93E1F89713E00B935D3 /* CryptoRandom.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F74B93C1F89713E00B935D3 /* CryptoRandom.h */; settings = {ATTRIBUTES = (Private, ); }; };
                0F74B93F1F89713E00B935D3 /* CryptoRandom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F74B93D1F89713E00B935D3 /* CryptoRandom.cpp */; };
+               0F7EB7F21F95285300F1ABCB /* testbmalloc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F7EB7F11F95285300F1ABCB /* testbmalloc.cpp */; };
+               0F7EB7FA1F95414C00F1ABCB /* libbmalloc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 14F271BE18EA3963008C152F /* libbmalloc.a */; };
+               0F7EB8231F9541B000F1ABCB /* EligibilityResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB7FC1F9541AD00F1ABCB /* EligibilityResult.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB8241F9541B000F1ABCB /* IsoHeapImplInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB7FD1F9541AD00F1ABCB /* IsoHeapImplInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB8251F9541B000F1ABCB /* DeferredTriggerInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB7FE1F9541AD00F1ABCB /* DeferredTriggerInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB8261F9541B000F1ABCB /* IsoAllocatorInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB7FF1F9541AD00F1ABCB /* IsoAllocatorInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB8271F9541B000F1ABCB /* IsoTLSDeallocatorEntryInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB8001F9541AD00F1ABCB /* IsoTLSDeallocatorEntryInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB8281F9541B000F1ABCB /* IsoDirectoryInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB8011F9541AD00F1ABCB /* IsoDirectoryInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB8291F9541B000F1ABCB /* FreeListInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB8021F9541AD00F1ABCB /* FreeListInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB82A1F9541B000F1ABCB /* IsoDirectoryPageInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB8031F9541AD00F1ABCB /* IsoDirectoryPageInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB82B1F9541B000F1ABCB /* IsoPageTrigger.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB8041F9541AD00F1ABCB /* IsoPageTrigger.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB82C1F9541B000F1ABCB /* IsoHeap.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB8051F9541AD00F1ABCB /* IsoHeap.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB82D1F9541B000F1ABCB /* IsoTLSEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB8061F9541AD00F1ABCB /* IsoTLSEntry.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB82E1F9541B000F1ABCB /* IsoPage.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB8071F9541AD00F1ABCB /* IsoPage.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB82F1F9541B000F1ABCB /* AllIsoHeaps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F7EB8081F9541AD00F1ABCB /* AllIsoHeaps.cpp */; };
+               0F7EB8301F9541B000F1ABCB /* IsoHeapInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB8091F9541AD00F1ABCB /* IsoHeapInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB8311F9541B000F1ABCB /* IsoPageInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB80A1F9541AE00F1ABCB /* IsoPageInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB8321F9541B000F1ABCB /* IsoTLSEntry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F7EB80B1F9541AE00F1ABCB /* IsoTLSEntry.cpp */; };
+               0F7EB8331F9541B000F1ABCB /* IsoTLSDeallocatorEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB80C1F9541AE00F1ABCB /* IsoTLSDeallocatorEntry.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB8341F9541B000F1ABCB /* AllIsoHeaps.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB80D1F9541AE00F1ABCB /* AllIsoHeaps.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB8351F9541B000F1ABCB /* IsoTLSEntryInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB80E1F9541AE00F1ABCB /* IsoTLSEntryInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB8361F9541B000F1ABCB /* IsoTLS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F7EB80F1F9541AE00F1ABCB /* IsoTLS.cpp */; };
+               0F7EB8371F9541B000F1ABCB /* IsoDirectory.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB8101F9541AE00F1ABCB /* IsoDirectory.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB8381F9541B000F1ABCB /* EligibilityResultInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB8111F9541AE00F1ABCB /* EligibilityResultInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB8391F9541B000F1ABCB /* DeferredTrigger.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB8121F9541AE00F1ABCB /* DeferredTrigger.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB83A1F9541B000F1ABCB /* IsoDeallocatorInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB8131F9541AE00F1ABCB /* IsoDeallocatorInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB83B1F9541B000F1ABCB /* IsoHeapImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F7EB8141F9541AE00F1ABCB /* IsoHeapImpl.cpp */; };
+               0F7EB83C1F9541B000F1ABCB /* IsoAllocator.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB8151F9541AF00F1ABCB /* IsoAllocator.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB83D1F9541B000F1ABCB /* DeferredDecommit.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB8161F9541AF00F1ABCB /* DeferredDecommit.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB83E1F9541B000F1ABCB /* FreeList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F7EB8171F9541AF00F1ABCB /* FreeList.cpp */; };
+               0F7EB83F1F9541B000F1ABCB /* IsoTLSLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F7EB8181F9541AF00F1ABCB /* IsoTLSLayout.cpp */; };
+               0F7EB8401F9541B000F1ABCB /* IsoTLSLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB8191F9541AF00F1ABCB /* IsoTLSLayout.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB8411F9541B000F1ABCB /* IsoConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB81A1F9541AF00F1ABCB /* IsoConfig.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB8421F9541B000F1ABCB /* IsoTLS.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB81B1F9541AF00F1ABCB /* IsoTLS.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB8431F9541B000F1ABCB /* IsoTLSAllocatorEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB81C1F9541AF00F1ABCB /* IsoTLSAllocatorEntry.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB8441F9541B000F1ABCB /* FreeList.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB81D1F9541AF00F1ABCB /* FreeList.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB8451F9541B000F1ABCB /* IsoHeapImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB81E1F9541B000F1ABCB /* IsoHeapImpl.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB8461F9541B000F1ABCB /* IsoTLSInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB81F1F9541B000F1ABCB /* IsoTLSInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB8471F9541B000F1ABCB /* IsoDeallocator.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB8201F9541B000F1ABCB /* IsoDeallocator.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB8481F9541B000F1ABCB /* IsoTLSAllocatorEntryInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB8211F9541B000F1ABCB /* IsoTLSAllocatorEntryInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB8491F9541B000F1ABCB /* IsoDirectoryPage.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB8221F9541B000F1ABCB /* IsoDirectoryPage.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB84C1F9541C700F1ABCB /* Bits.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB84A1F9541C600F1ABCB /* Bits.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB84D1F9541C700F1ABCB /* BMalloced.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB84B1F9541C600F1ABCB /* BMalloced.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB84F1F954D4E00F1ABCB /* AllIsoHeapsInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB84E1F954D4E00F1ABCB /* AllIsoHeapsInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               0F7EB85A1F955A1100F1ABCB /* DeferredDecommitInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB8591F955A0F00F1ABCB /* DeferredDecommitInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
                0FD557331F7EDB7B00B1F0A3 /* HeapKind.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FD557321F7EDB7B00B1F0A3 /* HeapKind.cpp */; };
                1400274918F89C1300115C97 /* Heap.h in Headers */ = {isa = PBXBuildFile; fileRef = 14DA320C18875B09007269E0 /* Heap.h */; settings = {ATTRIBUTES = (Private, ); }; };
                1400274A18F89C2300115C97 /* VMHeap.h in Headers */ = {isa = PBXBuildFile; fileRef = 144F7BFC18BFC517003537F3 /* VMHeap.h */; settings = {ATTRIBUTES = (Private, ); }; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
+               0F7EB7F71F95412900F1ABCB /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 145F6837179DC45F00D65598 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 14F271BD18EA3963008C152F;
+                       remoteInfo = bmalloc;
+               };
+               0F7EB8551F95505400F1ABCB /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 145F6837179DC45F00D65598 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 14F271BD18EA3963008C152F;
+                       remoteInfo = bmalloc;
+               };
                14CC394D18EA8861004AFE34 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 145F6837179DC45F00D65598 /* Project object */;
                };
 /* End PBXContainerItemProxy section */
 
+/* Begin PBXCopyFilesBuildPhase section */
+               0F7EB7ED1F95285300F1ABCB /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 2147483647;
+                       dstPath = /usr/share/man/man1/;
+                       dstSubfolderSpec = 0;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 1;
+               };
+/* End PBXCopyFilesBuildPhase section */
+
 /* Begin PBXFileReference section */
                0F3DA0131F267AB800342C08 /* AllocationKind.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AllocationKind.h; path = bmalloc/AllocationKind.h; sourceTree = "<group>"; };
+               0F5167731FAD6852008236A8 /* bmalloc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bmalloc.cpp; path = bmalloc/bmalloc.cpp; sourceTree = "<group>"; };
                0F5BF1461F22A8B10029D91D /* HeapKind.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = HeapKind.h; path = bmalloc/HeapKind.h; sourceTree = "<group>"; };
                0F5BF1481F22A8D80029D91D /* PerHeapKind.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PerHeapKind.h; path = bmalloc/PerHeapKind.h; sourceTree = "<group>"; };
                0F5BF14C1F22B0C30029D91D /* Gigacage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Gigacage.h; path = bmalloc/Gigacage.h; sourceTree = "<group>"; };
                0F5BF1721F23C5710029D91D /* BExport.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BExport.h; path = bmalloc/BExport.h; sourceTree = "<group>"; };
                0F74B93C1F89713E00B935D3 /* CryptoRandom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CryptoRandom.h; path = bmalloc/CryptoRandom.h; sourceTree = "<group>"; };
                0F74B93D1F89713E00B935D3 /* CryptoRandom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CryptoRandom.cpp; path = bmalloc/CryptoRandom.cpp; sourceTree = "<group>"; };
+               0F7EB7EF1F95285300F1ABCB /* libtestbmalloc */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; name = libtestbmalloc; path = testbmalloc; sourceTree = BUILT_PRODUCTS_DIR; };
+               0F7EB7F11F95285300F1ABCB /* testbmalloc.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = testbmalloc.cpp; sourceTree = "<group>"; };
+               0F7EB7FC1F9541AD00F1ABCB /* EligibilityResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EligibilityResult.h; path = bmalloc/EligibilityResult.h; sourceTree = SOURCE_ROOT; };
+               0F7EB7FD1F9541AD00F1ABCB /* IsoHeapImplInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsoHeapImplInlines.h; path = bmalloc/IsoHeapImplInlines.h; sourceTree = SOURCE_ROOT; };
+               0F7EB7FE1F9541AD00F1ABCB /* DeferredTriggerInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DeferredTriggerInlines.h; path = bmalloc/DeferredTriggerInlines.h; sourceTree = SOURCE_ROOT; };
+               0F7EB7FF1F9541AD00F1ABCB /* IsoAllocatorInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsoAllocatorInlines.h; path = bmalloc/IsoAllocatorInlines.h; sourceTree = SOURCE_ROOT; };
+               0F7EB8001F9541AD00F1ABCB /* IsoTLSDeallocatorEntryInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsoTLSDeallocatorEntryInlines.h; path = bmalloc/IsoTLSDeallocatorEntryInlines.h; sourceTree = SOURCE_ROOT; };
+               0F7EB8011F9541AD00F1ABCB /* IsoDirectoryInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsoDirectoryInlines.h; path = bmalloc/IsoDirectoryInlines.h; sourceTree = SOURCE_ROOT; };
+               0F7EB8021F9541AD00F1ABCB /* FreeListInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FreeListInlines.h; path = bmalloc/FreeListInlines.h; sourceTree = SOURCE_ROOT; };
+               0F7EB8031F9541AD00F1ABCB /* IsoDirectoryPageInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsoDirectoryPageInlines.h; path = bmalloc/IsoDirectoryPageInlines.h; sourceTree = SOURCE_ROOT; };
+               0F7EB8041F9541AD00F1ABCB /* IsoPageTrigger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsoPageTrigger.h; path = bmalloc/IsoPageTrigger.h; sourceTree = SOURCE_ROOT; };
+               0F7EB8051F9541AD00F1ABCB /* IsoHeap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsoHeap.h; path = bmalloc/IsoHeap.h; sourceTree = SOURCE_ROOT; };
+               0F7EB8061F9541AD00F1ABCB /* IsoTLSEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsoTLSEntry.h; path = bmalloc/IsoTLSEntry.h; sourceTree = SOURCE_ROOT; };
+               0F7EB8071F9541AD00F1ABCB /* IsoPage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsoPage.h; path = bmalloc/IsoPage.h; sourceTree = SOURCE_ROOT; };
+               0F7EB8081F9541AD00F1ABCB /* AllIsoHeaps.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AllIsoHeaps.cpp; path = bmalloc/AllIsoHeaps.cpp; sourceTree = SOURCE_ROOT; };
+               0F7EB8091F9541AD00F1ABCB /* IsoHeapInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsoHeapInlines.h; path = bmalloc/IsoHeapInlines.h; sourceTree = SOURCE_ROOT; };
+               0F7EB80A1F9541AE00F1ABCB /* IsoPageInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsoPageInlines.h; path = bmalloc/IsoPageInlines.h; sourceTree = SOURCE_ROOT; };
+               0F7EB80B1F9541AE00F1ABCB /* IsoTLSEntry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IsoTLSEntry.cpp; path = bmalloc/IsoTLSEntry.cpp; sourceTree = SOURCE_ROOT; };
+               0F7EB80C1F9541AE00F1ABCB /* IsoTLSDeallocatorEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsoTLSDeallocatorEntry.h; path = bmalloc/IsoTLSDeallocatorEntry.h; sourceTree = SOURCE_ROOT; };
+               0F7EB80D1F9541AE00F1ABCB /* AllIsoHeaps.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AllIsoHeaps.h; path = bmalloc/AllIsoHeaps.h; sourceTree = SOURCE_ROOT; };
+               0F7EB80E1F9541AE00F1ABCB /* IsoTLSEntryInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsoTLSEntryInlines.h; path = bmalloc/IsoTLSEntryInlines.h; sourceTree = SOURCE_ROOT; };
+               0F7EB80F1F9541AE00F1ABCB /* IsoTLS.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IsoTLS.cpp; path = bmalloc/IsoTLS.cpp; sourceTree = SOURCE_ROOT; };
+               0F7EB8101F9541AE00F1ABCB /* IsoDirectory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsoDirectory.h; path = bmalloc/IsoDirectory.h; sourceTree = SOURCE_ROOT; };
+               0F7EB8111F9541AE00F1ABCB /* EligibilityResultInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EligibilityResultInlines.h; path = bmalloc/EligibilityResultInlines.h; sourceTree = SOURCE_ROOT; };
+               0F7EB8121F9541AE00F1ABCB /* DeferredTrigger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DeferredTrigger.h; path = bmalloc/DeferredTrigger.h; sourceTree = SOURCE_ROOT; };
+               0F7EB8131F9541AE00F1ABCB /* IsoDeallocatorInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsoDeallocatorInlines.h; path = bmalloc/IsoDeallocatorInlines.h; sourceTree = SOURCE_ROOT; };
+               0F7EB8141F9541AE00F1ABCB /* IsoHeapImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IsoHeapImpl.cpp; path = bmalloc/IsoHeapImpl.cpp; sourceTree = SOURCE_ROOT; };
+               0F7EB8151F9541AF00F1ABCB /* IsoAllocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsoAllocator.h; path = bmalloc/IsoAllocator.h; sourceTree = SOURCE_ROOT; };
+               0F7EB8161F9541AF00F1ABCB /* DeferredDecommit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DeferredDecommit.h; path = bmalloc/DeferredDecommit.h; sourceTree = SOURCE_ROOT; };
+               0F7EB8171F9541AF00F1ABCB /* FreeList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FreeList.cpp; path = bmalloc/FreeList.cpp; sourceTree = SOURCE_ROOT; };
+               0F7EB8181F9541AF00F1ABCB /* IsoTLSLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IsoTLSLayout.cpp; path = bmalloc/IsoTLSLayout.cpp; sourceTree = SOURCE_ROOT; };
+               0F7EB8191F9541AF00F1ABCB /* IsoTLSLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsoTLSLayout.h; path = bmalloc/IsoTLSLayout.h; sourceTree = SOURCE_ROOT; };
+               0F7EB81A1F9541AF00F1ABCB /* IsoConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsoConfig.h; path = bmalloc/IsoConfig.h; sourceTree = SOURCE_ROOT; };
+               0F7EB81B1F9541AF00F1ABCB /* IsoTLS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsoTLS.h; path = bmalloc/IsoTLS.h; sourceTree = SOURCE_ROOT; };
+               0F7EB81C1F9541AF00F1ABCB /* IsoTLSAllocatorEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsoTLSAllocatorEntry.h; path = bmalloc/IsoTLSAllocatorEntry.h; sourceTree = SOURCE_ROOT; };
+               0F7EB81D1F9541AF00F1ABCB /* FreeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FreeList.h; path = bmalloc/FreeList.h; sourceTree = SOURCE_ROOT; };
+               0F7EB81E1F9541B000F1ABCB /* IsoHeapImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsoHeapImpl.h; path = bmalloc/IsoHeapImpl.h; sourceTree = SOURCE_ROOT; };
+               0F7EB81F1F9541B000F1ABCB /* IsoTLSInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsoTLSInlines.h; path = bmalloc/IsoTLSInlines.h; sourceTree = SOURCE_ROOT; };
+               0F7EB8201F9541B000F1ABCB /* IsoDeallocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsoDeallocator.h; path = bmalloc/IsoDeallocator.h; sourceTree = SOURCE_ROOT; };
+               0F7EB8211F9541B000F1ABCB /* IsoTLSAllocatorEntryInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsoTLSAllocatorEntryInlines.h; path = bmalloc/IsoTLSAllocatorEntryInlines.h; sourceTree = SOURCE_ROOT; };
+               0F7EB8221F9541B000F1ABCB /* IsoDirectoryPage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsoDirectoryPage.h; path = bmalloc/IsoDirectoryPage.h; sourceTree = SOURCE_ROOT; };
+               0F7EB84A1F9541C600F1ABCB /* Bits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Bits.h; path = bmalloc/Bits.h; sourceTree = "<group>"; };
+               0F7EB84B1F9541C600F1ABCB /* BMalloced.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BMalloced.h; path = bmalloc/BMalloced.h; sourceTree = "<group>"; };
+               0F7EB84E1F954D4E00F1ABCB /* AllIsoHeapsInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AllIsoHeapsInlines.h; path = bmalloc/AllIsoHeapsInlines.h; sourceTree = SOURCE_ROOT; };
+               0F7EB8591F955A0F00F1ABCB /* DeferredDecommitInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DeferredDecommitInlines.h; path = bmalloc/DeferredDecommitInlines.h; sourceTree = "<group>"; };
                0FD557321F7EDB7B00B1F0A3 /* HeapKind.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = HeapKind.cpp; path = bmalloc/HeapKind.cpp; sourceTree = "<group>"; };
                140FA00219CE429C00FFD3C8 /* BumpRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BumpRange.h; path = bmalloc/BumpRange.h; sourceTree = "<group>"; };
                140FA00419CE4B6800FFD3C8 /* LineMetadata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LineMetadata.h; path = bmalloc/LineMetadata.h; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
+               0F7EB7EC1F95285300F1ABCB /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               0F7EB7FA1F95414C00F1ABCB /* libbmalloc.a in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                14CC394118EA8743004AFE34 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
 /* End PBXFrameworksBuildPhase section */
 
 /* Begin PBXGroup section */
+               0F7EB7F01F95285300F1ABCB /* test */ = {
+                       isa = PBXGroup;
+                       children = (
+                               0F7EB7F11F95285300F1ABCB /* testbmalloc.cpp */,
+                       );
+                       path = test;
+                       sourceTree = "<group>";
+               };
+               0F7EB7F91F95414C00F1ABCB /* Frameworks */ = {
+                       isa = PBXGroup;
+                       children = (
+                       );
+                       name = Frameworks;
+                       sourceTree = "<group>";
+               };
+               0F7EB7FB1F95416900F1ABCB /* iso */ = {
+                       isa = PBXGroup;
+                       children = (
+                               0F7EB8081F9541AD00F1ABCB /* AllIsoHeaps.cpp */,
+                               0F7EB80D1F9541AE00F1ABCB /* AllIsoHeaps.h */,
+                               0F7EB84E1F954D4E00F1ABCB /* AllIsoHeapsInlines.h */,
+                               0F7EB8161F9541AF00F1ABCB /* DeferredDecommit.h */,
+                               0F7EB8591F955A0F00F1ABCB /* DeferredDecommitInlines.h */,
+                               0F7EB8121F9541AE00F1ABCB /* DeferredTrigger.h */,
+                               0F7EB7FE1F9541AD00F1ABCB /* DeferredTriggerInlines.h */,
+                               0F7EB7FC1F9541AD00F1ABCB /* EligibilityResult.h */,
+                               0F7EB8111F9541AE00F1ABCB /* EligibilityResultInlines.h */,
+                               0F7EB8171F9541AF00F1ABCB /* FreeList.cpp */,
+                               0F7EB81D1F9541AF00F1ABCB /* FreeList.h */,
+                               0F7EB8021F9541AD00F1ABCB /* FreeListInlines.h */,
+                               0F7EB8151F9541AF00F1ABCB /* IsoAllocator.h */,
+                               0F7EB7FF1F9541AD00F1ABCB /* IsoAllocatorInlines.h */,
+                               0F7EB81A1F9541AF00F1ABCB /* IsoConfig.h */,
+                               0F7EB8201F9541B000F1ABCB /* IsoDeallocator.h */,
+                               0F7EB8131F9541AE00F1ABCB /* IsoDeallocatorInlines.h */,
+                               0F7EB8101F9541AE00F1ABCB /* IsoDirectory.h */,
+                               0F7EB8011F9541AD00F1ABCB /* IsoDirectoryInlines.h */,
+                               0F7EB8221F9541B000F1ABCB /* IsoDirectoryPage.h */,
+                               0F7EB8031F9541AD00F1ABCB /* IsoDirectoryPageInlines.h */,
+                               0F7EB8051F9541AD00F1ABCB /* IsoHeap.h */,
+                               0F7EB8141F9541AE00F1ABCB /* IsoHeapImpl.cpp */,
+                               0F7EB81E1F9541B000F1ABCB /* IsoHeapImpl.h */,
+                               0F7EB7FD1F9541AD00F1ABCB /* IsoHeapImplInlines.h */,
+                               0F7EB8091F9541AD00F1ABCB /* IsoHeapInlines.h */,
+                               0F7EB8071F9541AD00F1ABCB /* IsoPage.h */,
+                               0F7EB80A1F9541AE00F1ABCB /* IsoPageInlines.h */,
+   &n