Permalink
Browse files

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.
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: http://svn.webkit.org/repository/webkit/trunk@224537 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  • Loading branch information...
fpizlo@apple.com
fpizlo@apple.com committed Nov 7, 2017
1 parent 8740993 commit d03c5940c7fce52378a59a56dcfa701772262fbc
Showing with 5,837 additions and 52 deletions.
  1. +15 −0 Source/WTF/ChangeLog
  2. +4 −0 Source/WTF/WTF.xcodeproj/project.pbxproj
  3. +6 −7 Source/WTF/wtf/FastTLS.h
  4. +41 −0 Source/WTF/wtf/IsoMalloc.h
  5. +43 −0 Source/WTF/wtf/IsoMallocInlines.h
  6. +235 −0 Source/WebCore/ChangeLog
  7. +1 −0 Source/WebCore/Sources.txt
  8. +4 −0 Source/WebCore/html/shadow/SliderThumbElement.cpp
  9. +1 −0 Source/WebCore/html/shadow/SliderThumbElement.h
  10. +2 −0 Source/WebCore/html/shadow/mac/ImageControlsButtonElementMac.cpp
  11. +2 −0 Source/WebCore/html/shadow/mac/ImageControlsRootElementMac.cpp
  12. +3 −0 Source/WebCore/rendering/RenderAttachment.cpp
  13. +1 −0 Source/WebCore/rendering/RenderAttachment.h
  14. +3 −0 Source/WebCore/rendering/RenderBlock.cpp
  15. +1 −0 Source/WebCore/rendering/RenderBlock.h
  16. +3 −0 Source/WebCore/rendering/RenderBlockFlow.cpp
  17. +1 −0 Source/WebCore/rendering/RenderBlockFlow.h
  18. +3 −0 Source/WebCore/rendering/RenderBox.cpp
  19. +1 −0 Source/WebCore/rendering/RenderBox.h
  20. +3 −0 Source/WebCore/rendering/RenderBoxModelObject.cpp
  21. +1 −0 Source/WebCore/rendering/RenderBoxModelObject.h
  22. +3 −0 Source/WebCore/rendering/RenderButton.cpp
  23. +1 −0 Source/WebCore/rendering/RenderButton.h
  24. +3 −0 Source/WebCore/rendering/RenderCombineText.cpp
  25. +1 −0 Source/WebCore/rendering/RenderCombineText.h
  26. +3 −0 Source/WebCore/rendering/RenderCounter.cpp
  27. +1 −0 Source/WebCore/rendering/RenderCounter.h
  28. +3 −0 Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp
  29. +1 −0 Source/WebCore/rendering/RenderDeprecatedFlexibleBox.h
  30. +3 −0 Source/WebCore/rendering/RenderDetailsMarker.cpp
  31. +1 −0 Source/WebCore/rendering/RenderDetailsMarker.h
  32. +3 −0 Source/WebCore/rendering/RenderElement.cpp
  33. +1 −0 Source/WebCore/rendering/RenderElement.h
  34. +3 −0 Source/WebCore/rendering/RenderEmbeddedObject.cpp
  35. +1 −0 Source/WebCore/rendering/RenderEmbeddedObject.h
  36. +3 −0 Source/WebCore/rendering/RenderFileUploadControl.cpp
  37. +1 −0 Source/WebCore/rendering/RenderFileUploadControl.h
  38. +3 −0 Source/WebCore/rendering/RenderFlexibleBox.cpp
  39. +1 −0 Source/WebCore/rendering/RenderFlexibleBox.h
  40. +3 −0 Source/WebCore/rendering/RenderFragmentContainer.cpp
  41. +1 −0 Source/WebCore/rendering/RenderFragmentContainer.h
  42. +3 −0 Source/WebCore/rendering/RenderFragmentContainerSet.cpp
  43. +1 −0 Source/WebCore/rendering/RenderFragmentContainerSet.h
  44. +3 −0 Source/WebCore/rendering/RenderFragmentedFlow.cpp
  45. +1 −0 Source/WebCore/rendering/RenderFragmentedFlow.h
  46. +3 −0 Source/WebCore/rendering/RenderFrameBase.cpp
  47. +1 −0 Source/WebCore/rendering/RenderFrameBase.h
  48. +3 −0 Source/WebCore/rendering/RenderFrameSet.cpp
  49. +1 −0 Source/WebCore/rendering/RenderFrameSet.h
  50. +3 −0 Source/WebCore/rendering/RenderFullScreen.cpp
  51. +1 −0 Source/WebCore/rendering/RenderFullScreen.h
  52. +3 −0 Source/WebCore/rendering/RenderGrid.cpp
  53. +1 −0 Source/WebCore/rendering/RenderGrid.h
  54. +3 −0 Source/WebCore/rendering/RenderHTMLCanvas.cpp
  55. +1 −0 Source/WebCore/rendering/RenderHTMLCanvas.h
  56. +3 −0 Source/WebCore/rendering/RenderImage.cpp
  57. +1 −0 Source/WebCore/rendering/RenderImage.h
  58. +3 −0 Source/WebCore/rendering/RenderImageResource.cpp
  59. +2 −1 Source/WebCore/rendering/RenderImageResource.h
  60. +3 −0 Source/WebCore/rendering/RenderImageResourceStyleImage.cpp
  61. +1 −0 Source/WebCore/rendering/RenderImageResourceStyleImage.h
  62. +3 −0 Source/WebCore/rendering/RenderInline.cpp
  63. +1 −0 Source/WebCore/rendering/RenderInline.h
  64. +3 −0 Source/WebCore/rendering/RenderLayerModelObject.cpp
  65. +1 −0 Source/WebCore/rendering/RenderLayerModelObject.h
  66. +3 −0 Source/WebCore/rendering/RenderLineBreak.cpp
  67. +1 −0 Source/WebCore/rendering/RenderLineBreak.h
  68. +3 −0 Source/WebCore/rendering/RenderListBox.cpp
  69. +1 −0 Source/WebCore/rendering/RenderListBox.h
  70. +3 −0 Source/WebCore/rendering/RenderListItem.cpp
  71. +1 −0 Source/WebCore/rendering/RenderListItem.h
  72. +3 −0 Source/WebCore/rendering/RenderListMarker.cpp
  73. +1 −0 Source/WebCore/rendering/RenderListMarker.h
  74. +3 −0 Source/WebCore/rendering/RenderMedia.cpp
  75. +1 −0 Source/WebCore/rendering/RenderMedia.h
  76. +7 −0 Source/WebCore/rendering/RenderMediaControlElements.cpp
  77. +3 −0 Source/WebCore/rendering/RenderMediaControlElements.h
  78. +3 −0 Source/WebCore/rendering/RenderMenuList.cpp
  79. +1 −1 Source/WebCore/rendering/RenderMenuList.h
  80. +3 −0 Source/WebCore/rendering/RenderMeter.cpp
  81. +1 −0 Source/WebCore/rendering/RenderMeter.h
  82. +3 −0 Source/WebCore/rendering/RenderMultiColumnFlow.cpp
  83. +1 −0 Source/WebCore/rendering/RenderMultiColumnFlow.h
  84. +3 −0 Source/WebCore/rendering/RenderMultiColumnSet.cpp
  85. +1 −0 Source/WebCore/rendering/RenderMultiColumnSet.h
  86. +3 −0 Source/WebCore/rendering/RenderMultiColumnSpannerPlaceholder.cpp
  87. +1 −0 Source/WebCore/rendering/RenderMultiColumnSpannerPlaceholder.h
  88. +3 −0 Source/WebCore/rendering/RenderObject.cpp
  89. +2 −1 Source/WebCore/rendering/RenderObject.h
  90. +3 −0 Source/WebCore/rendering/RenderProgress.cpp
  91. +1 −0 Source/WebCore/rendering/RenderProgress.h
  92. +3 −0 Source/WebCore/rendering/RenderQuote.cpp
  93. +1 −0 Source/WebCore/rendering/RenderQuote.h
  94. +3 −0 Source/WebCore/rendering/RenderReplaced.cpp
  95. +1 −0 Source/WebCore/rendering/RenderReplaced.h
  96. +3 −0 Source/WebCore/rendering/RenderReplica.cpp
  97. +1 −0 Source/WebCore/rendering/RenderReplica.h
  98. +4 −0 Source/WebCore/rendering/RenderRuby.cpp
  99. +2 −0 Source/WebCore/rendering/RenderRuby.h
  100. +3 −0 Source/WebCore/rendering/RenderRubyBase.cpp
  101. +1 −0 Source/WebCore/rendering/RenderRubyBase.h
  102. +3 −0 Source/WebCore/rendering/RenderRubyRun.cpp
  103. +1 −0 Source/WebCore/rendering/RenderRubyRun.h
  104. +2 −0 Source/WebCore/rendering/RenderRubyText.cpp
  105. +1 −0 Source/WebCore/rendering/RenderRubyText.h
  106. +3 −0 Source/WebCore/rendering/RenderScrollbarPart.cpp
  107. +1 −0 Source/WebCore/rendering/RenderScrollbarPart.h
  108. +3 −0 Source/WebCore/rendering/RenderSearchField.cpp
  109. +1 −0 Source/WebCore/rendering/RenderSearchField.h
  110. +3 −0 Source/WebCore/rendering/RenderSlider.cpp
  111. +1 −0 Source/WebCore/rendering/RenderSlider.h
  112. +3 −0 Source/WebCore/rendering/RenderTable.cpp
  113. +1 −0 Source/WebCore/rendering/RenderTable.h
  114. +3 −0 Source/WebCore/rendering/RenderTableCaption.cpp
  115. +1 −0 Source/WebCore/rendering/RenderTableCaption.h
  116. +3 −0 Source/WebCore/rendering/RenderTableCell.cpp
  117. +1 −0 Source/WebCore/rendering/RenderTableCell.h
  118. +3 −0 Source/WebCore/rendering/RenderTableCol.cpp
  119. +1 −0 Source/WebCore/rendering/RenderTableCol.h
  120. +3 −0 Source/WebCore/rendering/RenderTableRow.cpp
  121. +1 −0 Source/WebCore/rendering/RenderTableRow.h
  122. +3 −0 Source/WebCore/rendering/RenderTableSection.cpp
  123. +1 −0 Source/WebCore/rendering/RenderTableSection.h
  124. +3 −0 Source/WebCore/rendering/RenderText.cpp
  125. +1 −0 Source/WebCore/rendering/RenderText.h
  126. +4 −0 Source/WebCore/rendering/RenderTextControl.cpp
  127. +2 −0 Source/WebCore/rendering/RenderTextControl.h
  128. +3 −0 Source/WebCore/rendering/RenderTextControlMultiLine.cpp
  129. +1 −0 Source/WebCore/rendering/RenderTextControlMultiLine.h
  130. +4 −0 Source/WebCore/rendering/RenderTextControlSingleLine.cpp
  131. +2 −0 Source/WebCore/rendering/RenderTextControlSingleLine.h
  132. +3 −0 Source/WebCore/rendering/RenderTextFragment.cpp
  133. +1 −0 Source/WebCore/rendering/RenderTextFragment.h
  134. +3 −0 Source/WebCore/rendering/RenderVTTCue.cpp
  135. +1 −0 Source/WebCore/rendering/RenderVTTCue.h
  136. +3 −0 Source/WebCore/rendering/RenderVideo.cpp
  137. +1 −0 Source/WebCore/rendering/RenderVideo.h
  138. +3 −0 Source/WebCore/rendering/RenderView.cpp
  139. +1 −0 Source/WebCore/rendering/RenderView.h
  140. +3 −0 Source/WebCore/rendering/RenderWidget.cpp
  141. +1 −0 Source/WebCore/rendering/RenderWidget.h
  142. +4 −0 Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp
  143. +2 −0 Source/WebCore/rendering/mathml/RenderMathMLBlock.h
  144. +3 −0 Source/WebCore/rendering/mathml/RenderMathMLFenced.cpp
  145. +1 −0 Source/WebCore/rendering/mathml/RenderMathMLFenced.h
  146. +3 −0 Source/WebCore/rendering/mathml/RenderMathMLFencedOperator.cpp
  147. +1 −0 Source/WebCore/rendering/mathml/RenderMathMLFencedOperator.h
  148. +3 −0 Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp
  149. +1 −0 Source/WebCore/rendering/mathml/RenderMathMLFraction.h
  150. +3 −0 Source/WebCore/rendering/mathml/RenderMathMLMath.cpp
  151. +1 −0 Source/WebCore/rendering/mathml/RenderMathMLMath.h
  152. +3 −0 Source/WebCore/rendering/mathml/RenderMathMLMenclose.cpp
  153. +2 −1 Source/WebCore/rendering/mathml/RenderMathMLMenclose.h
  154. +3 −0 Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp
  155. +1 −0 Source/WebCore/rendering/mathml/RenderMathMLOperator.h
  156. +3 −0 Source/WebCore/rendering/mathml/RenderMathMLPadded.cpp
  157. +1 −0 Source/WebCore/rendering/mathml/RenderMathMLPadded.h
  158. +3 −0 Source/WebCore/rendering/mathml/RenderMathMLRoot.cpp
  159. +1 −1 Source/WebCore/rendering/mathml/RenderMathMLRoot.h
  160. +3 −0 Source/WebCore/rendering/mathml/RenderMathMLRow.cpp
  161. +1 −0 Source/WebCore/rendering/mathml/RenderMathMLRow.h
  162. +3 −0 Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp
  163. +1 −0 Source/WebCore/rendering/mathml/RenderMathMLScripts.h
  164. +3 −0 Source/WebCore/rendering/mathml/RenderMathMLSpace.cpp
  165. +1 −0 Source/WebCore/rendering/mathml/RenderMathMLSpace.h
  166. +3 −0 Source/WebCore/rendering/mathml/RenderMathMLToken.cpp
  167. +1 −0 Source/WebCore/rendering/mathml/RenderMathMLToken.h
  168. +3 −0 Source/WebCore/rendering/mathml/RenderMathMLUnderOver.cpp
  169. +1 −0 Source/WebCore/rendering/mathml/RenderMathMLUnderOver.h
  170. +3 −0 Source/WebCore/rendering/svg/RenderSVGBlock.cpp
  171. +1 −0 Source/WebCore/rendering/svg/RenderSVGBlock.h
  172. +3 −0 Source/WebCore/rendering/svg/RenderSVGContainer.cpp
  173. +1 −0 Source/WebCore/rendering/svg/RenderSVGContainer.h
  174. +3 −0 Source/WebCore/rendering/svg/RenderSVGEllipse.cpp
  175. +1 −0 Source/WebCore/rendering/svg/RenderSVGEllipse.h
  176. +3 −0 Source/WebCore/rendering/svg/RenderSVGForeignObject.cpp
  177. +1 −0 Source/WebCore/rendering/svg/RenderSVGForeignObject.h
  178. +3 −0 Source/WebCore/rendering/svg/RenderSVGGradientStop.cpp
  179. +1 −0 Source/WebCore/rendering/svg/RenderSVGGradientStop.h
  180. +3 −0 Source/WebCore/rendering/svg/RenderSVGHiddenContainer.cpp
  181. +1 −0 Source/WebCore/rendering/svg/RenderSVGHiddenContainer.h
  182. +3 −0 Source/WebCore/rendering/svg/RenderSVGImage.cpp
  183. +1 −0 Source/WebCore/rendering/svg/RenderSVGImage.h
  184. +3 −0 Source/WebCore/rendering/svg/RenderSVGInline.cpp
  185. +1 −0 Source/WebCore/rendering/svg/RenderSVGInline.h
  186. +3 −0 Source/WebCore/rendering/svg/RenderSVGInlineText.cpp
  187. +1 −0 Source/WebCore/rendering/svg/RenderSVGInlineText.h
  188. +3 −0 Source/WebCore/rendering/svg/RenderSVGModelObject.cpp
  189. +1 −0 Source/WebCore/rendering/svg/RenderSVGModelObject.h
  190. +3 −0 Source/WebCore/rendering/svg/RenderSVGPath.cpp
  191. +1 −0 Source/WebCore/rendering/svg/RenderSVGPath.h
  192. +4 −0 Source/WebCore/rendering/svg/RenderSVGRect.cpp
  193. +1 −0 Source/WebCore/rendering/svg/RenderSVGRect.h
  194. +3 −0 Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp
  195. +1 −0 Source/WebCore/rendering/svg/RenderSVGResourceClipper.h
  196. +3 −0 Source/WebCore/rendering/svg/RenderSVGResourceContainer.cpp
  197. +1 −0 Source/WebCore/rendering/svg/RenderSVGResourceContainer.h
  198. +3 −0 Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp
  199. +1 −0 Source/WebCore/rendering/svg/RenderSVGResourceFilter.h
  200. +3 −0 Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.cpp
  201. +1 −0 Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.h
  202. +3 −0 Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp
  203. +1 −0 Source/WebCore/rendering/svg/RenderSVGResourceGradient.h
  204. +3 −0 Source/WebCore/rendering/svg/RenderSVGResourceLinearGradient.cpp
  205. +1 −0 Source/WebCore/rendering/svg/RenderSVGResourceLinearGradient.h
  206. +3 −0 Source/WebCore/rendering/svg/RenderSVGResourceMarker.cpp
  207. +1 −0 Source/WebCore/rendering/svg/RenderSVGResourceMarker.h
  208. +3 −0 Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp
  209. +1 −0 Source/WebCore/rendering/svg/RenderSVGResourceMasker.h
  210. +3 −0 Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp
  211. +2 −0 Source/WebCore/rendering/svg/RenderSVGResourcePattern.h
  212. +4 −0 Source/WebCore/rendering/svg/RenderSVGResourceRadialGradient.cpp
  213. +1 −0 Source/WebCore/rendering/svg/RenderSVGResourceRadialGradient.h
  214. +3 −0 Source/WebCore/rendering/svg/RenderSVGRoot.cpp
  215. +1 −0 Source/WebCore/rendering/svg/RenderSVGRoot.h
  216. +3 −0 Source/WebCore/rendering/svg/RenderSVGShape.cpp
  217. +1 −0 Source/WebCore/rendering/svg/RenderSVGShape.h
  218. +36 −0 Source/WebCore/rendering/svg/RenderSVGTSpan.cpp
  219. +1 −0 Source/WebCore/rendering/svg/RenderSVGTSpan.h
  220. +3 −0 Source/WebCore/rendering/svg/RenderSVGText.cpp
  221. +1 −0 Source/WebCore/rendering/svg/RenderSVGText.h
  222. +3 −0 Source/WebCore/rendering/svg/RenderSVGTextPath.cpp
  223. +1 −0 Source/WebCore/rendering/svg/RenderSVGTextPath.h
  224. +3 −0 Source/WebCore/rendering/svg/RenderSVGTransformableContainer.cpp
  225. +1 −0 Source/WebCore/rendering/svg/RenderSVGTransformableContainer.h
  226. +3 −0 Source/WebCore/rendering/svg/RenderSVGViewportContainer.cpp
  227. +1 −0 Source/WebCore/rendering/svg/RenderSVGViewportContainer.h
  228. +7 −0 Source/bmalloc/CMakeLists.txt
  229. +297 −0 Source/bmalloc/ChangeLog
  230. +371 −1 Source/bmalloc/bmalloc.xcodeproj/project.pbxproj
  231. +20 −0 Source/bmalloc/bmalloc/Algorithm.h
  232. +48 −0 Source/bmalloc/bmalloc/AllIsoHeaps.cpp
  233. +49 −0 Source/bmalloc/bmalloc/AllIsoHeaps.h
  234. +41 −0 Source/bmalloc/bmalloc/AllIsoHeapsInlines.h
  235. +56 −0 Source/bmalloc/bmalloc/BMalloced.h
  236. +506 −0 Source/bmalloc/bmalloc/Bits.h
  237. +133 −22 Source/bmalloc/bmalloc/CryptoRandom.cpp
  238. +2 −1 Source/bmalloc/bmalloc/CryptoRandom.h
  239. +43 −0 Source/bmalloc/bmalloc/DeferredDecommit.h
  240. +44 −0 Source/bmalloc/bmalloc/DeferredDecommitInlines.h
  241. +50 −0 Source/bmalloc/bmalloc/DeferredTrigger.h
  242. +55 −0 Source/bmalloc/bmalloc/DeferredTriggerInlines.h
  243. +50 −0 Source/bmalloc/bmalloc/EligibilityResult.h
  244. +45 −0 Source/bmalloc/bmalloc/EligibilityResultInlines.h
  245. +1 −4 Source/bmalloc/bmalloc/FixedVector.h
  246. +83 −0 Source/bmalloc/bmalloc/FreeList.cpp
  247. +92 −0 Source/bmalloc/bmalloc/FreeList.h
  248. +68 −0 Source/bmalloc/bmalloc/FreeListInlines.h
  249. +53 −0 Source/bmalloc/bmalloc/IsoAllocator.h
  250. +93 −0 Source/bmalloc/bmalloc/IsoAllocatorInlines.h
  251. +36 −0 Source/bmalloc/bmalloc/IsoConfig.h
  252. +54 −0 Source/bmalloc/bmalloc/IsoDeallocator.h
  253. +71 −0 Source/bmalloc/bmalloc/IsoDeallocatorInlines.h
  254. +93 −0 Source/bmalloc/bmalloc/IsoDirectory.h
  255. +142 −0 Source/bmalloc/bmalloc/IsoDirectoryInlines.h
  256. +60 −0 Source/bmalloc/bmalloc/IsoDirectoryPage.h
  257. +47 −0 Source/bmalloc/bmalloc/IsoDirectoryPageInlines.h
  258. +85 −0 Source/bmalloc/bmalloc/IsoHeap.h
  259. +92 −0 Source/bmalloc/bmalloc/IsoHeapImpl.cpp
  260. +109 −0 Source/bmalloc/bmalloc/IsoHeapImpl.h
  261. +170 −0 Source/bmalloc/bmalloc/IsoHeapImplInlines.h
  262. +136 −0 Source/bmalloc/bmalloc/IsoHeapInlines.h
  263. +111 −0 Source/bmalloc/bmalloc/IsoPage.h
  264. +247 −0 Source/bmalloc/bmalloc/IsoPageInlines.h
  265. +36 −0 Source/bmalloc/bmalloc/IsoPageTrigger.h
  266. +163 −0 Source/bmalloc/bmalloc/IsoTLS.cpp
  267. +98 −0 Source/bmalloc/bmalloc/IsoTLS.h
  268. +48 −0 Source/bmalloc/bmalloc/IsoTLSAllocatorEntry.h
  269. +50 −0 Source/bmalloc/bmalloc/IsoTLSAllocatorEntryInlines.h
  270. +50 −0 Source/bmalloc/bmalloc/IsoTLSDeallocatorEntry.h
  271. +47 −0 Source/bmalloc/bmalloc/IsoTLSDeallocatorEntryInlines.h
  272. +49 −0 Source/bmalloc/bmalloc/IsoTLSEntry.cpp
  273. +84 −0 Source/bmalloc/bmalloc/IsoTLSEntry.h
  274. +78 −0 Source/bmalloc/bmalloc/IsoTLSEntryInlines.h
  275. +132 −0 Source/bmalloc/bmalloc/IsoTLSInlines.h
  276. +55 −0 Source/bmalloc/bmalloc/IsoTLSLayout.cpp
  277. +49 −0 Source/bmalloc/bmalloc/IsoTLSLayout.h
  278. +2 −1 Source/bmalloc/bmalloc/Logging.h
  279. +1 −0 Source/bmalloc/bmalloc/PerHeapKind.h
  280. +1 −1 Source/bmalloc/bmalloc/PerProcess.h
  281. +17 −5 Source/bmalloc/bmalloc/Scavenger.cpp
  282. +9 −4 Source/bmalloc/bmalloc/Scavenger.h
  283. +1 −1 Source/bmalloc/bmalloc/StaticMutex.h
  284. +41 −0 Source/bmalloc/bmalloc/bmalloc.cpp
  285. +8 −0 Source/bmalloc/bmalloc/bmalloc.h
  286. +320 −0 Source/bmalloc/test/testbmalloc.cpp
@@ -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
@@ -206,6 +206,8 @@
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>"; };
@@ -857,6 +859,8 @@
A8A472BC151A825A004123FF /* InlineASM.h */,
A70DA0821799F04D00529A9B /* Insertion.h */,
5182C22C1F2BC7E60059BA7C /* InstanceCounted.h */,
0F7EB85B1FA8FF4100F1ABCB /* IsoMalloc.h */,
0F7EB85C1FA8FF4200F1ABCB /* IsoMallocInlines.h */,
7CDD7FF7186D291E007433CD /* IteratorAdaptors.h */,
7CDD7FF9186D2A54007433CD /* IteratorRange.h */,
7C9692941F66306E00267A9E /* KeyValuePair.h */,
@@ -33,20 +33,19 @@
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
// accidentally use the same key for more than one thing.
#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)
@@ -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
@@ -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
@@ -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
@@ -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
Oops, something went wrong.

0 comments on commit d03c594

Please sign in to comment.