2018-04-30  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use WordLock instead of std::mutex for Threading
        https://bugs.webkit.org/show_bug.cgi?id=185121

        Reviewed by Geoffrey Garen.

        Add constexpr to explicitly describe that bmalloc::Mutex constructor is constexpr.

        * bmalloc/Mutex.h:

2018-04-23  Ting-Wei Lan  <lantw44@gmail.com>

        Include stdio.h before using stderr
        https://bugs.webkit.org/show_bug.cgi?id=184872

        Reviewed by Yusuke Suzuki.

        * bmalloc/PerProcess.cpp:
        * bmalloc/Scavenger.cpp:

2018-04-21  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, follow-up patch after r230474
        https://bugs.webkit.org/show_bug.cgi?id=166684

        Add "JavaScriptCore" to Darwin name. And use short name "BMScavenger"
        for Linux since adding "JavaScriptCore" makes the name too long for Linux.

        * bmalloc/Scavenger.cpp:
        (bmalloc::Scavenger::threadRunLoop):

2018-04-18  Jer Noble  <jer.noble@apple.com>

        Don't put build products into WK_ALTERNATE_WEBKIT_SDK_PATH for engineering builds
        https://bugs.webkit.org/show_bug.cgi?id=184762

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2018-04-20  Daniel Bates  <dabates@apple.com>

        Remove code for compilers that did not support NSDMI for aggregates
        https://bugs.webkit.org/show_bug.cgi?id=184599

        Reviewed by Per Arne Vollan.

        Remove workaround for earlier Visual Studio versions that did not support non-static data
        member initializers (NSDMI) for aggregates. We have since updated all the build.webkit.org
        and EWS bots to a newer version that supports this feature.

        * bmalloc/BPlatform.h:
        * bmalloc/List.h:
        (bmalloc::ListNode::ListNode): Deleted.
        (bmalloc::List::iterator::iterator): Deleted.

2018-04-19  David Kilzer  <ddkilzer@apple.com>

        Enable Objective-C weak references
        <https://webkit.org/b/184789>
        <rdar://problem/39571716>

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:
        (CLANG_ENABLE_OBJC_WEAK): Enable.

2018-04-12  Saam Barati  <sbarati@apple.com>

        Lessen partial scavenge interval on x86-64
        https://bugs.webkit.org/show_bug.cgi?id=184577

        Rubber-stamped by Filip Pizlo.

        I initially made the scavenge interval longer because I had thought the
        shorter interval caused a JetStream regression. I was mistaken though.
        I was looking at the wrong commit range when analyzing perf data.
        
        This patch shortens the interval, but still keeps x86-64 50% longer than
        other architectures. We know that scavenging frequently on Mac is less
        important to overall system performance than it is on iOS.

        * bmalloc/Scavenger.cpp:
        (bmalloc::Scavenger::threadRunLoop):

2018-04-12  Saam Barati  <sbarati@apple.com>

        Raise the partial scavenge interval even more on x86-64
        https://bugs.webkit.org/show_bug.cgi?id=184551

        Rubber-stamped by Filip Pizlo.

        The JetStream regression didn't recover from my previous patch.
        This is another attempt to get it to recover perf.

        * bmalloc/Scavenger.cpp:
        (bmalloc::Scavenger::threadRunLoop):

2018-04-11  Saam Barati  <sbarati@apple.com>

        raise partial scavenge interval on x86-64
        https://bugs.webkit.org/show_bug.cgi?id=184521

        Rubber-stamped by Filip Pizlo.

        This patch is an attempt to recover the 1-3% JetStream regression
        my initial partial scavenging patch introduced on some Macs.

        * bmalloc/Scavenger.cpp:
        (bmalloc::Scavenger::threadRunLoop):

2018-04-10  Saam Barati  <sbarati@apple.com>

        IsoHeapImpl::scavenge* needs to grab the lock
        https://bugs.webkit.org/show_bug.cgi?id=184461

        Reviewed by Filip Pizlo.

        Another thread could be modifying the linked list that the scavenge* methods traverse.

        * bmalloc/IsoHeapImplInlines.h:
        (bmalloc::IsoHeapImpl<Config>::scavenge):
        (bmalloc::IsoHeapImpl<Config>::scavengeToHighWatermark):

2018-04-10  Saam Barati  <sbarati@apple.com>

        bmalloc should do partial scavenges more frequently
        https://bugs.webkit.org/show_bug.cgi?id=184176

        Reviewed by Filip Pizlo.

        This patch adds the ability for bmalloc to do a partial scavenge.
        bmalloc will now do a partial scavenge with some frequency even
        when the heap is growing.
        
        For Heap, this means tracking the high water mark of where the Heap
        has allocated since the last scavenge. Partial scavenging is just
        decommitting entries in the LargeMap that are past this high water
        mark. Because we allocate in first fit order out of LargeMap, tracking
        the high water mark is a good heuristic of how much memory a partial
        scavenge should decommit.
        
        For IsoHeaps, each IsoDirectory also keeps track of its high water mark
        for the furthest page it allocates into. Similar to Heap, we scavenge pages
        past that high water mark. IsoHeapImpl then tracks the high water mark
        for the IsoDirectory it allocates into. We then scavenge all directories 
        including and past the directory high water mark. This includes scavenging
        the inline directory when its the only thing we allocate out of since
        the last scavenge.
        
        This patch also adds some other capabilities to bmalloc:
        
        Heaps and IsoHeaps now track how much memory is freeable. Querying
        this number is now cheap.
        
        Heaps no longer hold the global lock when decommitting large ranges.
        Instead, that range is just marked as non eligible to be allocated.
        Then, without the lock held, the scavenger will decommit those ranges.
        Once this is done, the scavenger will then reacquire the lock and mark
        these ranges as eligible. This lessens lock contention between the
        scavenger and the allocation slow path since threads that are taking an
        allocation slow path can now allocate concurrently to the scavenger's
        decommits. The main consideration in adding this functionality is that
        a large allocation may fail while the scavenger is in the process of
        decommitting memory. When the Heap fails to allocate a large range when
        the scavenger is in the middle of a decommit, Heap will wait for the
        Scavenger to finish and then it will try to allocate a large range again.
        
        Decommitting from Heap now aggregates the ranges to decommit and tries to
        merge them together to lower the number of calls to vmDeallocatePhysicalPages.
        This is analogous to what IsoHeaps already do.

        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::tryAllocate):
        (bmalloc::Allocator::allocateImpl):
        (bmalloc::Allocator::reallocate):
        (bmalloc::Allocator::refillAllocatorSlowCase):
        (bmalloc::Allocator::allocateLarge):
        * bmalloc/BulkDecommit.h: Added.
        (bmalloc::BulkDecommit::addEager):
        (bmalloc::BulkDecommit::addLazy):
        (bmalloc::BulkDecommit::processEager):
        (bmalloc::BulkDecommit::processLazy):
        (bmalloc::BulkDecommit::add):
        (bmalloc::BulkDecommit::process):
        * bmalloc/Deallocator.cpp:
        (bmalloc::Deallocator::scavenge):
        (bmalloc::Deallocator::processObjectLog):
        (bmalloc::Deallocator::deallocateSlowCase):
        * bmalloc/Deallocator.h:
        (bmalloc::Deallocator::lineCache):
        * bmalloc/Heap.cpp:
        (bmalloc::Heap::freeableMemory):
        (bmalloc::Heap::markAllLargeAsEligibile):
        (bmalloc::Heap::decommitLargeRange):
        (bmalloc::Heap::scavenge):
        (bmalloc::Heap::scavengeToHighWatermark):
        (bmalloc::Heap::deallocateLineCache):
        (bmalloc::Heap::allocateSmallChunk):
        (bmalloc::Heap::deallocateSmallChunk):
        (bmalloc::Heap::allocateSmallPage):
        (bmalloc::Heap::deallocateSmallLine):
        (bmalloc::Heap::allocateSmallBumpRangesByMetadata):
        (bmalloc::Heap::allocateSmallBumpRangesByObject):
        (bmalloc::Heap::splitAndAllocate):
        (bmalloc::Heap::tryAllocateLarge):
        (bmalloc::Heap::allocateLarge):
        (bmalloc::Heap::isLarge):
        (bmalloc::Heap::largeSize):
        (bmalloc::Heap::shrinkLarge):
        (bmalloc::Heap::deallocateLarge):
        (bmalloc::Heap::externalCommit):
        (bmalloc::Heap::externalDecommit):
        * bmalloc/Heap.h:
        (bmalloc::Heap::allocateSmallBumpRanges):
        (bmalloc::Heap::derefSmallLine):
        * bmalloc/IsoDirectory.h:
        * bmalloc/IsoDirectoryInlines.h:
        (bmalloc::passedNumPages>::takeFirstEligible):
        (bmalloc::passedNumPages>::didBecome):
        (bmalloc::passedNumPages>::didDecommit):
        (bmalloc::passedNumPages>::scavengePage):
        (bmalloc::passedNumPages>::scavenge):
        (bmalloc::passedNumPages>::scavengeToHighWatermark):
        (bmalloc::passedNumPages>::freeableMemory): Deleted.
        * bmalloc/IsoHeapImpl.h:
        * bmalloc/IsoHeapImplInlines.h:
        (bmalloc::IsoHeapImpl<Config>::takeFirstEligible):
        (bmalloc::IsoHeapImpl<Config>::scavenge):
        (bmalloc::IsoHeapImpl<Config>::scavengeToHighWatermark):
        (bmalloc::IsoHeapImpl<Config>::freeableMemory):
        (bmalloc::IsoHeapImpl<Config>::isNowFreeable):
        (bmalloc::IsoHeapImpl<Config>::isNoLongerFreeable):
        * bmalloc/LargeMap.cpp:
        (bmalloc::LargeMap::remove):
        (bmalloc::LargeMap::markAllAsEligibile):
        * bmalloc/LargeMap.h:
        (bmalloc::LargeMap::size):
        (bmalloc::LargeMap::at):
        * bmalloc/LargeRange.h:
        (bmalloc::LargeRange::setEligible):
        (bmalloc::LargeRange::isEligibile const):
        (bmalloc::canMerge):
        * bmalloc/ObjectType.cpp:
        (bmalloc::objectType):
        * bmalloc/Scavenger.cpp:
        (bmalloc::PrintTime::PrintTime):
        (bmalloc::PrintTime::~PrintTime):
        (bmalloc::PrintTime::print):
        (bmalloc::Scavenger::timeSinceLastFullScavenge):
        (bmalloc::Scavenger::timeSinceLastPartialScavenge):
        (bmalloc::Scavenger::scavenge):
        (bmalloc::Scavenger::partialScavenge):
        (bmalloc::Scavenger::freeableMemory):
        (bmalloc::Scavenger::threadRunLoop):
        * bmalloc/Scavenger.h:
        * bmalloc/SmallLine.h:
        (bmalloc::SmallLine::refCount):
        (bmalloc::SmallLine::ref):
        (bmalloc::SmallLine::deref):
        * bmalloc/SmallPage.h:
        (bmalloc::SmallPage::refCount):
        (bmalloc::SmallPage::hasFreeLines const):
        (bmalloc::SmallPage::setHasFreeLines):
        (bmalloc::SmallPage::ref):
        (bmalloc::SmallPage::deref):
        * bmalloc/bmalloc.cpp:
        (bmalloc::api::tryLargeZeroedMemalignVirtual):
        (bmalloc::api::freeLargeVirtual):

2018-04-09  Yusuke Suzuki  <utatane.tea@gmail.com>

        [bmalloc] Name Scavenger thread "bmalloc scavenger"
        https://bugs.webkit.org/show_bug.cgi?id=166684

        Reviewed by Saam Barati.

        We name the thread for bmalloc Scavenger "bmalloc scavenger".
        It is useful for debugging. In Linux environment, it will be
        shown in GDB.

        * bmalloc/Scavenger.cpp:
        (bmalloc::Scavenger::threadRunLoop):
        (bmalloc::Scavenger::setName):
        * bmalloc/Scavenger.h:

2018-04-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        Rename UNUSED to BUNUSED
        https://bugs.webkit.org/show_bug.cgi?id=184093

        Reviewed by Yusuke Suzuki.

        * bmalloc/BAssert.h:
        * bmalloc/VMAllocate.h:
        (bmalloc::vmValidate):
        (bmalloc::vmValidatePhysical):

2018-04-08  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use alignas instead of compiler-specific attributes
        https://bugs.webkit.org/show_bug.cgi?id=183508

        Reviewed by Mark Lam.

        Use alignas for g_gigacageBasePtr. We also add reinterpret_cast to fix
        compile errors in ARMv7 and MIPS JSCOnly ports.

        * bmalloc/Gigacage.cpp:
        * bmalloc/Gigacage.h:
        (Gigacage::basePtrs):

2018-04-06  Saam Barati  <sbarati@apple.com>

        bmalloc virtual allocation API should not treat memory it vends as dirty with respect to how it drives the scavenger
        https://bugs.webkit.org/show_bug.cgi?id=184342

        Reviewed by Mark Lam.

        Currently, the only user of this API is Wasm. Ideally, Wasm would tell
        us exactly which page is dirtied. We should really do that at some point:
        https://bugs.webkit.org/show_bug.cgi?id=184207
        
        However, until we do that, it's better to treat none of the virtual memory
        we vend as dirty, versus what we do now, which is treat it all as dirty.
        This dirty memory tracking helps drive the scavenger, so on iOS, having the
        scavenger think its under memory pressure because of memory it can't free isn't
        useful.

        * bmalloc/bmalloc.cpp:
        (bmalloc::api::tryLargeZeroedMemalignVirtual):
        (bmalloc::api::freeLargeVirtual):
        * bmalloc/bmalloc.h:

2018-04-05  Saam Barati  <sbarati@apple.com>

        IsoHeapImpl not IsoHeapImplBase should add itself to AllIsoHeaps
        https://bugs.webkit.org/show_bug.cgi?id=184174

        Reviewed by Filip Pizlo.

        Otherwise, another thread may see a non-fully formed IsoHeapImpl.

        * bmalloc/IsoHeapImpl.cpp:
        (bmalloc::IsoHeapImplBase::IsoHeapImplBase):
        (bmalloc::IsoHeapImplBase::addToAllIsoHeaps):
        * bmalloc/IsoHeapImpl.h:
        * bmalloc/IsoHeapImplInlines.h:
        (bmalloc::IsoHeapImpl<Config>::IsoHeapImpl):

2018-04-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        bmalloc StaticMutex's constructor should be constexpr
        https://bugs.webkit.org/show_bug.cgi?id=180600

        Reviewed by Mark Lam.

        StaticMutex and Mutex can be unified. This patch changes std::atomic_flag in StaticMutex
        to std::atomic<bool> to add constexpr constructor to StaticMutex. Then, StaticMutex can
        be initialized in static storage without calling any static initializers.
        And we also rename StaticMutex to Mutex simply.

        * CMakeLists.txt:
        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/AllIsoHeaps.cpp:
        (bmalloc::AllIsoHeaps::AllIsoHeaps):
        * bmalloc/AllIsoHeaps.h:
        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::tryAllocate):
        (bmalloc::Allocator::allocateImpl):
        (bmalloc::Allocator::reallocate):
        (bmalloc::Allocator::refillAllocatorSlowCase):
        (bmalloc::Allocator::allocateLarge):
        * bmalloc/CryptoRandom.cpp:
        (bmalloc::ARC4RandomNumberGenerator::ARC4RandomNumberGenerator):
        * bmalloc/Deallocator.cpp:
        (bmalloc::Deallocator::scavenge):
        (bmalloc::Deallocator::processObjectLog):
        (bmalloc::Deallocator::deallocateSlowCase):
        * bmalloc/Deallocator.h:
        (bmalloc::Deallocator::lineCache):
        * bmalloc/DebugHeap.cpp:
        (bmalloc::DebugHeap::DebugHeap):
        * bmalloc/DebugHeap.h:
        * bmalloc/Environment.cpp:
        (bmalloc::Environment::Environment):
        * bmalloc/Environment.h:
        * bmalloc/Gigacage.cpp:
        (Gigacage::disablePrimitiveGigacage):
        (Gigacage::addPrimitiveDisableCallback):
        (Gigacage::removePrimitiveDisableCallback):
        * bmalloc/Heap.cpp:
        (bmalloc::Heap::Heap):
        (bmalloc::Heap::freeableMemory):
        (bmalloc::Heap::scavenge):
        (bmalloc::Heap::deallocateLineCache):
        (bmalloc::Heap::allocateSmallChunk):
        (bmalloc::Heap::allocateSmallPage):
        (bmalloc::Heap::deallocateSmallLine):
        (bmalloc::Heap::allocateSmallBumpRangesByMetadata):
        (bmalloc::Heap::allocateSmallBumpRangesByObject):
        (bmalloc::Heap::splitAndAllocate):
        (bmalloc::Heap::tryAllocateLarge):
        (bmalloc::Heap::allocateLarge):
        (bmalloc::Heap::isLarge):
        (bmalloc::Heap::largeSize):
        (bmalloc::Heap::shrinkLarge):
        (bmalloc::Heap::deallocateLarge):
        (bmalloc::Heap::externalCommit):
        (bmalloc::Heap::externalDecommit):
        * bmalloc/Heap.h:
        (bmalloc::Heap::mutex):
        (bmalloc::Heap::allocateSmallBumpRanges):
        (bmalloc::Heap::derefSmallLine):
        * bmalloc/IsoDeallocator.h:
        * bmalloc/IsoHeap.h:
        * bmalloc/IsoTLSDeallocatorEntry.h:
        * bmalloc/IsoTLSDeallocatorEntryInlines.h:
        (bmalloc::IsoTLSDeallocatorEntry<Config>::IsoTLSDeallocatorEntry):
        * bmalloc/IsoTLSInlines.h:
        (bmalloc::IsoTLS::ensureHeap):
        * bmalloc/IsoTLSLayout.cpp:
        (bmalloc::IsoTLSLayout::IsoTLSLayout):
        (bmalloc::IsoTLSLayout::add):
        * bmalloc/IsoTLSLayout.h:
        * bmalloc/Mutex.cpp: Renamed from Source/bmalloc/bmalloc/StaticMutex.cpp.
        (bmalloc::Mutex::lockSlowCase):
        * bmalloc/Mutex.h:
        (bmalloc::sleep):
        (bmalloc::waitUntilFalse):
        (bmalloc::Mutex::try_lock):
        (bmalloc::Mutex::lock):
        (bmalloc::Mutex::unlock):
        (bmalloc::Mutex::Mutex): Deleted.
        * bmalloc/ObjectType.cpp:
        (bmalloc::objectType):
        * bmalloc/PerProcess.cpp:
        (bmalloc::getPerProcessData):
        * bmalloc/PerProcess.h:
        (bmalloc::PerProcess::mutex):
        (bmalloc::PerProcess::getSlowCase):
        * bmalloc/Scavenger.cpp:
        (bmalloc::Scavenger::Scavenger):
        (bmalloc::Scavenger::scavenge):
        (bmalloc::Scavenger::freeableMemory):
        * bmalloc/Scavenger.h:
        * bmalloc/SmallLine.h:
        (bmalloc::SmallLine::refCount):
        (bmalloc::SmallLine::ref):
        (bmalloc::SmallLine::deref):
        * bmalloc/SmallPage.h:
        (bmalloc::SmallPage::refCount):
        (bmalloc::SmallPage::hasFreeLines const):
        (bmalloc::SmallPage::setHasFreeLines):
        (bmalloc::SmallPage::ref):
        (bmalloc::SmallPage::deref):
        * bmalloc/StaticMutex.h: Removed.
        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::VMHeap):
        * bmalloc/VMHeap.h:
        * bmalloc/Zone.cpp:
        (bmalloc::Zone::Zone):
        * bmalloc/Zone.h:
        * bmalloc/bmalloc.cpp:
        (bmalloc::api::tryLargeZeroedMemalignVirtual):
        (bmalloc::api::freeLargeVirtual):
        (bmalloc::api::isEnabled):
        (bmalloc::api::setScavengerThreadQOSClass):
        * bmalloc/bmalloc.h:

2018-04-04  Konstantin Tokarev  <annulen@yandex.ru>

        Enable Gigacage unconditionally when building JSCOnly on macOS (build fix)
        https://bugs.webkit.org/show_bug.cgi?id=184301

        Reviewed by Yusuke Suzuki.

        bmalloc/ProcessCheck.mm implements specific behavior for Mac and iOS ports,
        which is guarded with BPLATFORM(COCOA). if we don't enable BPLATFORM(MAC)
        or BPLATFORM(IOS) in JSCOnly, then BPLATFORM(COCOA) won't be defined
        as well, and code path from ProcessCheck.mm will not be taken.

        * CMakeLists.txt: Exclude ProcessCheck.mm from port-independent file
        list.
        * PlatformMac.cmake: Build ProcessCheck.mm for Mac port.
        * bmalloc/BPlatform.h: Don't enable BPLATFORM(MAC) or BPLATFORM(IOS)
        when building JSCOnly port.

2018-04-03  Saam Barati  <sbarati@apple.com>

        totalPhysicalSize calculation when splitting a range must account for double rounding effects
        https://bugs.webkit.org/show_bug.cgi?id=184275

        Reviewed by Mark Lam.

        The rounding error could happen when we split a range where the
        range's total physical size equals the range's total size. The
        rounding may cause the left size to lose a byte, and the right
        size to gain a byte. This caused the right side to be a byte
        large than its size.

        * bmalloc/LargeRange.h:
        (bmalloc::LargeRange::LargeRange):
        (bmalloc::LargeRange::split const):

2018-04-02  Saam Barati  <sbarati@apple.com>

        bmalloc should compute its own estimate of its footprint
        https://bugs.webkit.org/show_bug.cgi?id=184121

        Reviewed by Filip Pizlo.

        This patch makes it so that bmalloc keeps track of its own physical
        footprint.
        
        Doing this for IsoHeaps is trivial. It allocates/deallocates fixed
        page sizes at a time. IsoHeapImpl just updates a count every time
        a page is committed/decommitted.
        
        Making Heap keep its footprint was a bit trickier because of how
        LargeRange is constructed. Before this patch, LargeRange kept track
        of the amount of physical memory at the start of its range. This
        patch extends large range to also keep track of the total physical memory
        in the range just for footprint bookkeeping. This was needed to make
        Heap's footprint come close to resembling reality, because as we merge and split
        large ranges, the start physical size often becomes wildly inaccurate.
        The total physical size number stored in LargeRange is still just an
        estimate. It's possible that as ranges are split, that the total physical
        size split amongst the two ranges doesn't resemble reality. This can
        happen when the total physical size is really all in one end of the split,
        but we mark it as being proportionally split amongst the resulting two
        ranges. In practice, I did not notice this being a problem. The footprint
        estimate tracks reality very closely (in my testing, within less than 1MB for
        heaps with sizes upwards of 1GB). The other nice thing about total physical
        size is that even if it diverges from reality in terms of how memory is
        using up physical RAM, it stays internally consistent inside bmalloc's
        own data structures.
        
        The main oversight of this patch is how it deals with Wasm memory. All Wasm
        memory will be viewed by bmalloc as taking up physical space even when it
        may not be. Wasm memory starts off as taking up purely virtual pages. When a
        page is first accessed, only then will the OS page it in and cause it to use
        physical RAM. I opened a bug to come up with a solution to this problem:
        https://bugs.webkit.org/show_bug.cgi?id=184207

        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/AvailableMemory.cpp:
        (bmalloc::memoryStatus):
        * bmalloc/BPlatform.h:
        * bmalloc/Heap.cpp:
        (bmalloc::Heap::Heap):
        (bmalloc::Heap::freeableMemory):
        (bmalloc::Heap::footprint):
        (bmalloc::Heap::scavenge):
        (bmalloc::Heap::deallocateSmallChunk):
        (bmalloc::Heap::allocateSmallPage):
        (bmalloc::Heap::splitAndAllocate):
        (bmalloc::Heap::tryAllocateLarge):
        (bmalloc::Heap::shrinkLarge):
        (bmalloc::Heap::deallocateLarge):
        (bmalloc::Heap::externalCommit):
        (bmalloc::Heap::externalDecommit):
        * bmalloc/Heap.h:
        * bmalloc/IsoDirectory.h:
        * bmalloc/IsoDirectoryInlines.h:
        (bmalloc::passedNumPages>::takeFirstEligible):
        (bmalloc::passedNumPages>::didDecommit):
        (bmalloc::passedNumPages>::freeableMemory):
        * bmalloc/IsoHeapImpl.h:
        * bmalloc/IsoHeapImplInlines.h:
        (bmalloc::IsoHeapImpl<Config>::freeableMemory):
        (bmalloc::IsoHeapImpl<Config>::footprint):
        (bmalloc::IsoHeapImpl<Config>::didCommit):
        (bmalloc::IsoHeapImpl<Config>::didDecommit):
        * bmalloc/LargeRange.h:
        (bmalloc::LargeRange::LargeRange):
        (bmalloc::LargeRange::startPhysicalSize const):
        (bmalloc::LargeRange::setStartPhysicalSize):
        (bmalloc::LargeRange::totalPhysicalSize const):
        (bmalloc::LargeRange::setTotalPhysicalSize):
        (bmalloc::merge):
        (bmalloc::LargeRange::split const):
        (bmalloc::LargeRange::physicalSize const): Deleted.
        (bmalloc::LargeRange::setPhysicalSize): Deleted.
        * bmalloc/PhysicalPageMap.h: Added.
        This class is added for debugging purposes. It's useful when hacking
        on the code that calculates the footprint to use this map as a sanity
        check. It's just a simple implementation that has a set of all the committed pages.

        (bmalloc::PhysicalPageMap::commit):
        (bmalloc::PhysicalPageMap::decommit):
        (bmalloc::PhysicalPageMap::footprint):
        (bmalloc::PhysicalPageMap::forEachPhysicalPage):
        * bmalloc/Scavenger.cpp:
        (bmalloc::dumpStats):
        (bmalloc::Scavenger::scavenge):
        (bmalloc::Scavenger::freeableMemory):
        This is here just for debugging for now. But we should implement an
        efficient version of this to use when driving when to run the
        scavenger.

        (bmalloc::Scavenger::footprint):
        (bmalloc::Scavenger::threadRunLoop):
        * bmalloc/Scavenger.h:
        * bmalloc/VMAllocate.h:
        (bmalloc::physicalPageSizeSloppy):
        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::tryAllocateLargeChunk):
        * bmalloc/bmalloc.cpp:
        (bmalloc::api::commitAlignedPhysical):
        (bmalloc::api::decommitAlignedPhysical):
        * bmalloc/bmalloc.h:

2018-03-28  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r230005.
        https://bugs.webkit.org/show_bug.cgi?id=184115

        "it caused a huge regression on iOS" (Requested by saamyjoon
        on #webkit).

        Reverted changeset:

        "memoryStatus() is wrong in certain testing scenarios on iOS"
        https://bugs.webkit.org/show_bug.cgi?id=184050
        https://trac.webkit.org/changeset/230005

2018-03-27  Saam Barati  <sbarati@apple.com>

        memoryStatus() is wrong in certain testing scenarios on iOS
        https://bugs.webkit.org/show_bug.cgi?id=184050
        <rdar://problem/37959258>

        Rubber-stamped by Mark Lam.

        This switches us from using "phys_footprint" to using "internal + compressed"
        when computing the dirty memory in the current process. There are iOS testing
        scenarios where phys_footprint doesn't give us a reliable answer. In my testing,
        "internal + compressed" tracks phys_footprint closely (when phys_footprint is
        working). They're usually within much less than 1% of each other. We're making
        this change to ensure testing in our iOS infrastructure is valid.
        
        I opened a bug to move back to phys_footprint when it's feasible:
        https://bugs.webkit.org/show_bug.cgi?id=184050

        * bmalloc/AvailableMemory.cpp:
        (bmalloc::memoryStatus):

2018-03-20  Tim Horton  <timothy_horton@apple.com>

        Add and adopt WK_PLATFORM_NAME and adjust default feature defines
        https://bugs.webkit.org/show_bug.cgi?id=183758
        <rdar://problem/38017644>

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2018-03-16  Filip Pizlo  <fpizlo@apple.com>

        Put the DOM in IsoHeaps
        https://bugs.webkit.org/show_bug.cgi?id=183546

        Reviewed by Simon Fraser.
        
        Make it easy to runtime-disable IsoHeaps.

        * bmalloc/Allocator.h:
        * bmalloc/IsoTLS.cpp:
        (bmalloc::IsoTLS::determineMallocFallbackState):
        * bmalloc/IsoTLS.h:
        * bmalloc/IsoTLSInlines.h:
        (bmalloc::IsoTLS::allocateSlow):
        (bmalloc::IsoTLS::deallocateSlow):

2018-03-16  Michael Catanzaro  <mcatanzaro@igalia.com>

        Improve error message when Gigacage cannot allocate virtual memory
        https://bugs.webkit.org/show_bug.cgi?id=183329

        Reviewed by Filip Pizlo.

        We've discovered that Deja Dup monitor sets a virtual memory limit, breaking Gigacage. Since
        it runs in the background on a fresh out-of-the-box install of Ubuntu, this is not good.
        That will have to be fixed by Deja Dup, but there is concern that other applications might
        try this, or that users will set a virtual memory limit for the entire desktop session. Of
        particular concern is the possibility that users might have copypasted a ulimit line into
        a session startup script without understanding it. Let's try to make it slightly easier to
        understand what's going wrong.

        * bmalloc/Gigacage.cpp:
        (Gigacage::ensureGigacage):

2018-03-13  Tim Horton  <timothy_horton@apple.com>

        Add and adopt WK_ALTERNATE_FRAMEWORKS_DIR in WTF and bmalloc
        https://bugs.webkit.org/show_bug.cgi?id=183576
        <rdar://problem/38396766>

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:
        * Configurations/bmalloc.xcconfig:
        * Configurations/mbmalloc.xcconfig:

2018-03-10  Filip Pizlo  <fpizlo@apple.com>

        PerProcess<> should be safe by default
        https://bugs.webkit.org/show_bug.cgi?id=183545

        Reviewed by Yusuke Suzuki.
        
        This makes PerProcess<> safe by default, so we don't need SafePerProcess<>.
        
        The new PerProcess<> design relies on a hash-consing mechanism for PerProcess<> storage based
        on the __PRETTY_FUNCTION__ from inside PerProcess<>, which captures the instantiated type in
        the string. Therefore, this can be used to runtime-coalesce PerProcess<> instances based on
        type.
        
        I expect this to be perf-neutral. It's an important prerequisite to more bmalloc work, since I
        don't want to have more PerProcess<> vs SafePerProcess<> bugs, and SafePerProcess<> can't be
        used for everything (I don't see how to use it for isoheaps).

        * CMakeLists.txt:
        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/Heap.cpp:
        (bmalloc::Heap::Heap):
        * bmalloc/IsoDirectoryInlines.h:
        (bmalloc::passedNumPages>::takeFirstEligible):
        (bmalloc::passedNumPages>::didBecome):
        * bmalloc/PerProcess.cpp: Added.
        (bmalloc::stringHash):
        (bmalloc::allocate):
        (bmalloc::getPerProcessData):
        * bmalloc/PerProcess.h:
        (bmalloc::PerProcess::mutex):
        (bmalloc::PerProcess::coalesce):
        (bmalloc::PerProcess::getSlowCase):
        (): Deleted.
        * bmalloc/Scavenger.cpp:
        * bmalloc/Scavenger.h:
        * bmalloc/bmalloc.cpp:
        (bmalloc::api::scavenge):
        (bmalloc::api::setScavengerThreadQOSClass):

2018-03-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r229436.
        https://bugs.webkit.org/show_bug.cgi?id=183542

        seems to have regressed wasm compile times by 10% (Requested
        by pizlo-mbp on #webkit).

        Reverted changeset:

        "bmalloc mutex should be adaptive"
        https://bugs.webkit.org/show_bug.cgi?id=177839
        https://trac.webkit.org/changeset/229436

2018-03-08  Filip Pizlo  <fpizlo@apple.com>

        bmalloc mutex should be adaptive
        https://bugs.webkit.org/show_bug.cgi?id=177839

        Reviewed by Michael Saboff.
        
        This pulls the WordLock algorithm into bmalloc, mostly by copy-pasting the code. We need to
        copy paste because sometimes we build WTF without bmalloc, so WTF cannot rely on bmalloc for
        anything other than malloc.

        Reland after failing to reproduce the WasmBench crash that caused it to get rolled out. Maybe that fixed
        itself somehow?

        * bmalloc/Algorithm.h:
        (bmalloc::compareExchangeWeak):
        (bmalloc::compareExchangeStrong):
        * bmalloc/PerThread.h:
        * bmalloc/StaticMutex.cpp:
        (bmalloc::StaticMutex::lockSlow):
        (bmalloc::StaticMutex::unlockSlow):
        (bmalloc::StaticMutex::lockSlowCase): Deleted.
        * bmalloc/StaticMutex.h:
        (bmalloc::StaticMutex::try_lock):
        (bmalloc::StaticMutex::isLocked const):
        (bmalloc::StaticMutex::init):
        (bmalloc::StaticMutex::tryLock):
        (bmalloc::StaticMutex::lock):
        (bmalloc::StaticMutex::unlock):
        (bmalloc::sleep): Deleted.
        (bmalloc::waitUntilFalse): Deleted.

2018-02-16  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, roll out r228306 (custom memcpy/memset) because the bots say that it was not a
        progression.

        * bmalloc/Algorithm.h:
        (bmalloc::fastCopy): Deleted.
        (bmalloc::fastZeroFill): Deleted.
        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::reallocate):
        * bmalloc/Bits.h:
        (bmalloc::BitsWordOwner::operator=):
        (bmalloc::BitsWordOwner::clearAll):
        (bmalloc::BitsWordOwner::set):
        * bmalloc/IsoPageInlines.h:
        (bmalloc::IsoPage<Config>::IsoPage):
        * bmalloc/Vector.h:
        (bmalloc::Vector<T>::reallocateBuffer):

2018-02-09  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Improve of string.h include after r228317.
        https://bugs.webkit.org/show_bug.cgi?id=182642

        Reviewed by Mark Lam.

        * bmalloc/Algorithm.h: Avoid an architecture-specific #include.

2018-02-09  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Fix build for !BCPU(X86_64) after r228306
        https://bugs.webkit.org/show_bug.cgi?id=182563

        Unreviewed build fix.

        * bmalloc/Algorithm.h:

2018-02-08  Filip Pizlo  <fpizlo@apple.com>

        Experiment with alternative implementation of memcpy/memset
        https://bugs.webkit.org/show_bug.cgi?id=182563

        Reviewed by Michael Saboff and Mark Lam.
        
        Add a faster x86_64-specific implementation of memcpy and memset. Ideally, this would just be
        implemented in WTF, but we have to copy it into bmalloc since bmalloc sits below WTF on the
        stack.

        * bmalloc/Algorithm.h:
        (bmalloc::fastCopy):
        (bmalloc::fastZeroFill):
        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::reallocate):
        * bmalloc/Bits.h:
        (bmalloc::BitsWordOwner::operator=):
        (bmalloc::BitsWordOwner::clearAll):
        (bmalloc::BitsWordOwner::set):
        * bmalloc/IsoPageInlines.h:
        (bmalloc::IsoPage<Config>::IsoPage):
        * bmalloc/Vector.h:
        (bmalloc::Vector<T>::reallocateBuffer):

2018-02-05  JF Bastien  <jfbastien@apple.com>

        Gigacage: enable only for WebContent process and token executables
        https://bugs.webkit.org/show_bug.cgi?id=182457
        <rdar://problem/35875011>

        Reviewed by Keith Miller.

        Gigacage is a solid security improvement, but it's probably best
        to roll it out incrementally to the most valuable targets first
        and progressively try out more and more over time rather than
        outright enabling it everywhere. We've gotten some reports that it
        has some side-effects that weren't expected, so for now let's
        enable it for the WebContent process, JSC, and other executables
        we know, and then later we'll enable more gigacage uses.

        For now I've chosen the following bundles:

          - com.apple.WebKit.WebContent.Development
          - com.apple.WebKit.WebContent
          - com.apple.WebProcess

        And the following processes:

          - jsc
          - wasm
          - anything starting with "test", to match the JSC tests

        I tried a different approach first, where I add a function to turn
        gigacage on or off and crash if gigacage is initialized without
        having been told what to do. Doing this in ChildProcess and a
        bunch of the process initialization methods isn't sufficient. I
        got MiniBrowser working, but some other builds use static globals
        which themselves use hash and string which are allocate with
        bmalloc and therefore which initialize gigacage before main is
        called and before the process gets a chance to opt in our out. It
        gets tricky with API calls too, because we have to do the right
        thing in any entry an API user could plausibly use, even the
        private ones, so I endend up having to initialize gigacage in e.g.
        WebPreferencesExperimentalFeatures.cpp.erb.

        Another approach could be to create a free-for-all gigacage
        entitlement, and opt-in the processes we want..

        As a follow-up we can also check that gigacage allocation always
        succeeds if it was allowed for that process. With my change I
        expect it to always succeed.

        * CMakeLists.txt:
        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/BPlatform.h:
        * bmalloc/Gigacage.cpp:
        (Gigacage::shouldBeEnabled):
        * bmalloc/ProcessCheck.h: Added.
        (bmalloc::gigacageEnabledForProcess):
        * bmalloc/ProcessCheck.mm: Added.
        (bmalloc::gigacageEnabledForProcess):

2018-02-05  Joseph Pecoraro  <pecoraro@apple.com>

        Multiple bmalloc scavenger threads is unexpected
        https://bugs.webkit.org/show_bug.cgi?id=182474
        <rdar://problem/37175526>

        Reviewed by Filip Pizlo.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::Heap):
        * bmalloc/IsoDirectoryInlines.h:
        (bmalloc::passedNumPages>::takeFirstEligible):
        (bmalloc::passedNumPages>::didBecome):
        * bmalloc/bmalloc.cpp:
        (bmalloc::api::scavenge):
        (bmalloc::api::setScavengerThreadQOSClass):
        Switch to SafePerProcess for Scavenger to ensure one instance
        for the entire process.

        * bmalloc/PerProcess.h:
        (bmalloc::PerProcess::get):
        (bmalloc::PerProcess::getFastCase):
        (bmalloc::PerProcess::getSlowCase):
        (bmalloc::SafePerProcess::get):
        (bmalloc::SafePerProcess::getFastCase):
        (bmalloc::SafePerProcess::getSlowCase):
        Duplicate the class with a version that can ensure
        single instances by requiring exporting symbols that
        can be created with macros.

        * bmalloc/Scavenger.cpp:
        * bmalloc/Scavenger.h:
        Export symbols to ensure all images get the same instance.

2018-01-31  Saam Barati  <sbarati@apple.com>

        Replace tryLargeMemalignVirtual with tryLargeZeroedMemalignVirtual and use it to allocate large zeroed memory in Wasm
        https://bugs.webkit.org/show_bug.cgi?id=182064
        <rdar://problem/36840132>

        Reviewed by Geoffrey Garen.

        This patch replaces the tryLargeMemalignVirtual API with tryLargeZeroedMemalignVirtual.
        By doing that, we're able to remove the AllocationKind enum. To zero the memory,
        tryLargeZeroedMemalignVirtual uses mmap(... MAP_ANON ...) over previously mmapped
        memory. This both purges the any resident memory for the virtual range and ensures
        that the pages in the range are zeroed. Most OSs should implement this by taking a
        page fault and zero filling on first access. Therefore, this API is returning pages
        that will result in page faults on first access. Hence, the name 'virtual' in the API.
        This API differs from the old API in that users of it need not call madvise themselves.
        The memory is ready to go.

        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/AllocationKind.h: Removed.
        * bmalloc/DebugHeap.cpp:
        (bmalloc::DebugHeap::memalignLarge):
        (bmalloc::DebugHeap::freeLarge):
        * bmalloc/DebugHeap.h:
        * bmalloc/Heap.cpp:
        (bmalloc::Heap::splitAndAllocate):
        (bmalloc::Heap::tryAllocateLarge):
        (bmalloc::Heap::allocateLarge):
        (bmalloc::Heap::shrinkLarge):
        (bmalloc::Heap::deallocateLarge):
        * bmalloc/Heap.h:
        * bmalloc/IsoPage.cpp:
        (bmalloc::IsoPageBase::allocatePageMemory):
        * bmalloc/VMAllocate.h:
        (bmalloc::vmZeroAndPurge):
        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::tryAllocateLargeChunk):
        * bmalloc/VMHeap.h:
        * bmalloc/bmalloc.cpp:
        (bmalloc::api::tryLargeZeroedMemalignVirtual):
        (bmalloc::api::freeLargeVirtual):
        (bmalloc::api::tryLargeMemalignVirtual): Deleted.
        * bmalloc/bmalloc.h:

2018-01-19  Keith Miller  <keith_miller@apple.com>

        HaveInternalSDK includes should be "#include?"
        https://bugs.webkit.org/show_bug.cgi?id=179670

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2018-01-18  Dan Bernstein  <mitz@apple.com>

        [Xcode] Streamline and future-proof target-macOS-version-dependent build setting definitions
        https://bugs.webkit.org/show_bug.cgi?id=181803

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig: Updated.
        * Configurations/DebugRelease.xcconfig: Ditto.

2018-01-16  Michael Catanzaro  <mcatanzaro@igalia.com>

        mbmalloc should only be built in developer mode
        https://bugs.webkit.org/show_bug.cgi?id=181654

        Reviewed by Carlos Garcia Campos.

        * CMakeLists.txt:

2018-01-15  Michael Catanzaro  <mcatanzaro@igalia.com>

        Improve use of ExportMacros
        https://bugs.webkit.org/show_bug.cgi?id=181652

        Reviewed by Konstantin Tokarev.

        Disable BEXPORT on Linux ports.

        * bmalloc/BExport.h: Check for BUSE(EXPORT_MACROS).
        * bmalloc/BPlatform.h: Add BUSE(EXPORT_MACROS) and define it on macOS and iOS.

2017-12-20  Ting-Wei Lan  <lantw44@gmail.com>

        Include stdio.h before using stderr and _IONBF
        https://bugs.webkit.org/show_bug.cgi?id=181046

        Reviewed by Alex Christensen.

        * bmalloc/IsoTLS.cpp:

2017-12-14  David Kilzer  <ddkilzer@apple.com>

        Enable -Wstrict-prototypes for WebKit
        <https://webkit.org/b/180757>
        <rdar://problem/36024132>

        Rubber-stamped by Joseph Pecoraro.

        * Configurations/Base.xcconfig:
        (CLANG_WARN_STRICT_PROTOTYPES): Add. Set to YES.

2017-12-14  Saam Barati  <sbarati@apple.com>

        logVMFailure should not simulate crash on iOS
        https://bugs.webkit.org/show_bug.cgi?id=180790

        Reviewed by JF Bastien.

        The Gigacage allocation on iOS is expected to fail in certain circumstances. 
        Let's not simulate a crash on failure because since this is expected behavior.

        * bmalloc/VMAllocate.h:
        (bmalloc::tryVMAllocate):

2017-12-11  Tim Horton  <timothy_horton@apple.com>

        Stop using deprecated target conditional for simulator builds
        https://bugs.webkit.org/show_bug.cgi?id=180662
        <rdar://problem/35136156>

        Reviewed by Simon Fraser.

        * bmalloc/BPlatform.h:

2017-12-08  Saam Barati  <sbarati@apple.com>

        Enable gigacage on iOS with a 32GB runway and ensure it doesn't break WasmBench
        https://bugs.webkit.org/show_bug.cgi?id=178557

        Reviewed by Mark Lam.

        * bmalloc/Algorithm.h:
        (bmalloc::isPowerOfTwo):
        * bmalloc/Gigacage.cpp:
        * bmalloc/Gigacage.h:

2017-12-05  Andy Estes  <aestes@apple.com>

        [Darwin] Simplify use of TargetConditionals
        https://bugs.webkit.org/show_bug.cgi?id=180455
        <rdar://problem/35142971>

        Reviewed by Tim Horton.

        There's no need to check if TARGET_* macros are defined on Darwin platforms, since
        TargetConditionals.h always defines them. Also, we can simplify
        (TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR) to TARGET_OS_IPHONE.

        * bmalloc/BPlatform.h:

2017-12-05  Filip Pizlo  <fpizlo@apple.com>

        bmalloc IsoHeap needs to allow a thread to deallocate some size for the first time
        https://bugs.webkit.org/show_bug.cgi?id=180443

        Reviewed by Saam Barati.

        It's true that we can expect a heap to already be initialized if we try to deallocate in it.  But it
        may not have its deallocator initialized on this thread yet.
        
        This is easily fixed by adding a null check on the deallocate path. That's probably not going to
        change perf at all. But doing that allows me to get rid of a lot of weird stuff I previously did to
        avoid that null check, like creating a dummy TLS in the DebugHeap case.

        * bmalloc/IsoTLS.cpp:
        (bmalloc::IsoTLS::debugFree):
        (bmalloc::IsoTLS::deallocateSlow): Deleted.
        * bmalloc/IsoTLS.h:
        * bmalloc/IsoTLSInlines.h:
        (bmalloc::IsoTLS::allocateImpl):
        (bmalloc::IsoTLS::allocateSlow):
        (bmalloc::IsoTLS::deallocateImpl):
        (bmalloc::IsoTLS::deallocateSlow):
        (bmalloc::IsoTLS::ensureHeapAndEntries):

2017-12-01  Michael Saboff  <msaboff@apple.com>

        Gigacage should not be enabled for ARM64_32
        https://bugs.webkit.org/show_bug.cgi?id=180265

        Reviewed by Saam Barati.

        Disabled Gigacage for ARM64_32.
        In the process, restructured Gigacage::shouldBeEnabled() with GIGACAGE_ENABLED set
        to 0 to avoid a dead code compiler warning.

        * bmalloc/Gigacage.cpp:
        (Gigacage::shouldBeEnabled):
        * bmalloc/Gigacage.h:

2017-11-29  JF Bastien  <jfbastien@apple.com>

        WTF / bmalloc: don't write to 0xbbadbeef when ASAN is looking
        https://bugs.webkit.org/show_bug.cgi?id=180175

        Reviewed by Mark Lam.

        ASAN knows that 0xbbadbeef is a bbad aaddress, and tells us so
        when we write to it, say in an assert. That creates bbad error
        reports where ASAN thinks we write to an invalid address, instead
        of thinking that we hit an assertion. In some cases, tooling that
        use fuzzers aggregate similar issues, and think that we just have
        the one bug and not a bunch of different asserts.

        At the same time, bmalloc's version of CRASH just writes to
        0xbbadbeef and assumes that's invalid and will crash, which isn't
        necessarily true on non-Mac platforms. WTF's version then makes
        sure there's a crash, so bmalloc should do the same.

        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/BAssert.h:
        * bmalloc/BCompiler.h: Added.
        * bmalloc/BPlatform.h:

2017-11-27  Filip Pizlo  <fpizlo@apple.com>

        Don't crash in forEachEntry when DebugHeap is enabled.

        Unreviewed, fixing crashes on leaks bots by removing an assertion.

        * bmalloc/IsoTLS.cpp:
        (bmalloc::IsoTLS::forEachEntry):
        * test/testbmalloc.cpp: Make this test work with DebugHeap so I can catch this kind of problem in the future.

2017-11-16  Filip Pizlo  <fpizlo@apple.com>

        Isolated Heaps caused an increase in reported leaks on the bots
        https://bugs.webkit.org/show_bug.cgi?id=179463

        Reviewed by Darin Adler.
        
        This fixes the way isoheaps interact with system tools:
        
        - Opts into the VMHeap API so that the leaks tool can find isoheap memory.
        
        - Opts into the DebugHeap/Environment APIs so that we turn off isoheap allocation if memory
          debugging options are in use.

        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/DebugHeap.h:
        * bmalloc/IsoHeap.h:
        * bmalloc/IsoPage.cpp: Added.
        (bmalloc::IsoPageBase::allocatePageMemory):
        * bmalloc/IsoPage.h:
        * bmalloc/IsoPageInlines.h:
        (bmalloc::IsoPage<Config>::tryCreate):
        * bmalloc/IsoTLS.cpp:
        (bmalloc::IsoTLS::deallocateSlow):
        (bmalloc::IsoTLS::ensureEntries):
        (bmalloc::IsoTLS::isUsingDebugHeap):
        (bmalloc::IsoTLS::debugMalloc):
        * bmalloc/IsoTLS.h:
        * bmalloc/IsoTLSInlines.h:
        (bmalloc::IsoTLS::allocate):
        (bmalloc::IsoTLS::deallocate):
        (bmalloc::IsoTLS::allocateImpl):
        (bmalloc::IsoTLS::allocateFast):
        (bmalloc::IsoTLS::allocateSlow):
        (bmalloc::IsoTLS::deallocateImpl):
        (bmalloc::IsoTLS::deallocateFast):
        (bmalloc::IsoTLS::ensureHeapAndEntries):
        (bmalloc::IsoTLS::allocator): Deleted.
        (bmalloc::IsoTLS::deallocator): Deleted.
        * bmalloc/bmalloc.cpp:
        (bmalloc::api::tryLargeMemalignVirtual):
        (bmalloc::api::freeLargeVirtual):
        (bmalloc::api::scavenge):
        (bmalloc::api::isEnabled):
        (bmalloc::api::setScavengerThreadQOSClass):
        * bmalloc/bmalloc.h:
        (bmalloc::api::tryLargeMemalignVirtual): Deleted.
        (bmalloc::api::freeLargeVirtual): Deleted.
        (bmalloc::api::scavenge): Deleted.
        (bmalloc::api::isEnabled): Deleted.
        (bmalloc::api::setScavengerThreadQOSClass): Deleted.

2017-11-14  Saam Barati  <sbarati@apple.com>

        Make the gigacage runway 32GB
        https://bugs.webkit.org/show_bug.cgi?id=175062

        Reviewed by Mark Lam.

        Making the gigacage runway 32GB defends us against buffer overflows in the
        cage reaching memory outside the cage assuming indices are 32-bit unsigned
        integers and the type they're indexing into has size <= 8 bytes. This is
        exactly the case for many things in JSC. For example, butterfly access in
        JSC meet this criteria, as does typed array access.
        
        The 32GB comes from 8 * 2^32 = 32GB.

        * bmalloc/Gigacage.cpp:

2017-11-08  Michael Catanzaro  <mcatanzaro@igalia.com>

        Gigacage.cpp:44:46: warning: ‘*’ in boolean context, suggest ‘&&’ instead [-Wint-in-bool-context]
        https://bugs.webkit.org/show_bug.cgi?id=179427

        Reviewed by Saam Barati.

        Tweak the conditional to suppress the warning.

        * bmalloc/Gigacage.cpp:
        (Gigacage::ensureGigacage):

2017-11-07  Saam Barati  <sbarati@apple.com>

        We should PROT_NONE the Gigacage runway so OOB accesses crash
        https://bugs.webkit.org/show_bug.cgi?id=179392

        Reviewed by Mark Lam.

        If we assume that an attacker will exploit JSC and cause OOB accesses,
        we should make OOB accesses in the Gigacage runway crash.

        * bmalloc/Gigacage.cpp:
        (Gigacage::ensureGigacage):

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
        https://bugs.webkit.org/show_bug.cgi?id=178130

        Reviewed by Michael Catanzaro.

        * bmalloc/Gigacage.h: Re-enable Gigacage on ARM64 Linux.

2017-10-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r222945.
        https://bugs.webkit.org/show_bug.cgi?id=178818

        "It made WasmBench crash" (Requested by saamyjoon on #webkit).

        Reverted changeset:

        "bmalloc mutex should be adaptive"
        https://bugs.webkit.org/show_bug.cgi?id=177839
        https://trac.webkit.org/changeset/222945

2017-10-24  Zan Dobersek  <zdobersek@igalia.com>

        [Linux] Enable Gigacage in x64 Linux environment
        https://bugs.webkit.org/show_bug.cgi?id=177745
        <rdar://problem/34773148>

        Reviewed by Yusuke Suzuki.

        Re-enable Gigacage on x86_64 Linux platforms after it was disabled in 223877.

        The cause for the revert was problems with huge coredumps being generated
        while Gigacage was enabled. The feature virtually allocates about 80GB of
        memory at the beginning of the process lifetime. This is not a problem in
        itself since the memory range is marked as not needed through madvise(),
        but all this memory was still included upon core dump generation on Linux.
        Since there are reasonable limits enforced upon core dumps, these were
        being truncated every time, not yielding any useful information.

        To avoid this, on Linux, invocations of madvise() with the MADV_NORMAL and
        MADV_DONTNEED advice parameters should be accompanied with respectively
        matching MADV_DODUMP and MADV_DONTDUMP madvise() calls. This correctly
        avoids core-dumping any memory that's not yet been physically allocated.

        * bmalloc/Gigacage.h:
        * bmalloc/VMAllocate.h:
        (bmalloc::vmDeallocatePhysicalPages):
        (bmalloc::vmAllocatePhysicalPages):

2017-10-24  David Kilzer  <ddkilzer@apple.com>

        Need to pass non-nil argument to SimulateCrash() in bmalloc::logVMFailure()
        <https://webkit.org/b/178740>
        <rdar://problem/35154943>

        Reviewed by Saam Barati.

        * bmalloc/BPlatform.h:
        (BUNUSED_PARAM): Define macro.
        * bmalloc/Logging.cpp:
        (SimulateCrash): Change third argument of SimulateCrash() to
        CFStringRef since it's an NSString * in Objective-C.
        (bmalloc::logVMFailure): Create a CFStringRef to use as a
        description string.  Use new vmSize parameter to log size.
        * bmalloc/Logging.h:
        (bmalloc::logVMFailure): Update function signature to take a
        size_t parameter representing vmSize.
        * bmalloc/VMAllocate.h:
        (bmalloc::tryVMAllocate): Pass vmSize into logVMFailure().

2017-10-23  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, roll out r222731
        https://bugs.webkit.org/show_bug.cgi?id=177745
        <rdar://problem/34773148>

        Unfortunately Gigacage has broken core dump generation.

        * bmalloc/Gigacage.h:

2017-10-23  Zan Dobersek  <zdobersek@igalia.com>

        bmalloc::api::tryLargeMemalignVirtual() shouldn't assert on a failed allocation
        https://bugs.webkit.org/show_bug.cgi?id=178654

        Reviewed by Geoffrey Garen.

        * bmalloc/bmalloc.h:
        (bmalloc::api::tryLargeMemalignVirtual): Call Heap::tryAllocateLarge()
        instead of Heap::allocateLarge(). The former will return a null pointer
        upon a failed allocation, allowing the caller to fail gracefully just as
        the API entrypoint implies, while the latter currently provokes a crash
        in these circumstances.

2017-10-19  Saam Barati  <sbarati@apple.com>

        Runtime disable gigacage on iOS because it broke WasmBench
        https://bugs.webkit.org/show_bug.cgi?id=178556

        Reviewed by Keith Miller.

        * bmalloc/Gigacage.cpp:
        (Gigacage::shouldBeEnabled):

2017-10-17  Filip Pizlo  <fpizlo@apple.com>

        You can't vmDeallocate null
        <rdar://problem/35038926>

        Reviewed by Michael Saboff.
        
        After failing allocation, we would try to deallocate the thing we failed to allocate. The fix is to
        not try to deallocate something that is obviously null.

        * bmalloc/Gigacage.cpp:
        (Gigacage::ensureGigacage):

2017-09-29  Filip Pizlo  <fpizlo@apple.com>

        Enable gigacage on iOS
        https://bugs.webkit.org/show_bug.cgi?id=177586

        Reviewed by JF Bastien.
        
        Introduce the ability to disable gigacage at runtime if allocation fails. If any step of gigacage
        allocation fails, we free all of the gigacages and turn off gigacage support.
        
        Roll this back in after discussion.

        * CMakeLists.txt:
        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/Cache.cpp:
        (bmalloc::Cache::scavenge):
        * bmalloc/Cache.h:
        (bmalloc::Cache::tryAllocate):
        (bmalloc::Cache::allocate):
        (bmalloc::Cache::deallocate):
        (bmalloc::Cache::reallocate):
        * bmalloc/Gigacage.cpp:
        (Gigacage::ensureGigacage):
        (Gigacage::runway):
        (Gigacage::totalSize):
        (Gigacage::shouldBeEnabled):
        (): Deleted.
        (Gigacage::Callback::Callback): Deleted.
        (Gigacage::Callback::function): Deleted.
        (Gigacage::PrimitiveDisableCallbacks::PrimitiveDisableCallbacks): Deleted.
        * bmalloc/Gigacage.h:
        (Gigacage::wasEnabled):
        (Gigacage::isEnabled):
        (Gigacage::runway): Deleted.
        (Gigacage::totalSize): Deleted.
        * bmalloc/HeapKind.cpp: Added.
        (bmalloc::isActiveHeapKind):
        (bmalloc::mapToActiveHeapKind):
        * bmalloc/HeapKind.h:
        (bmalloc::isActiveHeapKindAfterEnsuringGigacage):
        (bmalloc::mapToActiveHeapKindAfterEnsuringGigacage):
        * bmalloc/Scavenger.cpp:
        (bmalloc::Scavenger::scavenge):
        * bmalloc/bmalloc.h:
        (bmalloc::api::tryLargeMemalignVirtual):
        (bmalloc::api::freeLargeVirtual):
        (bmalloc::api::isEnabled):

2017-10-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r223113 and r223121.
        https://bugs.webkit.org/show_bug.cgi?id=178182

        Reintroduced 20% regression on Kraken (Requested by rniwa on
        #webkit).

        Reverted changesets:

        "Enable gigacage on iOS"
        https://bugs.webkit.org/show_bug.cgi?id=177586
        https://trac.webkit.org/changeset/223113

        "Use one virtual allocation for all gigacages and their
        runways"
        https://bugs.webkit.org/show_bug.cgi?id=178050
        https://trac.webkit.org/changeset/223121

2017-10-07  Filip Pizlo  <fpizlo@apple.com>

        Use one virtual allocation for all gigacages and their runways
        https://bugs.webkit.org/show_bug.cgi?id=178050

        Reviewed by Saam Barati.

        * bmalloc/Gigacage.cpp:
        (Gigacage::ensureGigacage):
        (Gigacage::runway): Deleted.
        (Gigacage::totalSize): Deleted.
        * bmalloc/Gigacage.h:

2017-09-29  Filip Pizlo  <fpizlo@apple.com>

        Enable gigacage on iOS
        https://bugs.webkit.org/show_bug.cgi?id=177586

        Reviewed by JF Bastien.
        
        Introduce the ability to disable gigacage at runtime if allocation fails. If any step of gigacage
        allocation fails, we free all of the gigacages and turn off gigacage support.
        
        Reland this after confirming that the 20% Kraken regression was a one-bot fluke. Local testing on the
        same kind of system did not show the regression. Saam and I both tried independently.

        * CMakeLists.txt:
        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/Cache.cpp:
        (bmalloc::Cache::scavenge):
        * bmalloc/Cache.h:
        (bmalloc::Cache::tryAllocate):
        (bmalloc::Cache::allocate):
        (bmalloc::Cache::deallocate):
        (bmalloc::Cache::reallocate):
        * bmalloc/Gigacage.cpp:
        (Gigacage::ensureGigacage):
        (Gigacage::runway):
        (Gigacage::totalSize):
        (Gigacage::shouldBeEnabled):
        (): Deleted.
        (Gigacage::Callback::Callback): Deleted.
        (Gigacage::Callback::function): Deleted.
        (Gigacage::PrimitiveDisableCallbacks::PrimitiveDisableCallbacks): Deleted.
        * bmalloc/Gigacage.h:
        (Gigacage::wasEnabled):
        (Gigacage::isEnabled):
        (Gigacage::runway): Deleted.
        (Gigacage::totalSize): Deleted.
        * bmalloc/HeapKind.cpp: Added.
        (bmalloc::isActiveHeapKind):
        (bmalloc::mapToActiveHeapKind):
        * bmalloc/HeapKind.h:
        (bmalloc::isActiveHeapKindAfterEnsuringGigacage):
        (bmalloc::mapToActiveHeapKindAfterEnsuringGigacage):
        * bmalloc/Scavenger.cpp:
        (bmalloc::Scavenger::scavenge):
        * bmalloc/bmalloc.h:
        (bmalloc::api::tryLargeMemalignVirtual):
        (bmalloc::api::freeLargeVirtual):
        (bmalloc::api::isEnabled):

2017-10-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r223015 and r223025.
        https://bugs.webkit.org/show_bug.cgi?id=178093

        Regressed Kraken on iOS by 20% (Requested by keith_mi_ on
        #webkit).

        Reverted changesets:

        "Enable gigacage on iOS"
        https://bugs.webkit.org/show_bug.cgi?id=177586
        http://trac.webkit.org/changeset/223015

        "Unreviewed, disable Gigacage on ARM64 Linux"
        https://bugs.webkit.org/show_bug.cgi?id=177586
        http://trac.webkit.org/changeset/223025

2017-10-07  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, disable Gigacage on ARM64 Linux
        https://bugs.webkit.org/show_bug.cgi?id=177586

        Gigacage's LLInt change breaks ARM64 Linux.
        Currently we do not have maintainers for this.
        Let's simply disable it.

        * bmalloc/Gigacage.h:

2017-09-29  Filip Pizlo  <fpizlo@apple.com>

        Enable gigacage on iOS
        https://bugs.webkit.org/show_bug.cgi?id=177586

        Reviewed by JF Bastien.
        
        Introduce the ability to disable gigacage at runtime if allocation fails. If any step of gigacage
        allocation fails, we free all of the gigacages and turn off gigacage support.

        * CMakeLists.txt:
        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/Cache.cpp:
        (bmalloc::Cache::scavenge):
        * bmalloc/Cache.h:
        (bmalloc::Cache::tryAllocate):
        (bmalloc::Cache::allocate):
        (bmalloc::Cache::deallocate):
        (bmalloc::Cache::reallocate):
        * bmalloc/Gigacage.cpp:
        (Gigacage::ensureGigacage):
        (Gigacage::runway):
        (Gigacage::totalSize):
        (Gigacage::shouldBeEnabled):
        (): Deleted.
        (Gigacage::Callback::Callback): Deleted.
        (Gigacage::Callback::function): Deleted.
        (Gigacage::PrimitiveDisableCallbacks::PrimitiveDisableCallbacks): Deleted.
        * bmalloc/Gigacage.h:
        (Gigacage::wasEnabled):
        (Gigacage::isEnabled):
        (Gigacage::runway): Deleted.
        (Gigacage::totalSize): Deleted.
        * bmalloc/HeapKind.cpp: Added.
        (bmalloc::isActiveHeapKind):
        (bmalloc::mapToActiveHeapKind):
        * bmalloc/HeapKind.h:
        (bmalloc::isActiveHeapKindAfterEnsuringGigacage):
        (bmalloc::mapToActiveHeapKindAfterEnsuringGigacage):
        * bmalloc/Scavenger.cpp:
        (bmalloc::Scavenger::scavenge):
        * bmalloc/bmalloc.h:
        (bmalloc::api::tryLargeMemalignVirtual):
        (bmalloc::api::freeLargeVirtual):
        (bmalloc::api::isEnabled):

2017-10-05  Filip Pizlo  <fpizlo@apple.com>

        Use one Scavenger thread for all Heaps
        https://bugs.webkit.org/show_bug.cgi?id=174973

        Reviewed by JF Bastien.
        
        This combines the scavengers from all Heap instances into a single scavenger. It also combines
        the accounting for deciding when to run. Each Heap still controls what it means to scavenge
        itself (it's all in Heap::scavenge) but the policy decisions are all controlled by Scavenger.
        Because Scavenger is also the only thing that needs an AsyncTask, this removes AsyncTask and
        moves all of AsyncTask's logic into Scavenger.
        
        This appears to be a 1% progression on JetStream (with high statistical confidence: p = 0.0049).

        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/AsyncTask.h: Removed.
        * bmalloc/Heap.cpp:
        (bmalloc::Heap::Heap):
        (bmalloc::Heap::allocateSmallChunk):
        (bmalloc::Heap::allocateSmallPage):
        (bmalloc::Heap::deallocateSmallLine):
        (bmalloc::Heap::splitAndAllocate):
        (bmalloc::Heap::tryAllocateLarge):
        (bmalloc::Heap::shrinkLarge):
        (bmalloc::Heap::deallocateLarge):
        (bmalloc::Heap::concurrentScavenge): Deleted.
        (bmalloc::Heap::scheduleScavengerIfUnderMemoryPressure): Deleted.
        (bmalloc::Heap::scheduleScavenger): Deleted.
        * bmalloc/Heap.h:
        * bmalloc/Scavenger.cpp:
        (bmalloc::Scavenger::Scavenger):
        (bmalloc::Scavenger::run):
        (bmalloc::Scavenger::runHoldingLock):
        (bmalloc::Scavenger::runSoon):
        (bmalloc::Scavenger::runSoonHoldingLock):
        (bmalloc::Scavenger::didStartGrowing):
        (bmalloc::Scavenger::scheduleIfUnderMemoryPressure):
        (bmalloc::Scavenger::scheduleIfUnderMemoryPressureHoldingLock):
        (bmalloc::Scavenger::schedule):
        (bmalloc::Scavenger::threadEntryPoint):
        (bmalloc::Scavenger::threadRunLoop):
        (bmalloc::Scavenger::setSelfQOSClass):
        * bmalloc/Scavenger.h:
        (bmalloc::Scavenger::willRun):
        (bmalloc::Scavenger::willRunSoon):

2017-10-04  Filip Pizlo  <fpizlo@apple.com>

        bmalloc mutex should be adaptive
        https://bugs.webkit.org/show_bug.cgi?id=177839

        Reviewed by Michael Saboff.
        
        This pulls the WordLock algorithm into bmalloc, mostly by copy-pasting the code. We need to
        copy paste because sometimes we build WTF without bmalloc, so WTF cannot rely on bmalloc for
        anything other than malloc.

        Reland after fixing ancient WordLock bug: the notify_one has to happen with the lock held
        to ensure it doesn't run after that thread has died.

        * bmalloc/Algorithm.h:
        (bmalloc::compareExchangeWeak):
        (bmalloc::compareExchangeStrong):
        * bmalloc/PerThread.h:
        * bmalloc/StaticMutex.cpp:
        (bmalloc::StaticMutex::lockSlow):
        (bmalloc::StaticMutex::unlockSlow):
        (bmalloc::StaticMutex::lockSlowCase): Deleted.
        * bmalloc/StaticMutex.h:
        (bmalloc::StaticMutex::try_lock):
        (bmalloc::StaticMutex::isLocked const):
        (bmalloc::StaticMutex::init):
        (bmalloc::StaticMutex::tryLock):
        (bmalloc::StaticMutex::lock):
        (bmalloc::StaticMutex::unlock):
        (bmalloc::sleep): Deleted.
        (bmalloc::waitUntilFalse): Deleted.

2017-10-05  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r222893.

        This caused multiple API failures.

        Reverted changeset:

        "bmalloc mutex should be adaptive"
        https://bugs.webkit.org/show_bug.cgi?id=177839
        http://trac.webkit.org/changeset/222893

2017-10-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        [Linux] Port MallocBench
        https://bugs.webkit.org/show_bug.cgi?id=177856

        Reviewed by Filip Pizlo.

        * CMakeLists.txt:

2017-10-04  Filip Pizlo  <fpizlo@apple.com>

        bmalloc mutex should be adaptive
        https://bugs.webkit.org/show_bug.cgi?id=177839

        Reviewed by Michael Saboff.
        
        This pulls the WordLock algorithm into bmalloc, mostly by copy-pasting the code. We need to
        copy paste because sometimes we build WTF without bmalloc, so WTF cannot rely on bmalloc for
        anything other than malloc.

        * bmalloc/Algorithm.h:
        (bmalloc::compareExchangeWeak):
        (bmalloc::compareExchangeStrong):
        * bmalloc/PerThread.h:
        * bmalloc/StaticMutex.cpp:
        (bmalloc::StaticMutex::lockSlow):
        (bmalloc::StaticMutex::unlockSlow):
        (bmalloc::StaticMutex::lockSlowCase): Deleted.
        * bmalloc/StaticMutex.h:
        (bmalloc::StaticMutex::try_lock):
        (bmalloc::StaticMutex::isLocked const):
        (bmalloc::StaticMutex::init):
        (bmalloc::StaticMutex::tryLock):
        (bmalloc::StaticMutex::lock):
        (bmalloc::StaticMutex::unlock):
        (bmalloc::sleep): Deleted.
        (bmalloc::waitUntilFalse): Deleted.

2017-10-02  Yusuke Suzuki  <utatane.tea@gmail.com>

        [Linux] Enable Gigacage in x64 Linux environment
        https://bugs.webkit.org/show_bug.cgi?id=177745

        Reviewed by Carlos Garcia Campos.

        This patch enables Gigacage in x64 Linux environment.
        Gigacage enforces a caged pointer to reference to the
        specific memory region. This reduces the effectiveness
        of some types of attacks setting a pointer to ArrayBuffer
        and modifying arbitrary memory region.

        * bmalloc/Gigacage.h:

2017-09-29  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r222625.
        https://bugs.webkit.org/show_bug.cgi?id=177664

        causes crashes on iOS (Requested by pizlo-mbp on #webkit).

        Reverted changeset:

        "Enable gigacage on iOS"
        https://bugs.webkit.org/show_bug.cgi?id=177586
        http://trac.webkit.org/changeset/222625

2017-09-28  Filip Pizlo  <fpizlo@apple.com>

        Enable gigacage on iOS
        https://bugs.webkit.org/show_bug.cgi?id=177586

        Reviewed by Michael Saboff.
        
        This enables Gigacage on iOS using a much smaller cage size. It's not necessary for it to be so
        small, but this is a good conservative starting point to start to exercise the code.

        * bmalloc/Gigacage.h:

2017-09-26  Filip Pizlo  <fpizlo@apple.com>

        Put g_gigacageBasePtr into its own page and make it read-only
        https://bugs.webkit.org/show_bug.cgi?id=174972

        Reviewed by Michael Saboff.
        
        This puts the gigacage base pointers into their own page and makes that page read-only.

        * bmalloc/Gigacage.cpp:
        (Gigacage::ensureGigacage):
        (Gigacage::disablePrimitiveGigacage):
        (Gigacage::addPrimitiveDisableCallback):
        * bmalloc/Gigacage.h:
        (Gigacage::basePtr):
        (Gigacage::basePtrs):

2017-09-04  Adrian Perez de Castro  <aperez@igalia.com>

        Unreviewed build fix for Clang with libc++

        Fixes a build failure when building with Clang, -stdlib=libc++, and gigacage
        support enabled, which resulted in "stderr" being undefined.

        * bmalloc/Gigacage.cpp: Add missing <ctsdio> include to pull the definition.

2017-09-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        Large virtual memory region allocation requires MMAP_NORESERVE in Linux
        https://bugs.webkit.org/show_bug.cgi?id=176211

        Reviewed by Geoffrey Garen.

        In Linux, we cannot allocate very large memory region without MMAP_NORESERVE.
        Linux kernel needs to reserve swap area for allocated memory region. If the
        swap area is exhausted, kernel fails to allocate the memory region with ENOMEM.

        This patch adds MMAP_NORESERVE to mmap flags in Linux. By adding this flag,
        mmap does not need to reserve swap area for the reserved memory region.
        This allows us to reserve very large memory region that is necessary for Gigacage.

        * bmalloc/BPlatform.h:
        * bmalloc/VMAllocate.h:
        (bmalloc::tryVMAllocate):

2017-08-22  Filip Pizlo  <fpizlo@apple.com>

        Strings need to be in some kind of gigacage
        https://bugs.webkit.org/show_bug.cgi?id=174924

        Reviewed by Oliver Hunt.
        
        This adds a StringGigacage.

        * bmalloc/Gigacage.cpp:
        * bmalloc/Gigacage.h:
        (Gigacage::name):
        (Gigacage::basePtr):
        (Gigacage::forEachKind):
        * bmalloc/HeapKind.h:
        (bmalloc::isGigacage):
        (bmalloc::gigacageKind):
        (bmalloc::heapKind):

2017-08-30  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r221384.

        This patch caused multiple 32-bit JSC test failures.

        Reverted changeset:

        "Strings need to be in some kind of gigacage"
        https://bugs.webkit.org/show_bug.cgi?id=174924
        http://trac.webkit.org/changeset/221384

2017-08-22  Filip Pizlo  <fpizlo@apple.com>

        Strings need to be in some kind of gigacage
        https://bugs.webkit.org/show_bug.cgi?id=174924

        Reviewed by Oliver Hunt.
        
        This adds a StringGigacage.

        * bmalloc/Gigacage.cpp:
        * bmalloc/Gigacage.h:
        (Gigacage::name):
        (Gigacage::basePtr):
        (Gigacage::forEachKind):
        * bmalloc/HeapKind.h:
        (bmalloc::isGigacage):
        (bmalloc::gigacageKind):
        (bmalloc::heapKind):

2017-08-25  Daniel Bates  <dabates@apple.com>

        Demarcate code added due to lack of NSDMI for aggregates
        https://bugs.webkit.org/show_bug.cgi?id=175990

        Reviewed by Andy Estes.

        * bmalloc/BPlatform.h:
        * bmalloc/List.h: Be explicit when initializing m_node to improve readability.
        (bmalloc::ListNode::ListNode):

2017-08-23  Filip Pizlo  <fpizlo@apple.com>

        Reduce Gigacage sizes
        https://bugs.webkit.org/show_bug.cgi?id=175920

        Reviewed by Mark Lam.

        This introduces the ability to have different gigacage sizes for different gigacages, and uses it to reduce the size of both
        gigacages, but to different extents: Primitive gets 32GB with a 16GB runway and JSValue gets 16GB.

        This is a ~10% membuster progression on my Mac Pro.

        * bmalloc/Gigacage.cpp:
        (Gigacage::ensureGigacage):
        * bmalloc/Gigacage.h:
        (Gigacage::size):
        (Gigacage::alignment):
        (Gigacage::mask):
        (Gigacage::runway):
        (Gigacage::totalSize):
        (Gigacage::caged):
        * bmalloc/Heap.cpp:
        (bmalloc::Heap::Heap):
        (bmalloc::Heap::gigacageSize):
        * bmalloc/Heap.h:

2017-08-08  Filip Pizlo  <fpizlo@apple.com>

        Baseline JIT should do caging
        https://bugs.webkit.org/show_bug.cgi?id=175037

        Reviewed by Mark Lam.
        
        This centralizes the notion of permanently enabling the primitive gigacage, which we only do in jsc
        and WebProcess.
        
        This saves the baseline JIT from emitting some code. Otherwise it would always have to emit enabled
        checks on each typed array access.

        * bmalloc/Gigacage.cpp:
        (Gigacage::primitiveGigacageDisabled):
        (Gigacage::disableDisablingPrimitiveGigacageIfShouldBeEnabled):
        (Gigacage::isDisablingPrimitiveGigacageDisabled):
        * bmalloc/Gigacage.h:
        (Gigacage::isPrimitiveGigacagePermanentlyEnabled):
        (Gigacage::canPrimitiveGigacageBeDisabled):

2017-08-08  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r220368.

        This change caused WK1 tests to exit early with crashes.

        Reverted changeset:

        "Baseline JIT should do caging"
        https://bugs.webkit.org/show_bug.cgi?id=175037
        http://trac.webkit.org/changeset/220368

2017-08-07  Filip Pizlo  <fpizlo@apple.com>

        Baseline JIT should do caging
        https://bugs.webkit.org/show_bug.cgi?id=175037

        Reviewed by Mark Lam.
        
        This centralizes the notion of permanently enabling the primitive gigacage, which we only do in jsc
        and WebProcess.
        
        This saves the baseline JIT from emitting some code. Otherwise it would always have to emit enabled
        checks on each typed array access.

        * bmalloc/Gigacage.cpp:
        (Gigacage::primitiveGigacageDisabled):
        (Gigacage::disableDisablingPrimitiveGigacageIfShouldBeEnabled):
        (Gigacage::isDisablingPrimitiveGigacageDisabled):
        * bmalloc/Gigacage.h:
        (Gigacage::isPrimitiveGigacagePermanentlyEnabled):
        (Gigacage::canPrimitiveGigacageBeDisabled):

2017-08-06  Filip Pizlo  <fpizlo@apple.com>

        Primitive auxiliaries and JSValue auxiliaries should have separate gigacages
        https://bugs.webkit.org/show_bug.cgi?id=174919

        Reviewed by Keith Miller.
        
        This introduces two kinds of Gigacage, Primitive and JSValue. This translates to two kinds of
        HeapKind, PrimitiveGigacage and JSValueGigacage.
        
        The new support functionality required turning Inline.h into BInline.h, and INLINE into BINLINE, and
        NO_INLINE into BNO_INLINE.

        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::refillAllocatorSlowCase):
        (bmalloc::Allocator::refillAllocator):
        (bmalloc::Allocator::allocateLarge):
        (bmalloc::Allocator::allocateLogSizeClass):
        * bmalloc/AsyncTask.h:
        * bmalloc/BInline.h: Copied from Source/bmalloc/bmalloc/Inline.h.
        * bmalloc/Cache.cpp:
        (bmalloc::Cache::tryAllocateSlowCaseNullCache):
        (bmalloc::Cache::allocateSlowCaseNullCache):
        (bmalloc::Cache::deallocateSlowCaseNullCache):
        (bmalloc::Cache::reallocateSlowCaseNullCache):
        * bmalloc/Deallocator.cpp:
        * bmalloc/Gigacage.cpp:
        (Gigacage::PrimitiveDisableCallbacks::PrimitiveDisableCallbacks):
        (Gigacage::ensureGigacage):
        (Gigacage::disablePrimitiveGigacage):
        (Gigacage::addPrimitiveDisableCallback):
        (Gigacage::removePrimitiveDisableCallback):
        (Gigacage::Callbacks::Callbacks): Deleted.
        (Gigacage::disableGigacage): Deleted.
        (Gigacage::addDisableCallback): Deleted.
        (Gigacage::removeDisableCallback): Deleted.
        * bmalloc/Gigacage.h:
        (Gigacage::name):
        (Gigacage::basePtr):
        (Gigacage::forEachKind):
        (Gigacage::caged):
        (Gigacage::isCaged):
        * bmalloc/Heap.cpp:
        (bmalloc::Heap::Heap):
        (bmalloc::Heap::usingGigacage):
        (bmalloc::Heap::gigacageBasePtr):
        * bmalloc/Heap.h:
        * bmalloc/HeapKind.h:
        (bmalloc::isGigacage):
        (bmalloc::gigacageKind):
        (bmalloc::heapKind):
        * bmalloc/Inline.h: Removed.
        * bmalloc/Map.h:
        * bmalloc/PerProcess.h:
        (bmalloc::PerProcess<T>::getFastCase):
        (bmalloc::PerProcess<T>::get):
        (bmalloc::PerProcess<T>::getSlowCase):
        * bmalloc/PerThread.h:
        (bmalloc::PerThread<T>::getFastCase):
        * bmalloc/Vector.h:
        (bmalloc::Vector<T>::push):
        (bmalloc::Vector<T>::shrinkCapacity):
        (bmalloc::Vector<T>::growCapacity):

2017-08-02  Filip Pizlo  <fpizlo@apple.com>

        If Gigacage is disabled, bmalloc should service large aligned memory allocation requests through vmAllocate
        https://bugs.webkit.org/show_bug.cgi?id=175085

        Reviewed by Saam Barati.
        
        This fixes a problem where if we used gmalloc, WebAssembly memory allocations would still use
        bmalloc's large allocator.
        
        We want to use the page allocator for those "large" allocations when the Gigacage is disabled.

        * bmalloc/DebugHeap.cpp:
        (bmalloc::DebugHeap::DebugHeap):
        (bmalloc::DebugHeap::memalignLarge):
        (bmalloc::DebugHeap::freeLarge):
        * bmalloc/DebugHeap.h:
        * bmalloc/Heap.cpp:
        (bmalloc::Heap::tryAllocateLarge):
        (bmalloc::Heap::deallocateLarge):

2017-08-02  Filip Pizlo  <fpizlo@apple.com>

        We should be OK with the gigacage being disabled on gmalloc
        https://bugs.webkit.org/show_bug.cgi?id=175082

        Reviewed by Michael Saboff.
        
        This adds Gigacage::shouldBeEnabled(), which returns false when we're using gmalloc or other things
        that enable DebugHeap.

        * bmalloc/Environment.cpp:
        (bmalloc::Environment::Environment):
        * bmalloc/Environment.h:
        * bmalloc/Gigacage.cpp:
        (Gigacage::ensureGigacage):
        (Gigacage::shouldBeEnabled):
        * bmalloc/Gigacage.h:
        * bmalloc/Heap.cpp:
        (bmalloc::Heap::Heap):
        * bmalloc/Heap.h:

2017-08-01  Filip Pizlo  <fpizlo@apple.com>

        Bmalloc and GC should put auxiliaries (butterflies, typed array backing stores) in a gigacage (separate multi-GB VM region)
        https://bugs.webkit.org/show_bug.cgi?id=174727

        Reviewed by Mark Lam.
        
        This adds a mechanism for managing multiple isolated heaps in bmalloc. For now, these isoheaps
        (isolated heaps) have a very simple relationship with each other and with the rest of bmalloc:
        
        - You have to choose how many isoheaps you will have statically. See numHeaps in HeapKind.h.
        
        - Because numHeaps is static, each isoheap gets fast thread-local allocation. Basically, we have a
          Cache for each heap kind.
        
        - Each isoheap gets its own Heap.
        
        - Each Heap gets a scavenger thread.
        
        - Some things, like Zone/VMHeap/Scavenger, are per-process.
        
        Most of the per-HeapKind functionality is handled by PerHeapKind<>.
        
        This approach is ideal for supporting special per-HeapKind behaviors. For now we have two heaps:
        the Primary heap for normal malloc and the Gigacage. The gigacage is a 64GB-aligned 64GB virtual
        region that we now use for variable-length random-access allocations. No Primary allocations will
        go into the Gigacage.

        * CMakeLists.txt:
        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/AllocationKind.h: Added.
        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::Allocator):
        (bmalloc::Allocator::tryAllocate):
        (bmalloc::Allocator::allocateImpl):
        (bmalloc::Allocator::reallocate):
        (bmalloc::Allocator::refillAllocatorSlowCase):
        (bmalloc::Allocator::allocateLarge):
        * bmalloc/Allocator.h:
        * bmalloc/BExport.h: Added.
        * bmalloc/Cache.cpp:
        (bmalloc::Cache::scavenge):
        (bmalloc::Cache::Cache):
        (bmalloc::Cache::tryAllocateSlowCaseNullCache):
        (bmalloc::Cache::allocateSlowCaseNullCache):
        (bmalloc::Cache::deallocateSlowCaseNullCache):
        (bmalloc::Cache::reallocateSlowCaseNullCache):
        (bmalloc::Cache::operator new): Deleted.
        (bmalloc::Cache::operator delete): Deleted.
        * bmalloc/Cache.h:
        (bmalloc::Cache::tryAllocate):
        (bmalloc::Cache::allocate):
        (bmalloc::Cache::deallocate):
        (bmalloc::Cache::reallocate):
        * bmalloc/Deallocator.cpp:
        (bmalloc::Deallocator::Deallocator):
        (bmalloc::Deallocator::scavenge):
        (bmalloc::Deallocator::processObjectLog):
        (bmalloc::Deallocator::deallocateSlowCase):
        * bmalloc/Deallocator.h:
        * bmalloc/Gigacage.cpp: Added.
        (Gigacage::Callback::Callback):
        (Gigacage::Callback::function):
        (Gigacage::Callbacks::Callbacks):
        (Gigacage::ensureGigacage):
        (Gigacage::disableGigacage):
        (Gigacage::addDisableCallback):
        (Gigacage::removeDisableCallback):
        * bmalloc/Gigacage.h: Added.
        (Gigacage::caged):
        (Gigacage::isCaged):
        * bmalloc/Heap.cpp:
        (bmalloc::Heap::Heap):
        (bmalloc::Heap::usingGigacage):
        (bmalloc::Heap::concurrentScavenge):
        (bmalloc::Heap::splitAndAllocate):
        (bmalloc::Heap::tryAllocateLarge):
        (bmalloc::Heap::allocateLarge):
        (bmalloc::Heap::shrinkLarge):
        (bmalloc::Heap::deallocateLarge):
        * bmalloc/Heap.h:
        (bmalloc::Heap::mutex):
        (bmalloc::Heap::kind const):
        (bmalloc::Heap::setScavengerThreadQOSClass): Deleted.
        * bmalloc/HeapKind.h: Added.
        * bmalloc/ObjectType.cpp:
        (bmalloc::objectType):
        * bmalloc/ObjectType.h:
        * bmalloc/PerHeapKind.h: Added.
        (bmalloc::PerHeapKindBase::PerHeapKindBase):
        (bmalloc::PerHeapKindBase::size):
        (bmalloc::PerHeapKindBase::at):
        (bmalloc::PerHeapKindBase::at const):
        (bmalloc::PerHeapKindBase::operator[]):
        (bmalloc::PerHeapKindBase::operator[] const):
        (bmalloc::StaticPerHeapKind::StaticPerHeapKind):
        (bmalloc::PerHeapKind::PerHeapKind):
        (bmalloc::PerHeapKind::~PerHeapKind):
        * bmalloc/PerThread.h:
        (bmalloc::PerThread<T>::destructor):
        (bmalloc::PerThread<T>::getSlowCase):
        (bmalloc::PerThreadStorage<Cache>::get): Deleted.
        (bmalloc::PerThreadStorage<Cache>::init): Deleted.
        * bmalloc/Scavenger.cpp: Added.
        (bmalloc::Scavenger::Scavenger):
        (bmalloc::Scavenger::scavenge):
        * bmalloc/Scavenger.h: Added.
        (bmalloc::Scavenger::setScavengerThreadQOSClass):
        (bmalloc::Scavenger::requestedScavengerThreadQOSClass const):
        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::VMHeap):
        (bmalloc::VMHeap::tryAllocateLargeChunk):
        * bmalloc/VMHeap.h:
        * bmalloc/Zone.cpp:
        (bmalloc::Zone::Zone):
        * bmalloc/Zone.h:
        * bmalloc/bmalloc.h:
        (bmalloc::api::tryMalloc):
        (bmalloc::api::malloc):
        (bmalloc::api::tryMemalign):
        (bmalloc::api::memalign):
        (bmalloc::api::realloc):
        (bmalloc::api::tryLargeMemalignVirtual):
        (bmalloc::api::free):
        (bmalloc::api::freeLargeVirtual):
        (bmalloc::api::scavengeThisThread):
        (bmalloc::api::scavenge):
        (bmalloc::api::isEnabled):
        (bmalloc::api::setScavengerThreadQOSClass):
        * bmalloc/mbmalloc.cpp:

2017-08-01  Daewoong Jang  <daewoong.jang@navercorp.com>

        Implement __builtin_clzl for MSVC
        https://bugs.webkit.org/show_bug.cgi?id=174232

        Reviewed by Geoffrey Garen.

        * bmalloc/Algorithm.h:
        (bmalloc::clzl):
        (bmalloc::clzl<1>):
        (bmalloc::__builtin_clzl):
        * bmalloc/BPlatform.h:

2017-07-31  Mark Lam  <mark.lam@apple.com>

        Fixed some comment typos.

        Not reviewed.

        * bmalloc/PerProcess.h:

2017-07-14  Filip Pizlo  <fpizlo@apple.com>

        It should be easy to decide how WebKit yields
        https://bugs.webkit.org/show_bug.cgi?id=174298

        Reviewed by Saam Barati.
        
        Use sched_yield() explicitly.

        * bmalloc/StaticMutex.cpp:
        (bmalloc::StaticMutex::lockSlowCase):

2017-07-20  Chris Dumez  <cdumez@apple.com>

        Replace calls to Vector::resize() with calls to more efficient shrink() / grow() when applicable
        https://bugs.webkit.org/show_bug.cgi?id=174660

        Reviewed by Geoffrey Garen.

        Replace calls to Vector::resize() with calls to more efficient shrink() / grow() when applicable.
        This essentially replaces a branch to figure out if the new size is less or greater than the
        current size by an assertion.

        * bmalloc/Map.h:
        (bmalloc::Hash>::rehash):

2017-07-18  Andy Estes  <aestes@apple.com>

        [Xcode] Enable CLANG_WARN_RANGE_LOOP_ANALYSIS
        https://bugs.webkit.org/show_bug.cgi?id=174631

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:

2017-07-18  Andy Estes  <aestes@apple.com>

        [Xcode] Enable CLANG_WARN_OBJC_LITERAL_CONVERSION
        https://bugs.webkit.org/show_bug.cgi?id=174631

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig:

2017-07-18  Andy Estes  <aestes@apple.com>

        [Xcode] Enable CLANG_WARN_NON_LITERAL_NULL_CONVERSION
        https://bugs.webkit.org/show_bug.cgi?id=174631

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2017-07-18  Andy Estes  <aestes@apple.com>

        [Xcode] Enable CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING
        https://bugs.webkit.org/show_bug.cgi?id=174631

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig:

2017-07-12  Adrian Perez de Castro  <aperez@igalia.com>

        bmalloc: Failure to build when the compiler specifically targets ARMv8-A / defines __ARM_ARCH_8A__
        https://bugs.webkit.org/show_bug.cgi?id=174424

        Reviewed by Michael Catanzaro.

        * bmalloc/BPlatform.h: Also check for __ARCH_ARM_8A__ to detect ARMv8.

2017-07-05  Daewoong Jang  <daewoong.jang@navercorp.com>

        reinterpret_cast does not evaluate to constexpr
        https://bugs.webkit.org/show_bug.cgi?id=173622

        Reviewed by Yusuke Suzuki.

        * bmalloc/Algorithm.h:
        (bmalloc::mask):
        (bmalloc::roundUpToMultipleOf):

2017-07-03  Andy Estes  <aestes@apple.com>

        [Xcode] Add an experimental setting to build with ccache
        https://bugs.webkit.org/show_bug.cgi?id=173875

        Reviewed by Tim Horton.

        * Configurations/DebugRelease.xcconfig: Included ccache.xcconfig.

2017-07-01  Dan Bernstein  <mitz@apple.com>

        [iOS] Remove code only needed when building for iOS 9.x
        https://bugs.webkit.org/show_bug.cgi?id=174068

        Reviewed by Tim Horton.

        * bmalloc/BPlatform.h:
        * bmalloc/VMAllocate.h:
        (bmalloc::vmPageSizePhysical):

2017-07-01  Dan Bernstein  <mitz@apple.com>

        [macOS] Remove code only needed when building for OS X Yosemite
        https://bugs.webkit.org/show_bug.cgi?id=174067

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2017-06-30  Ryosuke Niwa  <rniwa@webkit.org>

        Ran sort-Xcode-project-file.

        * bmalloc.xcodeproj/project.pbxproj:

2017-06-19  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Add a per-thread line cache
        https://bugs.webkit.org/show_bug.cgi?id=173552

        Reviewed by Darin Adler.

        Previously, any thread could allocate out of any page with free lines.
        Now, the first thread to free a line in a page owns that page's free
        lines until the whole page becomes free.

        This patch is a big speedup on multi-threaded benchmarks.
        tree_churn --parallel gets 14% faster on a 2-core (4-hyper-core) MacBook
        Air and 2.85X faster on 12-core (24-hyper-core) Mac Pro. Other parallel
        benchmarks show significant but smaller speedups.

        Thread affinity is a great predictor of object lifetime. The per-thread
        line cache avoids the pathology of shuffling pages between threads,
        turning predictable lifetimes into unpredictable lifetimes, increasing
        fragmentation. On tree_churn --parallel, the per-thread line cache
        increases free memory found per page scanned by 2.85X.

        Free line scanning in fragmented pages is pretty expensive relative to
        other allocate / initialize / free operations. According to Instruments,
        on tree_churn --parallel, scanning is about 10X more expensive than
        freeing. This explains why a 2.85X improvement in scanning efficiency
        translates into a 2.85X overall speedup on tree_churn --parallel.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::refillAllocatorSlowCase): Pass through our line
        cache so the Heap can fill it.

        * bmalloc/Deallocator.cpp:
        (bmalloc::Deallocator::scavenge): Scavenge our line cache.

        (bmalloc::Deallocator::processObjectLog): Deleted.

        * bmalloc/Deallocator.h:
        (bmalloc::Deallocator::lineCache): Added a line cache.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::deallocateLineCache): Deallocation function for thread
        destruction.

        (bmalloc::Heap::allocateSmallPage):
        (bmalloc::Heap::deallocateSmallLine):
        (bmalloc::Heap::allocateSmallBumpRangesByMetadata):
        (bmalloc::Heap::allocateSmallBumpRangesByObject): Consult the new per-thread line
        cache for allocation and deallocation.

        * bmalloc/Heap.h:
        (bmalloc::Heap::allocateSmallBumpRanges):
        (bmalloc::Heap::derefSmallLine):

        * bmalloc/List.h:
        (bmalloc::List::remove): Remove has always been a logically static
        operation. Declare it static now so that the Heap can remove a page from
        a thread's line cache without holding a direct pointer to the cache.

        * bmalloc/SmallPage.h:

2017-06-10  Dan Bernstein  <mitz@apple.com>

        Reverted r218056 because it made the IDE reindex constantly.

        * Configurations/DebugRelease.xcconfig:

2017-06-10  Dan Bernstein  <mitz@apple.com>

        [Xcode] With Xcode 9 developer beta, everything rebuilds when switching between command-line and IDE
        https://bugs.webkit.org/show_bug.cgi?id=173223

        Reviewed by Sam Weinig.

        The rebuilds were happening due to a difference in the compiler options that the IDE and
        xcodebuild were specifying. Only the IDE was passing the -index-store-path option. To make
        xcodebuild pass that option, too, set CLANG_INDEX_STORE_ENABLE to YES if it is unset, and
        specify an appropriate path in CLANG_INDEX_STORE_PATH.

        * Configurations/DebugRelease.xcconfig:

2017-06-07  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: memory APIs don't need to be heap members
        https://bugs.webkit.org/show_bug.cgi?id=173076

        Reviewed by Sam Weinig.

        Asking the OS about memory use is unrelated to the state of bmalloc's
        heap, so it's a better separation of concerns if related code is not 
        part of the heap.

        * bmalloc/AvailableMemory.cpp:
        (bmalloc::memoryStatus):
        * bmalloc/AvailableMemory.h:
        (bmalloc::MemoryStatus::MemoryStatus):
        (bmalloc::isUnderMemoryPressure):
        (bmalloc::memoryFootprint):
        (bmalloc::percentAvailableMemoryInUse):
        * bmalloc/Heap.cpp:
        (bmalloc::Heap::Heap):
        (bmalloc::Heap::updateMemoryInUseParameters): Deleted.
        * bmalloc/Heap.h:
        (bmalloc::Heap::isUnderMemoryPressure): Deleted.
        (bmalloc::Heap::memoryFootprint): Deleted.
        (bmalloc::Heap::percentAvailableMemoryInUse): Deleted.

2017-06-06  Yusuke Suzuki  <utatane.tea@gmail.com>

        struct does not accept initializer-form if member has initializers in GCC 4.9
        https://bugs.webkit.org/show_bug.cgi?id=172974

        Reviewed by Carlos Garcia Campos.

        struct cannot accept initializer-form constructor (like, `ListNode<T> t { ... }`) if
        the member of the struct has a default initializer.
        Here is a simple snippet.

        template<typename T>
        struct Pair {
            T* prev { nullptr };
            T* next { nullptr };
        };

        Pair<int> pair { nullptr, nullptr };  // compile erorr in GCC 4.9.

        Instead, we define a default constructor (to invoke default initializers) and a constructor
        to accept the above initialization.

        * bmalloc/List.h:
        (bmalloc::ListNode::ListNode):
        (bmalloc::List::iterator::iterator):

2017-06-06  Geoffrey Garen  <ggaren@apple.com>

        Try to fix the GTK build.

        Unreviewed.

        * bmalloc/List.h:
        (bmalloc::List::List):

2017-06-05  Geoffrey Garen  <ggaren@apple.com>

        Try to fix the GTK build.

        Unreviewed.

        * bmalloc/List.h:

2017-06-02  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Small and large objects should share memory
        https://bugs.webkit.org/show_bug.cgi?id=172880
        <rdar://problem/31494732>

        Reviewed by Sam Weinig.

        This reduces our high water mark memory usage on JetStream on macOS
        by 10%-20%. It also has the nice side effect that we can free small
        object metadata after returning from a high water mark.

        No change in throughput.

        Our old algorithm allocated small object chunks and large objects in
        segregated virtual memory and never recycled addresses between them.
        This provided a slight security benefit because we could apply guard
        pages between the segregated ranges and we would never reuse the same
        virtual address for object and metadata memory.

        Our new algorithm allocates small object chunks from the large object
        allocator. This naturally recycles memory between small chunks and large
        objects, and between small chunks of different page classes. This allows
        us to shift memory between allocation types as a program moves between
        different phases of allocation, and to delete small object chunk metadata
        when a program shrinks back from a high water mark.

        Two intuitions I had about memory use turned out to be backwards in
        this context:

        (1) I thought that this optimization would work because it allowed you to
        allocate and free a 4MB object and then reuse that large allocation to
        service small allocations. In practice, the common benefit seems to be
        the opposite: After you allocate and free many small objects, you can
        stitch them together to allocate a large object without growing the heap.

        (2) I thought that it would be more memory-efficient to allocate
        fine-grained pages from the large object allocator. In practice, giving
        the large object allocator too many arbitrarily-sized ranges to manage
        leads to fragmentation. Meanwhile, segregated fit is a powerful memory
        optimization. So, it's best to return small object memory to the large
        allocator only when a whole small object chunk is free.

        * bmalloc/Chunk.h:
        (bmalloc::Chunk::ref):
        (bmalloc::Chunk::deref):
        (bmalloc::Chunk::refCount):
        (bmalloc::Chunk::freePages): We keep a free list per chunk and refcount
        each chunk so we can notice when a chunk becomes empty, and return it
        to the large allocator.

        (bmalloc::forEachPage): A new helper function for iterating the pages
        in a Chunk.

        (bmalloc::Chunk::Chunk): Use forEachPage instead of manual iteration.
        Use { } initialization because we don't get zero-initialized by the OS
        anymore.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::Heap):
        (bmalloc::Heap::concurrentScavenge):
        (bmalloc::Heap::scavenge): Don't bother unlocking while scavenging. I
        wasn't able to show it to be a consistent speedup. A more promising
        approach, if we find a motivating example, is for the scavenger to give
        up and return early if any other client is waiting on the lock.

        (bmalloc::Heap::allocateSmallChunk): New helper function for allocating
        a small chunk. It allocates through the large allocator to facilitate
        sharing. We still allocate a chunk at a time instead of a page at a time.
        Surprisingly, more precise page-at-a-time allocation is worse for memory
        use because of fragmentation. Segregated fit is a powerful optimization.

        (bmalloc::Heap::deallocateSmallChunk): New helper function for deallocating
        a small chunk.

        (bmalloc::Heap::allocateSmallPage): Updated for new APIs.

        (bmalloc::Heap::deallocateSmallLine):  Updated for new APIs. Note that
        we cache one free chunk per page class. This avoids churn in the large
        allocator when you free(malloc(X)).

        (bmalloc::Heap::allocateSmallBumpRangesByMetadata):
        (bmalloc::Heap::allocateSmallBumpRangesByObject):
        (bmalloc::Heap::tryAllocateLarge):
        (bmalloc::Heap::scavengeSmallPages): Deleted.
        (bmalloc::Heap::scavengeLargeObjects): Deleted.
        * bmalloc/Heap.h:

        * bmalloc/LargeMap.h:
        (bmalloc::LargeMap::begin):
        (bmalloc::LargeMap::end): Added iteration helpers for scavenging.

        * bmalloc/LargeRange.h:
        (bmalloc::LargeRange::physicalSize): Added a comment about something
        that I confused myself about in this patch.

        * bmalloc/List.h:
        (bmalloc::List::iterator::operator*):
        (bmalloc::List::iterator::operator->):
        (bmalloc::List::iterator::operator!=):
        (bmalloc::List::iterator::operator++):
        (bmalloc::List::begin):
        (bmalloc::List::end):
        (bmalloc::List::pushFront):
        (bmalloc::List::remove):
        (bmalloc::ListNode::ListNode): Deleted. Added iteration helpers for
        scavenging. Changed the default state of a Node to null pointers instead
        of self pointers to distinguish the null node from the empty node for
        easier debugging.

        * bmalloc/Sizes.h: Changed the chunk size to 1MB to increase the chances
        of a chunk becoming free and recyclable.

        * bmalloc/SmallPage.h:
        (bmalloc::SmallPage::hasPhysicalPages):
        (bmalloc::SmallPage::setHasPhysicalPages): Track physical state by page
        instead of implicitly by which list a page is in. It's simpler not
        to have to move chunks and pages between physical vs virtual lists.

        (bmalloc::SmallPage::SmallPage): Deleted.

        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::tryAllocateLargeChunk):
        (bmalloc::VMHeap::allocateSmallChunk): Deleted.
        * bmalloc/VMHeap.h:
        (bmalloc::VMHeap::allocateSmallPage): Deleted.
        (bmalloc::VMHeap::deallocateSmallPage): Deleted. Small chunk allocation
        just forwards to the large allocator now.

        * bmalloc/bmalloc.h:
        (bmalloc::api::scavenge):

2017-05-28  Dan Bernstein  <mitz@apple.com>

        [Xcode] ALWAYS_SEARCH_USER_PATHS is set to YES
        https://bugs.webkit.org/show_bug.cgi?id=172691

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig: Set ALWAYS_SEARCH_USER_PATHS to NO.

2017-05-25  Geoffrey Garen  <ggaren@apple.com> and Michael Saboff  <msaboff@apple.com>

        bmalloc: scavenger runs too much on JetStream
        https://bugs.webkit.org/show_bug.cgi?id=172373

        Reviewed by Geoffrey Garen.

        Instruments says that JetStream on macOS spends about 3% of its time in
        madvise.

        In <https://bugs.webkit.org/show_bug.cgi?id=160098>, Ben saw some
        evidence that madvise was the reason that switching to bmalloc for
        DFG::Node allocations was a slowdown the first time around.

        In <https://bugs.webkit.org/show_bug.cgi?id=172124>, Michael saw that
        scavening policy can affect JetStream.

        Intuitively, it seems wrong for the heap to idle shrink during hardcore
        benchmarking.

        The strategy here is to back off in response to any heap growth event,
        and to wait 2s instead of 0.5s for heap growth to take place -- but we
        scavenge immediately in response to critical memory pressure, to avoid
        jetsam.

        One hole in this strategy is that a workload with a perfectly
        unfragmented heap that allocates and deallocates ~16kB every 2s will
        never shrink its heap. This doesn't seem to be a problem in practice.

        This looks like a 2% - 4% speedup on JetStream on Mac Pro and MacBook Air.

        * bmalloc/AsyncTask.h:
        (bmalloc::AsyncTask::willRun):
        (bmalloc::AsyncTask::willRunSoon):
        (bmalloc::Function>::AsyncTask):
        (bmalloc::Function>::run):
        (bmalloc::Function>::runSoon):
        (bmalloc::Function>::threadRunLoop):
        (bmalloc::Function>::runSlowCase): Deleted. Added a "run soon" state
        so that execution delay is modeled directly instead of implicitly
        through sleep events. This enables the Heap to issue a "run now" event
        at any moment in response ot memory pressure.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::Heap): Don't call into our own API -- that's a layering
        violation.

        (bmalloc::Heap::updateMemoryInUseParameters): No need for
        m_scavengeSleepDuration anymore.

        (bmalloc::Heap::concurrentScavenge): Added a back-off policy when the
        heap is growing.
        (bmalloc::Heap::scavenge):

        (bmalloc::Heap::scavengeSmallPages):
        (bmalloc::Heap::scavengeLargeObjects): Don't try to give up in the middle
        of a scavenge event. Our new backoff policy supplants that design. Also,
        it's easier to profile and understand scavenging behavior if it always
        runs to completion once started.

        (bmalloc::Heap::scheduleScavenger):
        (bmalloc::Heap::scheduleScavengerIfUnderMemoryPressure): Added a
        synchronous amortized check for memory pressure. This check has the
        benefit that it runs immediately during high rates of heap activity,
        so we can detect memory pressure right away and wake the scavenger
        instead of waiting for the scavenger to wake up.

        (bmalloc::Heap::allocateSmallPage):
        (bmalloc::Heap::deallocateSmallLine):
        (bmalloc::Heap::splitAndAllocate):
        (bmalloc::Heap::tryAllocateLarge):
        (bmalloc::Heap::shrinkLarge):
        (bmalloc::Heap::deallocateLarge):
        * bmalloc/Heap.h:
        (bmalloc::Heap::isUnderMemoryPressure):
        * bmalloc/Sizes.h:
        * bmalloc/VMHeap.h:
        (bmalloc::VMHeap::deallocateSmallPage):
        * bmalloc/bmalloc.h:
        (bmalloc::api::scavenge): Updated for API changes above.

2017-05-17  Michael Saboff  <msaboff@apple.com>

        [iOS] The Garbage Collector shouldn't rely on the bmalloc scavenger for up to date memory footprint info (172186)
        https://bugs.webkit.org/show_bug.cgi?id=172186

        Reviewed by Geoffrey Garen.

        The calls memoryFootprint() and percentAvailableMemoryInUse() now make a system call to get
        the current memory footprint value.

        * bmalloc/Heap.h:
        (bmalloc::Heap::memoryFootprint):
        (bmalloc::Heap::percentAvailableMemoryInUse):

2017-05-16  Michael Saboff  <msaboff@apple.com>

        REGRESSION(r216763): JetStream is 1% slower on Mac
        https://bugs.webkit.org/show_bug.cgi?id=172124

        Reviewed by Filip Pizlo.

        It appears that changing maxScavengeSleepDuration from 512 to 250ms in r216763 is
        responsible for the regression.

        * bmalloc/Sizes.h:

2017-05-15  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Bump the size of the deallocator log to 512
        https://bugs.webkit.org/show_bug.cgi?id=172143

        Reviewed by Michael Saboff.

        This is a speedup on parallel workloads for machines with lots of CPUs.

        * bmalloc/Sizes.h:

2017-05-12  Michael Saboff  <msaboff@apple.com>

        [iOS] Use memory footprint to dynamically adjust behavior of allocators
        https://bugs.webkit.org/show_bug.cgi?id=171944

        Reviewed by Filip Pizlo.

        This change is iOS only.

        After the scavenger thread completes scavenging, it asks the OS for how much total memory the
        process is using.  This information is used to update the sleep delay for the scanvenger thread,
        as well as to provide memory in use data for other parts of the system.

        The scavenger sleep time is calculated using the following quadradic equation.

            scavengerSleep = 1.2*percentFreeMemory^2 - percentFreeMemory + 2

        Where percentFreeMemory is between 0 and 100.  The result is constrained to the values 2 and 250.

        This equation empirically works out to providing a 2ms sleep time when we have less than 10%
        memory available, 30ms when 20% is available and 250ms when 50% or more is available.  In testing,
        this exponentially agressive scavenging delay by itself reduced memory usage and made it much
        more deterministic when used without the corresponding change in the JSC Heap.

        Changed the scavenger thread to use the User Initiated QOS priority to ensure it doesn't
        get starved.

        Moved the non-Windows functionality of WTF::RAMSize() to new files AvailableMemory.{cpp,h}
        and implemented in the function availableMemory().  That functions limits the value returned
        on iOS to a maximum of 840MB as that is the jetsam soft memory limit.
        Added a new API availableMemory() so that WTF::RAMSize() will use this value.

        * CMakeLists.txt:
        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/BPlatform.h:
        * bmalloc/Heap.cpp:
        (bmalloc::Heap::Heap):
        (bmalloc::Heap::updateMemoryInUseParameters):
        (bmalloc::Heap::concurrentScavenge):
        (bmalloc::Heap::scavenge):
        * bmalloc/Heap.h:
        (bmalloc::Heap::memoryFootprint):
        (bmalloc::Heap::percentAvailableMemoryInUse):
        * bmalloc/Sizes.h:
        * bmalloc/bmalloc.h:
        (bmalloc::api::availableMemory):
        (bmalloc::api::memoryFootprint):
        (bmalloc::api::percentAvailableMemoryInUse):
        * bmalloc/AvailableMemory.cpp: Added.
        (bmalloc::computeAvailableMemory):
        (bmalloc::availableMemory):
        * bmalloc/AvailableMemory.h: Added.

2017-05-05  Joseph Pecoraro  <pecoraro@apple.com>

        Leaks always reports "WebKit Malloc Memory Pressure Handler" dispatch_queue/source as leaking
        https://bugs.webkit.org/show_bug.cgi?id=171532

        Reviewed by Geoffrey Garen.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::Heap):
        * bmalloc/Heap.h:
        Store the dispatch_source_t in a member to avoid a false positive leak.

2017-04-27  Michael Saboff  <msaboff@apple.com>

        bmalloc scavenger should know what page classes are allocating
        https://bugs.webkit.org/show_bug.cgi?id=171384

        Reviewed by Geoffrey Garen.

        This change replaces m_isAllocatingPages with a per page class flag to track which page
        classes are currently allocating.  When scavenging, we skip page classes that are actively
        allocating and come back to them on a subsequent pass.  This reduces the amount of time it
        takes for scavenger to free up pages as well as the total time it takes to handle all
        page classes.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::Heap):
        (bmalloc::Heap::concurrentScavenge):
        (bmalloc::Heap::scavenge):
        (bmalloc::Heap::scavengeSmallPages):
        (bmalloc::Heap::scavengeLargeObjects):
        (bmalloc::Heap::allocateSmallPage):
        (bmalloc::Heap::splitAndAllocate):
        (bmalloc::Heap::deallocateLarge):
        * bmalloc/Heap.h:
        (bmalloc::Heap::takeRequestedScavengerThreadQOSClass): Deleted.
        * bmalloc/VMHeap.h:
        (bmalloc::VMHeap::deallocateSmallPage):
        * bmalloc/bmalloc.h:
        (bmalloc::api::scavenge):

2017-04-25  Michael Saboff  <msaboff@apple.com>

        Call bmalloc scavenger first when handling a memory pressure event
        https://bugs.webkit.org/show_bug.cgi?id=171289

        Reviewed by Geoffrey Garen.

        Registered a critical memory pressure handler.  We add this handler in addition to the
        call to release bmalloc memory in the WebCore releaseMemory handler for the case of
        JSC API users that don't use WebCore.  When both handlers are in the process, it is
        basically a race.  One will win, but the loser won't do any more work, so it is harmless.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::Heap):

2017-04-14  Mark Lam  <mark.lam@apple.com>

        Update architectures in xcconfig files.
        https://bugs.webkit.org/show_bug.cgi?id=170867
        <rdar://problem/31628104>

        Reviewed by Joseph Pecoraro.

        * Configurations/Base.xcconfig:

2017-04-12  Dan Bernstein  <mitz@apple.com>

        [Mac] Future-proof .xcconfig files
        https://bugs.webkit.org/show_bug.cgi?id=170802

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2017-02-03  Ting-Wei Lan  <lantw44@gmail.com>

        Include cstdlib before using ::malloc and posix_memalign
        https://bugs.webkit.org/show_bug.cgi?id=167800

        Reviewed by Geoffrey Garen.

        * bmalloc/DebugHeap.cpp:

2017-02-01  Andreas Kling  <akling@apple.com>

        Implement the alwaysRunsAtBackgroundPriority WK2 setting using thread QoS.
        <https://webkit.org/b/167387>
        <rdar://problem/29711409>

        Reviewed by Antti Koivisto.

        Support changing the QoS level of the scavenger thread asynchronously through
        a request variable. This is not the most elegant thing in the world, but since
        threads are only allowed to change their own QoS class, our options are limited.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::concurrentScavenge):
        * bmalloc/Heap.h:
        (bmalloc::Heap::takeRequestedScavengerThreadQOSClass):
        (bmalloc::Heap::setScavengerThreadQOSClass):
        * bmalloc/bmalloc.h:
        (bmalloc::api::setScavengerThreadQOSClass):

2017-01-13  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Use a separate zone when using system malloc
        https://bugs.webkit.org/show_bug.cgi?id=167014

        Reviewed by Filip Pizlo.

        Harris asked for this so he could separate Safari and WebKit memory use
        when doing memory analysis.

        This patch adds an explicit DebugHeap class that contains all our
        code for specialized allocation with debugging.

        * bmalloc.xcodeproj/project.pbxproj:

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::Allocator):
        (bmalloc::Allocator::tryAllocate):
        (bmalloc::Allocator::allocateImpl):
        (bmalloc::Allocator::reallocate):
        (bmalloc::Allocator::allocateSlowCase):
        * bmalloc/Allocator.h: Forward to DebugHeap instead of inlining all the
        code. This is required for our new interface, and it is also a nice
        simplification that moves some not-very-important code out of the way.

        * bmalloc/Deallocator.cpp:
        (bmalloc::Deallocator::Deallocator):
        (bmalloc::Deallocator::scavenge):
        (bmalloc::Deallocator::deallocateSlowCase):
        * bmalloc/Deallocator.h: Ditto.

        * bmalloc/DebugHeap.cpp: Added.
        (bmalloc::DebugHeap::DebugHeap):
        (bmalloc::DebugHeap::malloc):
        (bmalloc::DebugHeap::memalign):
        (bmalloc::DebugHeap::realloc):
        (bmalloc::DebugHeap::free):
        * bmalloc/DebugHeap.h: Added. New class for overriding normal heap
        behavior. Right now, it just adds a malloc zone and then forwards to
        system malloc -- but we can add lots more kinds of debug heaps in the
        future if we find them useful.

        * bmalloc/Environment.cpp:
        (bmalloc::Environment::Environment):
        (bmalloc::Environment::computeIsDebugHeapEnabled):
        (bmalloc::Environment::computeIsBmallocEnabled): Deleted.
        * bmalloc/Environment.h:
        (bmalloc::Environment::isDebugHeapEnabled):
        (bmalloc::Environment::isBmallocEnabled): Deleted. Renamed everything to
        reflect our new use of DebugHeap.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::Heap):
        * bmalloc/Heap.h:
        (bmalloc::Heap::debugHeap): Updated to use DebugHeap.
        (bmalloc::Heap::environment): Deleted. 

        * bmalloc/bmalloc.h:
        (bmalloc::api::isEnabled): Updated to use DebugHeap.

2016-12-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Sort Xcode project files
        https://bugs.webkit.org/show_bug.cgi?id=165937

        Reviewed by Simon Fraser.

        * bmalloc.xcodeproj/project.pbxproj:

2016-12-08  David Kilzer  <ddkilzer@apple.com>

        Always check the return value of pthread_key_create()
        <https://webkit.org/b/165274>

        Reviewed by Darin Adler.

        * bmalloc/PerThread.h:
        (bmalloc::PerThreadStorage::init): Call BCRASH() if
        pthread_key_create() returns an error.  The error code will be
        stored in a register available in a crash log, so no need to log
        the value explicitly.

2016-12-06  Alexey Proskuryakov  <ap@apple.com>

        Correct SDKROOT values in xcconfig files
        https://bugs.webkit.org/show_bug.cgi?id=165487
        rdar://problem/29539209

        Reviewed by Dan Bernstein.

        Fix suggested by Dan Bernstein.

        * Configurations/DebugRelease.xcconfig:

2016-11-29  Andy Estes  <aestes@apple.com>

        [Cocoa] Enable two clang warnings recommended by Xcode
        https://bugs.webkit.org/show_bug.cgi?id=164498

        Reviewed by Mark Lam.

        * Configurations/Base.xcconfig: Enabled CLANG_WARN_INFINITE_RECURSION and CLANG_WARN_SUSPICIOUS_MOVE.

2016-11-10  Geoffrey Garen  <ggaren@apple.com>

        bmalloc threads should have a non-default QoS
        https://bugs.webkit.org/show_bug.cgi?id=164612

        Reviewed by Filip Pizlo.

        * bmalloc/AsyncTask.h:
        (bmalloc::Function>::threadEntryPoint): Request user-interactive quality
        of service because user-interactive tasks use malloc.

2016-10-20  Mark Lam  <mark.lam@apple.com>

        bmalloc api should crash on failure to allocate when !isBmallocEnabled.
        https://bugs.webkit.org/show_bug.cgi?id=163766

        Reviewed by Keith Miller and Filip Pizlo.

        We want to crash in bmalloc on failure to allocate even when !isBmallocEnabled.
        This is so that failures to allocate memory will manifest as crashes with a
        unique signature (i.e. as a SIGTRAP on release builds, or as a write to illegal
        address 0xbbadbeef on debug builds) and the crash will manifest inside bmalloc.
        This distinguishes allocation failures from other crashing bugs that manifest as
        SIGSEGVs due to random pointer dereferences in the clients of bmalloc.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::allocateImpl):
        (bmalloc::Allocator::reallocate):
        (bmalloc::Allocator::allocateSlowCase):

2016-09-26  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        Avoid implicit conversion from iterator to pointer
        https://bugs.webkit.org/show_bug.cgi?id=162482

        Reviewed by Geoffrey Garen.

        Not every STL supporting such conversion, we should get a pointer explicitly.

        * bmalloc/Chunk.h:
        (bmalloc::Chunk::lines):
        (bmalloc::Chunk::pages):
        * bmalloc/FixedVector.h:
        (bmalloc::FixedVector::begin):

2016-08-31  Filip Pizlo  <fpizlo@apple.com>

        Butterflies should be allocated in Auxiliary MarkedSpace instead of CopiedSpace and we should rewrite as much of the GC as needed to make this not a regression
        https://bugs.webkit.org/show_bug.cgi?id=160125

        Reviewed by Geoffrey Garen and Keith Miller.
        
        I needed to tryMemalign, so I added such a thing.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::allocate):
        (bmalloc::Allocator::tryAllocate):
        (bmalloc::Allocator::allocateImpl):
        * bmalloc/Allocator.h:
        * bmalloc/Cache.h:
        (bmalloc::Cache::tryAllocate):
        * bmalloc/bmalloc.h:
        (bmalloc::api::tryMemalign):

2016-08-30  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, build fix for GCC ports

        std::forward is declared in <utility> header.

        * bmalloc/ScopeExit.h:

2016-08-30  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: speed up the lock slow path
        https://bugs.webkit.org/show_bug.cgi?id=161058

        Unreviewed roll-in - with regression fixed.

        Revert to using yield() instead of swtch() because very low priority
        background tasks can cause priority inversion and deadlock. In the
        network process, that happened with com.apple.WebKit.Cache.Storage.serialBackground.

        Still a big speedup on MallocBench.

        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/ScopeExit.h: Added.
        (bmalloc::ScopeExit::ScopeExit):
        (bmalloc::ScopeExit::~ScopeExit):
        (bmalloc::makeScopeExit):
        * bmalloc/StaticMutex.cpp:
        (bmalloc::StaticMutex::lockSlowCase):
        * bmalloc/StaticMutex.h:
        (bmalloc::StaticMutex::init):

2016-08-26  Geoffrey Garen  <ggaren@apple.com>

        Unreviewed build fix.

        Fix the CMake build.

        * CMakeLists.txt:

2016-08-26  Geoffrey Garen  <ggaren@apple.com>

        Renamed XLarge* => Large*
        https://bugs.webkit.org/show_bug.cgi?id=161261

        Reviewed by Andreas Kling.

        XLarge is not a thing anymore: We just have Small and Large.

        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/Heap.cpp:
        (bmalloc::Heap::splitAndAllocate):
        (bmalloc::Heap::tryAllocateLarge):
        (bmalloc::Heap::shrinkLarge):
        (bmalloc::Heap::deallocateLarge):
        * bmalloc/Heap.h:
        * bmalloc/LargeMap.cpp: Copied from Source/bmalloc/bmalloc/XLargeMap.cpp.
        (bmalloc::LargeMap::remove):
        (bmalloc::LargeMap::add):
        (bmalloc::XLargeMap::remove): Deleted.
        (bmalloc::XLargeMap::add): Deleted.
        * bmalloc/LargeMap.h: Copied from Source/bmalloc/bmalloc/XLargeMap.h.
        (bmalloc::LargeMap::ranges):
        (bmalloc::XLargeMap::ranges): Deleted.
        * bmalloc/LargeRange.h: Copied from Source/bmalloc/bmalloc/XLargeRange.h.
        (bmalloc::LargeRange::LargeRange):
        (bmalloc::LargeRange::operator<):
        (bmalloc::canMerge):
        (bmalloc::merge):
        (bmalloc::LargeRange::split):
        (bmalloc::XLargeRange::XLargeRange): Deleted.
        (bmalloc::XLargeRange::operator<): Deleted.
        (bmalloc::XLargeRange::split): Deleted.
        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::tryAllocateLargeChunk):
        * bmalloc/VMHeap.h:
        * bmalloc/XLargeMap.cpp: Removed.
        * bmalloc/XLargeMap.h: Removed.
        * bmalloc/XLargeRange.h: Removed.

2016-08-26  Gavin Barraclough  <barraclough@apple.com>

        bmalloc: speed up the lock slow path
        https://bugs.webkit.org/show_bug.cgi?id=161058

        Unreviewed rollout - this caused regressions <rdar://problem/28026089>.

        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/ScopeExit.h: Removed.
        * bmalloc/StaticMutex.cpp:
        (bmalloc::StaticMutex::lockSlowCase):
        * bmalloc/StaticMutex.h:
        (bmalloc::StaticMutex::init):
        * bmalloc/ThreadSwitch.h: Removed.

2016-08-24  Andreas Kling  <akling@apple.com>

        Add bmalloc::api::isEnabled().
        <https://webkit.org/b/160534>

        Reviewed by Joseph Pecoraro.

        * bmalloc/bmalloc.h:
        (bmalloc::api::isEnabled):

2016-08-24  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, roll out r204901, r204897, r204866, r204856, r204854.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::allocate):
        (bmalloc::Allocator::tryAllocate): Deleted.
        (bmalloc::Allocator::allocateImpl): Deleted.
        * bmalloc/Allocator.h:
        * bmalloc/Cache.h:
        (bmalloc::Cache::tryAllocate): Deleted.
        * bmalloc/bmalloc.h:
        (bmalloc::api::tryMemalign): Deleted.

2016-08-12  Filip Pizlo  <fpizlo@apple.com>

        Butterflies should be allocated in Auxiliary MarkedSpace instead of CopiedSpace and we should rewrite as much of the GC as needed to make this not a regression
        https://bugs.webkit.org/show_bug.cgi?id=160125

        Reviewed by Geoffrey Garen.
        
        I needed to tryMemalign, so I added such a thing.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::allocate):
        (bmalloc::Allocator::tryAllocate):
        (bmalloc::Allocator::allocateImpl):
        (bmalloc::Allocator::reallocate):
        * bmalloc/Allocator.h:
        * bmalloc/Cache.h:
        (bmalloc::Cache::allocate):
        (bmalloc::Cache::tryAllocate):
        * bmalloc/bmalloc.h:
        (bmalloc::api::malloc):
        (bmalloc::api::tryMemalign):
        (bmalloc::api::memalign):

2016-08-22  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, build fix on GCC environment
        https://bugs.webkit.org/show_bug.cgi?id=161058

        std::forward is declared in <utility> header.

        * bmalloc/ScopeExit.h:

2016-08-22  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: speed up the lock slow path
        https://bugs.webkit.org/show_bug.cgi?id=161058

        Reviewed by Filip Pizlo.

        It is generally accepted practice that a lock should yield instead of
        spinning when a lock acquisition fails, to avoid wasting CPU and power.

        There are two problems with this generally accepted practice:

        (1) It's a fallacy that yielding is free. In reality, yielding itself
        consumes CPU and power -- by performing a syscall, running the OS
        scheduler, and possibly performing a context switch. (Instruments
        traces of MallocBench show the cost of yielding.) Therefore, spinning a
        little to avoid yielding can actually *save* CPU and power.

        (2) std::this_thread_yield() on Darwin is way too aggressive: It not only
        yields but also depresses your priority to absolute zero for 10ms. A
        recent PLT trace showed a few spots where the main thread just gave up
        on loading and rendering a page for 10ms so an unimportant background
        task could run.

        To correct these problems, this patch adds a little bit of spinning to
        the bmalloc lock slow path.

        Below are performance results on various CPUs.

        Mac Pro (12 hyperthreaded cores = 24 threads):

                                                            Baseline                       Patch                           Δ
            Execution Time:
                message_one                                    173ms                       173ms                            
                message_many                                   953ms                       927ms              ^ 1.03x faster
                churn --parallel                                60ms                        41ms              ^ 1.46x faster
                list_allocate --parallel                       224ms                       143ms              ^ 1.57x faster
                tree_allocate --parallel                     1,190ms                       758ms              ^ 1.57x faster
                tree_churn --parallel                        1,517ms                       906ms              ^ 1.67x faster
                facebook --parallel                          6,519ms                     4,580ms              ^ 1.42x faster
                reddit --parallel                            5,097ms                     3,411ms              ^ 1.49x faster
                flickr --parallel                            4,903ms                     3,501ms               ^ 1.4x faster
                theverge --parallel                          6,641ms                     4,505ms              ^ 1.47x faster

                <geometric mean>                             1,158ms                       832ms              ^ 1.39x faster
                <arithmetic mean>                            2,728ms                     1,895ms              ^ 1.44x faster
                <harmonic mean>                                332ms                       240ms              ^ 1.38x faster

        MacBook Air (2 hyperthreaded cores = 4 threads):

                                                            Baseline                       Patch                           Δ
            Execution Time:
                message_one                                    911ms                       907ms               ^ 1.0x faster
                message_many                                   515ms                       513ms               ^ 1.0x faster
                churn --parallel                               132ms                       134ms              ! 1.02x slower
                list_allocate --parallel                       104ms                       102ms              ^ 1.02x faster
                tree_allocate --parallel                       117ms                       111ms              ^ 1.05x faster
                tree_churn --parallel                          154ms                       151ms              ^ 1.02x faster
                facebook --parallel                            719ms                       687ms              ^ 1.05x faster
                reddit --parallel                              382ms                       341ms              ^ 1.12x faster
                flickr --parallel                              372ms                       345ms              ^ 1.08x faster
                theverge --parallel                            489ms                       444ms               ^ 1.1x faster

                <geometric mean>                               299ms                       287ms              ^ 1.04x faster
                <arithmetic mean>                              390ms                       374ms              ^ 1.04x faster
                <harmonic mean>                                227ms                       220ms              ^ 1.03x faster

        iPad (2 cores = 2 threads):

            [ Doesn't run Ruby, so no pretty subtest output. ]

                                                            Baseline                       Patch                           Δ
            Execution Time:                                 174.14ms                     171.5ms              ^ 1.02x faster

        * bmalloc.xcodeproj/project.pbxproj:

        * bmalloc/ScopeExit.h: Added. A barebones very wimpy version of
        WTF::ScopeExit.
        (bmalloc::ScopeExit::ScopeExit):
        (bmalloc::ScopeExit::~ScopeExit):
        (bmalloc::makeScopeExit):

        * bmalloc/StaticMutex.cpp:
        (bmalloc::StaticMutex::lockSlowCase): Spin before yielding -- that's the
        speedup. Don't spin if another CPU is already spinning. In theory, more
        than one spinner accomplishes nothing, and I found that there's a cutoff
        around 8 or 16 spinners that becomes performance negative on Mac Pro.

        (Note: Another way to accomplish a similar result, if you don't want to
        use a bit of state in the lock, is to spin for a random duration between
        0 and aLot. I tested a version of WTF::WeakRandom with unsynchronized
        static state and it worked great. But I ultimately opted for the explicit
        bit because I thought it was clearer.)

        * bmalloc/StaticMutex.h:
        (bmalloc::StaticMutex::init): Initialize our new bit.

        * bmalloc/ThreadSwitch.h: Added.
        (bmalloc::threadSwitch): Don't call yield() on Darwin because it's too
        aggressive. swtch() does what we want: Go run something else, without
        any other side-effects.

2016-08-03  Geoffrey Garen  <ggaren@apple.com>

        [bmalloc] Merging of XLargeRanges can leak the upper range
        https://bugs.webkit.org/show_bug.cgi?id=160403

        Reviewed by Michael Saboff.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::scavengeLargeObjects): Don't use removePhysical().
        Recorded physical size is a performance optimization. It is not the
        truth. So it might be zero even if a range contains physical pages.

        Instead, iterate each range in the map unconditionally.

        The map can shrink when we release the lock, so we must clamp our
        iterator each time through the loop.

        The map can grow when we release the lock, but we don't care because
        growth restarts the scavenger from the beginning.

        * bmalloc/XLargeMap.cpp:
        (bmalloc::XLargeMap::removePhysical): Deleted. Not used anymore.

        * bmalloc/XLargeMap.h:
        (bmalloc::XLargeMap::ranges): Added direct access for the sake of
        scavengeLargeObjects. (This violates our naming conventions -- I'll do
        a rename in a follow-up patch.)

2016-07-13  Enrica Casucci  <enrica@apple.com>

        Update supported platforms in xcconfig files to match the sdk names.
        https://bugs.webkit.org/show_bug.cgi?id=159728

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:

2016-07-11  Geoffrey Garen  <ggaren@apple.com>

        Crash due to abort() calling libc++.1.dylib: std::__1::thread::detach()
        https://bugs.webkit.org/show_bug.cgi?id=159655

        Reviewed by Sam Weinig.

        It's not entirely clear what was happening in these crashes, but our
        use of detach() was 100% forward-looking, so we can just remove it for
        now.

        This patch removes the ability for the scavenger owner to die before
        the scavenger thread dies (which was unused) and also removes the
        ability for the scavenger thread to exit (which was used, but we
        messed up and did thread joining lazily, so we never got any benefit
        from thread exit.)

        We can add these features back when we need them, and make them work then.

        * bmalloc/AsyncTask.h:
        (bmalloc::Function>::AsyncTask): We start out in the running state now
        because we know that starting our thread will run it.

        (bmalloc::Function>::~AsyncTask): We don't support destruction anymore.

        (bmalloc::Function>::runSlowCase): I removed the Exited state.

        (bmalloc::Function>::threadRunLoop): I removed the Exited and
        ExitRequested states.

        * bmalloc/Heap.h:

        * bmalloc/VMHeap.h:

2016-06-12  David Kilzer  <ddkilzer@apple.com>

        Crash in com.apple.WebKit.WebContent at std::__1::__call_once_proxy<std::__1::tuple<CrashReporterSupportLibrary()::$_0&&> >
        <https://webkit.org/b/158660>
        <rdar://problem/25652686>

        Reviewed by Darin Adler.

        * bmalloc/Logging.cpp: Switch to use
        BSOFT_LINK_PRIVATE_FRAMEWORK() to link
        CrashReporterSupport.framework.
        * bmalloc/darwin/BSoftLinking.h:
        (BSOFT_LINK_PRIVATE_FRAMEWORK): Rename from BSOFT_LINK_FRAMEWORK.
        Switch to use /System/Library/PrivateFrameworks/.

2016-06-11  David Kilzer  <ddkilzer@apple.com>

        Implement logging for RELEASE_BASSERT_WITH_MESSAGE() in BAssert.h
        <http://webkit.org/b/155992>

        Reviewed by Geoff Garen.

        * bmalloc/BAssert.h:
        (BLOG_ERROR): Add method to always log error messages.
        (RELEASE_BASSERT_WITH_MESSAGE): Use BLOG_ERROR() to implement
        logging in Debug builds.
        * bmalloc/BPlatform.h:
        (BPLATFORM_MAC): Add.
        (BUSE): Add BUSE() macro.
        (BATTRIBUTE_PRINTF): Add.
        (BUSE_OS_LOG): Add.
        * bmalloc/Logging.cpp:
        (bmalloc::reportAssertionFailureWithMessage): Add.  Logs to
        stderr.
        * bmalloc/Logging.h:
        (bmalloc::reportAssertionFailureWithMessage): Add declaration.

2016-06-07  Pranjal Jumde  <pjumde@apple.com>

        Prevents integer overflow in Vector.h
        https://bugs.webkit.org/show_bug.cgi?id=158455
        <rdar://problem/20235469>

        Reviewed by Mark Lam.

        * bmalloc/Vector.h:
        (bmalloc::Vector<T>::reallocateBuffer):

2016-05-27  Konstantin Tokarev  <annulen@yandex.ru>

        [cmake] Deduplicated bmalloc/Zone.cpp handling.
        https://bugs.webkit.org/show_bug.cgi?id=158154

        Reviewed by Alex Christensen.

        File bmalloc/Zone.cpp is required on Darwin irrespectively from what
        port is being built.

        Also I removed WEBKIT_INCLUDE_CONFIG_FILES_IF_EXISTS() because it's
        unlikely that bmalloc will ever need port-specific customizations (as
        opposed to OS-specific customizations which should be done in
        CMakeLists.txt).

        * CMakeLists.txt: Added bmalloc/Zone.cpp for Darwin.
        * PlatformGTK.cmake: Removed.
        * PlatformMac.cmake: Removed.

2016-05-22  Brady Eidson  <beidson@apple.com>

        Move to C++14.
        https://bugs.webkit.org/show_bug.cgi?id=157948

        Reviewed by Michael Catanzaro.

        * Configurations/Base.xcconfig:

2016-05-17  Geoffrey Garen  <ggaren@apple.com>

        REGRESSION: JetStream crashes on some iPhones
        https://bugs.webkit.org/show_bug.cgi?id=157814

        Reviewed by Michael Saboff.

        * bmalloc/Sizes.h: Reduce smallMax to 32kB. 

        Previous justification for 64kB was:

            * bmalloc/Sizes.h: Upped smallMax to 64kB. Upping to 32kB is pretty
            reasonable, since sizes between 16kB and 32kB share page sizes. I went
            all the way up to 64kB because the GC uses 64kB blocks, and also just
            for extra padding to ensure that large allocations are indeed rare.

        It turns out that the bump to 64kB substantially increases our memory
        high water mark on JetStream, leading to jetsam crashes. Also, there
        doesn't seem to be a practical performance problem to putting objects in
        the (32kB - 64kB) range in the large allocator.

2016-05-16  Geoffrey Garen  <ggaren@apple.com>

        REGRESSION (200035): changes in "WebKit Malloc" VM regions are causing 'leaks' to spew "Failed to map remote region" messages
        https://bugs.webkit.org/show_bug.cgi?id=157764

        Reviewed by Gavin Barraclough.

        We need to allow for guard pages and only report unguarded pages to the
        leaks tool -- otherwise, it will try to remote map our guarded pages,
        and crash.

        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::tryAllocateLargeChunk):
        (bmalloc::VMHeap::allocateSmallChunk): Adopt the new API for reporting
        a range instead of a Chunk*, and report the unguarded range.

        This also fixes a separate bug -- very large allocations would not
        fully participate in pointer scanning because they would only report 2MB
        (chunkSize) in size. This could cause false-positive leak reports.

        * bmalloc/Zone.cpp:
        (bmalloc::enumerator): Updated to scan ranges instead of fixed-sized
        Chunk pointers.

        * bmalloc/Zone.h:
        (bmalloc::Zone::ranges):
        (bmalloc::Zone::addRange): Store ranges instead of fixed-sized Chunk 
        pointers because our VM ranges have variable sizes -- both due to guard
        pages and due to large allocations.

        (bmalloc::Zone::chunks): Deleted.
        (bmalloc::Zone::addChunk): Deleted.

2016-05-10  David Kilzer  <ddkilzer@apple.com>

        bmalloc should automatically disable itself when ThreadSanitizer is used
        <https://webkit.org/b/157527>

        Reviewed by Michael Catanzaro.

        * bmalloc/Environment.cpp:
        (bmalloc::isASanEnabled): Rename to isSanitizerEnabled.
        (bmalloc::isSanitizerEnabled): Rename from isASanEnabled. Add
        support for detecting ThreadSanitizer.
        (bmalloc::Environment::computeIsBmallocEnabled): Switch from
        isASanEnabled to isSanitizerEnabled.

2016-05-03  Geoffrey Garen  <ggaren@apple.com>

        Assertion failure in bmalloc::vmRevokePermissions(void*, unsigned long).
        https://bugs.webkit.org/show_bug.cgi?id=157047

        Reviewed by Filip Pizlo.

        Renamed roundUpToMultipleOfSloppy => roundUpToMultipleOfNonPowerOfTwo.

        * bmalloc/Algorithm.h:
        (bmalloc::roundUpToMultipleOfNonPowerOfTwo):
        (bmalloc::roundUpToMultipleOfSloppy): Deleted.
        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::allocateSmallChunk):

2016-05-03  Geoffrey Garen  <ggaren@apple.com>

        Assertion failure in bmalloc::vmRevokePermissions(void*, unsigned long).
        https://bugs.webkit.org/show_bug.cgi?id=157047

        Reviewed by Filip Pizlo.

        The previous fix aligned the guard page sizes correctly but forgot to
        align the guard page start address correctly.

        * bmalloc/Algorithm.h:
        (bmalloc::roundUpToMultipleOfSloppy): Use a new helper method to round
        up when not working with a power of two, instead of writing out the
        math by hand.

        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::allocateSmallChunk): Make sure to round up the guard
        page start address in addition to its size. Assert at the very end to
        try to catch more bugs.

2016-04-27  Geoffrey Garen  <ggaren@apple.com>

        Assertion failure in bmalloc::vmRevokePermissions(void*, unsigned long).
        https://bugs.webkit.org/show_bug.cgi?id=157047

        Reviewed by Darin Adler.

        * bmalloc/Chunk.h:
        (bmalloc::Chunk::Chunk):
        (bmalloc::Chunk::get):
        (bmalloc::Chunk::offset):
        (bmalloc::Chunk::address):
        (bmalloc::Object::Object):
        (bmalloc::Object::address):
        (bmalloc::Object::line):
        (bmalloc::Chunk::object): Deleted.
        (bmalloc::Object::begin): Deleted.
        * bmalloc/Heap.cpp:
        (bmalloc::Heap::allocateSmallBumpRangesByObject):
        * bmalloc/Object.h:
        (bmalloc::Object::chunk):
        (bmalloc::Object::offset): Renamed begin() to address() because this is
        not an iterator.

        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::allocateSmallChunk): Round up pageSize to a vmPageSize
        multiple because pageSize might be smaller than vmPageSize, but we
        think the VM system requires vmPageSize-aligned values.

2016-04-25  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: vm allocations should plant guard pages
        https://bugs.webkit.org/show_bug.cgi?id=156937

        Rolling back in r199936 with a fix for the memory regression.

2016-04-23  Gavin Barraclough  <barraclough@apple.com>

        bmalloc: vm allocations should plant guard pages
        https://bugs.webkit.org/show_bug.cgi?id=156937

        Rolling out - looks like this is memory regression.

        * bmalloc/Object.h:
        (bmalloc::Object::operator+):
        (bmalloc::Object::operator<=):
        (bmalloc::Object::operator-): Deleted.
        * bmalloc/VMAllocate.h:
        (bmalloc::vmDeallocate):
        (bmalloc::vmRevokePermissions): Deleted.
        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::allocateSmallChunk):

2016-04-22  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: vm allocations should plant guard pages
        https://bugs.webkit.org/show_bug.cgi?id=156937

        Reviewed by Michael Saboff.

        * bmalloc/Object.h:
        (bmalloc::Object::operator-): Added a - helper.

        * bmalloc/VMAllocate.h:
        (bmalloc::vmRevokePermissions): Added a helper to revoke permissions on
        a VM region. We use this for guard pages.

        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::allocateSmallChunk): Add guard pages to the start and
        end of the chunk.

        Note that we don't guard large chunks becuase we need to be able to merge
        them. Otherwise, we will run out of virtual addresses.

2016-04-22  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Constify introspect function pointer table
        https://bugs.webkit.org/show_bug.cgi?id=156936

        Reviewed by Michael Saboff.

        * bmalloc/Zone.cpp:
        (bmalloc::Zone::Zone): Declaring this function pointer table const puts
        it in the read-only section of the binary, providing a little hardening
        against overwriting the function pointers at runtime. (We have to
        const_cast when assigning because the API declares a pointer to non-const,
        but we happen to know it will never try to write through that pointer.
        This is not my favorite API.)

2016-04-19  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: fix up overflow checks
        https://bugs.webkit.org/show_bug.cgi?id=156780

        Reviewed by Mark Lam.

        We used to try to avoid overflow in large object math by setting a very
        high limit on the largest large object. But that's a bit error-prone
        since the check is far away from the math that might overflow -- and
        we were missing some cases.

        This patch removes the limit and instead checks at each math site.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::tryAllocate):
        (bmalloc::Allocator::allocate):
        (bmalloc::Allocator::reallocate):
        (bmalloc::Allocator::allocateSlowCase): Remove the limit. tryAllocateLarge
        will check for overflow for us.

        * bmalloc/Chunk.h: This ASSERT was just totally wrong.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::tryAllocateLarge): Check for overflow when adding.

        * bmalloc/Sizes.h:

        * bmalloc/VMAllocate.h:
        (bmalloc::tryVMAllocate): Check for overflow when adding.

        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::tryAllocateLargeChunk): Check for overflow when adding.

2016-04-19  Geoffrey Garen  <ggaren@apple.com>

        Unreviewed, try to fix an ASSERT seen on the bots.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::tryAllocateLarge): This ASSERT is supposed to be about
        alignment, not size. Oops.

2016-04-19  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Merge the large and xlarge allocators
        https://bugs.webkit.org/show_bug.cgi?id=156734

        Reviewed by Andreas Kling.

        This give us better defense against worst case memory usage:

                                              Baseline                Patch                    Δ
            Peak Memory:
                nimlang                      198,132kB            181,468kB      ^ 1.09x smaller

        It also eliminates inline metadata for large objects, fixing the
        regression introduced in r198675, and more:

            run-malloc-benchmarks Baseline:~/OpenSource/WebKitBuildBaseline/Release/ Patch:~/OpenSource/WebKitBuild/Release/

                                                                  Baseline                          Patch                              Δ
            Memory at End:
                big                                               10,880kB                        3,328kB                ^ 3.27x smaller
                facebook                                           3,112kB                        2,868kB                ^ 1.09x smaller
                fragment --parallel                                1,848kB                          760kB                ^ 2.43x smaller
                fragment_iterate --parallel                        4,908kB                          776kB                ^ 6.32x smaller
                big --parallel                                    48,076kB                       11,892kB                ^ 4.04x smaller

        Overall memory use looks OK:

            run-malloc-benchmarks --memory_warning Baseline:~/OpenSource/WebKitBuildBaseline/Release/ Patch:~/OpenSource/WebKitBuild/Release/

                                                        Baseline                               Patch                                   Δ
            Memory at End:
                <arithmetic mean>                       13,992kB                            13,987kB                      ^ 1.0x smaller

        Overall throughput looks OK:

            run-malloc-benchmarks Baseline:~/OpenSource/WebKitBuildBaseline/Release/ Patch:~/OpenSource/WebKitBuild/Release/

                                                                  Baseline                          Patch                              Δ
            Execution Time:
                <arithmetic mean>                                    103ms                          104ms                 ! 1.01x slower

        We're a bit slower on the "all-out large allocations on all cores"
        benchmark, but I think that's an OK price to pay:

                                                                  Baseline                          Patch                              Δ
            Execution Time:
                big --parallel                                       125ms                          136ms                 ! 1.09x slower

        This patch net removes 1.5k lines of code. It turns out that large
        allocations are rare, and free memory fragments are also rare, so the
        combination is super rare, and a simple O(n) algorithm that ensures good
        memory behavior is the best option.

        Fun fact: In practice, the odds that the old code would save memory
        were *worse* than the odds that it would contain a bug that wasted
        memory. :)

        * bmalloc.xcodeproj/project.pbxproj:

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::tryAllocate): largeMax is the new xLargeMax since
        xLargeMax is gone now.

        (bmalloc::Allocator::allocate): I moved the rounding code into allocateLarge,
        so we don't have to do it here.

        (bmalloc::Allocator::reallocate):
        (bmalloc::Allocator::allocateSlowCase):
        (bmalloc::Allocator::allocateXLarge): Deleted. No more XLarge case.

        * bmalloc/Allocator.h:

        * bmalloc/BeginTag.h: Removed.
        * bmalloc/BoundaryTag.h: Removed.

        * bmalloc/Chunk.h:
        (bmalloc::ChunkHash::hash): Added a hash function. The best hash function
        is a unique and monotonically increasing integer, and that's exactly what
        we typically get from the high bits of a Chunk, since the OS allocates
        Chunks at unique and increasing addresses.
        (bmalloc::Chunk::boundaryTags): Deleted.
        (bmalloc::Chunk::objectType): Deleted.
        (bmalloc::Chunk::beginTag): Deleted.
        (bmalloc::Chunk::endTag): Deleted.

        * bmalloc/Deallocator.cpp:
        (bmalloc::Deallocator::deallocateSlowCase): We no longer know for sure,
        by looking at its bit pattern, whether a pointer is small or large.
        Instead, any pointer with large alignment *might* be large, and when
        we occasionally encounter such an object, we have to consult a hash
        table in the Heap to find out for sure. This turns out to be just as
        cheap in practice.

        We don't deallocate large objects on the fast path anymore. We can't,
        because large objects have out-of-line metadata now.

        (bmalloc::Deallocator::deallocateXLarge): Deleted.

        * bmalloc/Deallocator.h:
        (bmalloc::Deallocator::deallocateFastCase): See deallocateSlowCase.

        * bmalloc/EndTag.h: Removed.
        * bmalloc/FreeList.cpp: Removed.
        * bmalloc/FreeList.h: Removed.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::allocateSmallPage): Be sure to track each chunk in
        the object type map, so we can distinguish small vs large objects.

        (bmalloc::Heap::deallocateSmallLine): No need to check object type
        because we know object type now by virtue of being on the small object
        path.

        (bmalloc::Heap::splitAndAllocate): Be sure to track each chunk in
        the object type map, so we can distinguish small vs large objects. Large
        objects can split across chunks, so we need to add each large object's
        chunk as it is allocated.

        (bmalloc::Heap::tryAllocateLarge):
        (bmalloc::Heap::allocateLarge):
        (bmalloc::Heap::isLarge):
        (bmalloc::Heap::largeSize):
        (bmalloc::Heap::shrinkLarge):
        (bmalloc::Heap::deallocateLarge): Merged in existing XLarge logic for
        large objects.

        (bmalloc::Heap::scavengeXLargeObjects): Deleted.
        (bmalloc::Heap::allocateXLarge): Deleted.
        (bmalloc::Heap::tryAllocateXLarge): Deleted.
        (bmalloc::Heap::xLargeSize): Deleted.
        (bmalloc::Heap::shrinkXLarge): Deleted.
        (bmalloc::Heap::deallocateXLarge): Deleted.

        * bmalloc/Heap.h:
        (bmalloc::Heap::LargeObjectHash::hash):

        * bmalloc/LargeObject.h: Removed.

        * bmalloc/Map.h: Added.
        (bmalloc::Map::size):
        (bmalloc::Map::capacity):
        (bmalloc::Map::get):
        (bmalloc::Map::set):
        (bmalloc::Map::remove):
        (bmalloc::Map::shouldGrow):
        (bmalloc::Map::shouldShrink):
        (bmalloc::Map::find):
        (bmalloc::Hash>::rehash): Simple hash table.

        * bmalloc/Object.h:

        * bmalloc/ObjectType.cpp:
        (bmalloc::objectType):
        * bmalloc/ObjectType.h:
        (bmalloc::mightBeLarge): See deallocateSlowCase.
        (bmalloc::isXLarge): Deleted.

        * bmalloc/SegregatedFreeList.cpp: Removed.
        * bmalloc/SegregatedFreeList.h: Removed.

        * bmalloc/Sizes.h: Upped smallMax to 64kB. Upping to 32kB is pretty
        reasonable, since sizes between 16kB and 32kB share page sizes. I went
        all the way up to 64kB because the GC uses 64kB blocks, and also just
        for extra padding to ensure that large allocations are indeed rare.

        * bmalloc/SortedVector.h: Removed.

        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::tryAllocateLargeChunk):
        (bmalloc::VMHeap::allocateSmallChunk):
        (bmalloc::VMHeap::VMHeap): Deleted.
        (bmalloc::VMHeap::allocateChunk): Deleted.
        * bmalloc/VMHeap.h:
        (bmalloc::VMHeap::deallocateSmallPage):
        (bmalloc::VMHeap::allocateLargeObject): Deleted.
        (bmalloc::VMHeap::deallocateLargeObject): Deleted. Nixed all the boundary
        tag logic since metadata is out of line now.

        * bmalloc/VMState.h: Removed. Instead of an abstract state, we track
        the precise amount of committed physical pages at the head of a VM
        range. This allows us to merge aggressively without triggering an madvise
        storm most of the time.

        * bmalloc/Vector.h:
        (bmalloc::Vector<T>::Vector):
        (bmalloc::Vector<T>::insert):
        (bmalloc::Vector<T>::remove):
        (bmalloc::Vector<T>::resize): Filled out some missing helpers.

        * bmalloc/XLargeMap.cpp:
        (bmalloc::XLargeMap::remove):
        (bmalloc::XLargeMap::add):
        (bmalloc::XLargeMap::removePhysical):
        (bmalloc::XLargeMap::takeFree): Deleted.
        (bmalloc::XLargeMap::addFree): Deleted.
        (bmalloc::XLargeMap::addAllocated): Deleted.
        (bmalloc::XLargeMap::getAllocated): Deleted.
        (bmalloc::XLargeMap::takeAllocated): Deleted.
        (bmalloc::XLargeMap::shrinkToFit): Deleted.
        (bmalloc::XLargeMap::takePhysical): Deleted.
        (bmalloc::XLargeMap::addVirtual): Deleted.
        * bmalloc/XLargeMap.h:
        (bmalloc::XLargeMap::Allocation::operator<): Deleted. We don't track
        object sizes anymore -- just free space. (The Heap tracks object sizes.)
        We use plain old linear search for free space. (See intro.)

        * bmalloc/XLargeRange.h:
        (bmalloc::XLargeRange::physicalSize):
        (bmalloc::XLargeRange::setPhysicalSize):
        (bmalloc::merge):
        (bmalloc::XLargeRange::split):
        (bmalloc::XLargeRange::vmState): Deleted.
        (bmalloc::XLargeRange::setVMState): Deleted. See VMState.h.

2016-04-11  Fujii Hironori  <Hironori.Fujii@jp.sony.com>

        [CMake] Make FOLDER property INHERITED
        https://bugs.webkit.org/show_bug.cgi?id=156460

        Reviewed by Brent Fulgham.

        * CMakeLists.txt:
        Set FOLDER property as a directory property not a target property

2016-04-08  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: stress_aligned test fails if you increase smallMax
        https://bugs.webkit.org/show_bug.cgi?id=156414

        Reviewed by Oliver Hunt.

        When size exceeds alignment and is a multiple of alignment and is not
        a power of two, such as 24kB with 8kB alignment, the small allocator
        did not always guarantee alignment. Let's fix that.

        * bmalloc/Algorithm.h:
        (bmalloc::divideRoundingUp): Math is hard.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::allocate): Align to the page size unconditionally.
        Even if the page size is not a power of two, it might be a multiple of
        a power of two, and we want alignment to that smaller power of two to
        be guaranteed.

2016-04-06  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: handle aligned allocations on the fast path
        https://bugs.webkit.org/show_bug.cgi?id=156302

        Reviewed by Michael Saboff.

        This helps keep the JavaScriptCore GC on the fast path, and it also
        helps avoid fragmentation on our website stress test:

            nimlang                      209,584kB            198,076kB      ^ 1.06x smaller

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::allocate): Because we arrange for power-of-two size
        classes to allocate at power-of-two alignments, we can allocate any
        small aligned request on the small path.

        * bmalloc/Chunk.h:
        (bmalloc::Chunk::bytes):
        (bmalloc::Chunk::lines):
        (bmalloc::Chunk::pages):
        (bmalloc::Chunk::boundaryTags):
        (bmalloc::Chunk::objectType): Moved some code around to provide better
        API.

        (bmalloc::Chunk::Chunk): Moved this code to VMHeap.

        (bmalloc::Chunk::offset):
        (bmalloc::Chunk::object): Use our new bytes() helper function.

        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::allocateChunk): Moved code here from Chunk.

        (bmalloc::VMHeap::allocateSmallChunk): Ensure that power-of-two page
        sizes always begin allocation at the same alignment. Power-of-two object
        sizes always request power-of-two page sizes (since that's the least
        wasteful option), so if we also ensure that power-of-two page sizes get
        power-of-two alignment, then everything is aligned for all small objects.

2016-04-03  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: segregate small and large objects again, and allocate more objects on the small path
        https://bugs.webkit.org/show_bug.cgi?id=156152

        Reviewed by Sam Weinig.

        Microbenchmark data suggested that it was a good idea for small and large
        objects to share memory. But r198675 did not improve memory use in
        full browser benchmarks.

        This patch reverts to segregating small and large objects -- but without
        going back to doubled VM usage -- in order to capture a few benefits:

        (*) Small pages fragment the large heap. Separating them out saves a lot
        of memory in our worst case fragmentation recording:

            nimlang                                          276,076kB                      209,636kB                ^ 1.32x smaller

        (*) Small objects are common enough that even their slow paths benefit 
        from simpler code:

        Execution Time:
            ...
            facebook                                             234ms                          216ms                 ^ 1.08x faster
            reddit                                               114ms                          108ms                 ^ 1.06x faster
            flickr                                               118ms                          111ms                 ^ 1.06x faster
            theverge                                             146ms                          140ms                 ^ 1.04x faster
            ...
            <arithmetic mean>                                    107ms                          102ms                 ^ 1.04x faster

        (*) We can use less metadata:

        Memory at End:
            ...
            list_allocate                                        460kB                          384kB                 ^ 1.2x smaller
            tree_allocate                                        492kB                          424kB                ^ 1.16x smaller
            tree_churn                                           480kB                          404kB                ^ 1.19x smaller
            fragment                                             532kB                          452kB                ^ 1.18x smaller
            fragment_iterate                                     712kB                          588kB                ^ 1.21x smaller
            medium                                            15,152kB                       11,796kB                ^ 1.28x smaller
            big                                               15,044kB                       10,976kB                ^ 1.37x smaller
            ...
            <arithmetic mean>                                  7,724kB                        7,190kB                ^ 1.07x smaller

        This patch also takes advantage of our support for varying the page size
        at runtime by allocating more objects on the small object path:

            medium                                               178ms                          150ms                 ^ 1.19x faster

        Some microbenchmarks report memory use increases from this change -- like
        they reported memory use decreases from r198675 -- but I'm ignoring them
        for now because I expect our full browser memory benchmarks to confirm
        that this patch is fine.

        * bmalloc/BumpAllocator.h:
        (bmalloc::BumpAllocator::BumpAllocator): Use a full unsigned because we
        can allocate objects larger than 16kB - 1, and a full unsigned does not
        make BumpAllocator any larger on 64bit systems.

        * bmalloc/Chunk.h:
        (bmalloc::Chunk::begin):
        (bmalloc::Chunk::end):
        (bmalloc::Chunk::size):
        (bmalloc::Chunk::objectType): Store ObjectType in the Chunk, since it only
        varies by Chunk now, and not from page to page within a Chunk. Also,
        union together small and large object metadata, since we will only use
        one or the other. This saves memory.

        (bmalloc::Chunk::Chunk): Conditionalize initialization based on object
        type, since only one kind of metadata or the other can be used at runtime.

        (bmalloc::Object::Object):
        (bmalloc::Object::begin):
        (bmalloc::SmallPage::end): Deleted.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::Heap):
        (bmalloc::Heap::initializeLineMetadata): Save a little space, since we
        know that lines are only 256 bytes long.

        (bmalloc::Heap::initializePageMetadata): Store a dynamic page size for
        each size class. We used to use only one page size (the system page size)
        but that limited our ability to allocate objects larger than 1kB on the
        small object path. Now we can handle any object size we want by storing
        objects of that size in a custom page size.

        (bmalloc::Heap::concurrentScavenge):
        (bmalloc::Heap::scavenge):
        (bmalloc::Heap::scavengeSmallPages): Revert to our old linked list
        strategy for storing small pages.

        (bmalloc::Heap::splitAndAllocate): Object type is per Chunk now.

        (bmalloc::Heap::allocateLarge): Don't nuke the small page list when
        allocating a large object because the two don't share memory anymore.

        (bmalloc::Heap::allocateSmallPage): Revert to our old linked list
        strategy for storing small pages.

        (bmalloc::Heap::deallocateSmallLine): Don't return early in the case
        where this is the first free object in the page. In the case of large-ish
        objects, the first free object might also be the last free object,
        since there's one object per page.

        (bmalloc::Heap::allocateSmallBumpRangesByMetadata): Split out some helper
        lambdas to make this code clearer.

        (bmalloc::Heap::allocateSmallBumpRangesByObject): Added a fast scan
        for objects larger than the line size. When multiple objects fit in
        a single line, it's an optimization to scan a line at a time. But when
        it's one object per line, or one object per 64 lines, it's better just
        to scan an object at a time.

        * bmalloc/Heap.h:
        (bmalloc::Heap::allocateSmallBumpRanges):
        (bmalloc::Heap::derefSmallLine): Match the changes above.

        * bmalloc/LineMetadata.h: We weren't using all those bits.

        * bmalloc/List.h:
        (bmalloc::List::remove): Put a removed Node fully back into the default
        (empty) state it was in before it entered the list. This change is not
        observable, but it makes things clearer when you're debugging.

        * bmalloc/Object.h:
        (bmalloc::Object::Object):
        (bmalloc::Object::chunk):
        (bmalloc::Object::offset):
        (bmalloc::Object::operator+):
        (bmalloc::Object::operator<=): Added some helpers for iterating by object.

        * bmalloc/ObjectType.cpp:
        (bmalloc::objectType): Updated for API change.

        * bmalloc/Sizes.h:
        (bmalloc::Sizes::maskObjectSize):
        (bmalloc::Sizes::objectSize):
        (bmalloc::Sizes::pageSize): Support more page sizes.

        * bmalloc/SmallPage.h:
        (bmalloc::SmallPage::SmallPage):
        (bmalloc::SmallPage::objectType): Deleted.
        (bmalloc::SmallPage::setObjectType): Deleted.
        (bmalloc::SmallPage::smallPageCount): Deleted.
        (bmalloc::SmallPage::setSmallPageCount): Deleted. Object type is per
        Chunk now, and we can infer page count from size class.

        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::allocateChunk):
        (bmalloc::VMHeap::allocateSmallChunk):
        * bmalloc/VMHeap.h:
        (bmalloc::VMHeap::allocateSmallPage):
        (bmalloc::VMHeap::deallocateSmallPage):
        (bmalloc::VMHeap::allocateLargeObject): Support our old behavior of
        storing free pages in linked lists.

2016-03-29  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: support physical page sizes that don't match the virtual page size (take 2)
        https://bugs.webkit.org/show_bug.cgi?id=156003

        Reviewed by Andreas Kling.

        This is a memory savings on iOS devices where the virtual page size
        is 16kB but the physical page size is 4kB.

        Take 1 was a memory regression on 16kB virtual / 16kB physical systems
        because it used a 4kB page size within a 16kB page size, allowing up to
        4 different object types to mix within a physical page. Because objects
        of the same type tend to deallocate at the same time, mixing objects of
        different types made pages less likely to become completely empty.

        (Take 1 also had a bug where it used a platform #ifdef that didn't exist.
        Oops.)

        Take 2 allocates units of SmallPages equal to the physical page size.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::Heap):
        (bmalloc::Heap::initializeLineMetadata):
        (bmalloc::Heap::allocateSmallBumpRanges):
        (bmalloc::Heap::allocateSmallPage):
        (bmalloc::Heap::allocateLarge):
        (bmalloc::Heap::splitAndAllocate):
        (bmalloc::Heap::tryAllocateXLarge):
        (bmalloc::Heap::shrinkXLarge):
        * bmalloc/Heap.h: Use the physical page size for our VM operations because
        we're only concerned with returning physical pages to the OS.

        * bmalloc/VMAllocate.h:
        (bmalloc::vmPageSize):
        (bmalloc::vmPageShift):
        (bmalloc::vmSize):
        (bmalloc::vmValidate):
        (bmalloc::vmPageSizePhysical):
        (bmalloc::vmValidatePhysical):
        (bmalloc::tryVMAllocate):
        (bmalloc::vmDeallocatePhysicalPages):
        (bmalloc::vmAllocatePhysicalPages):
        (bmalloc::vmDeallocatePhysicalPagesSloppy):
        (bmalloc::vmAllocatePhysicalPagesSloppy): Use the physical page size.

2016-03-29  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: page size should be configurable at runtime
        https://bugs.webkit.org/show_bug.cgi?id=155993

        Reviewed by Andreas Kling.

        This is a memory win on 32bit iOS devices, since their page sizes are
        4kB and not 16kB.

        It's also a step toward supporting 64bit iOS devices that have a
        16kB/4kB virtual/physical page size split.

        * bmalloc/Chunk.h: Align to largeAlignment since 2 * smallMax isn't
        required by the boundary tag allocator.

        (bmalloc::Chunk::page): Account for the slide when accessing a page.
        Each SmallPage hashes 4kB of memory. When we want to allocate a region
        of memory larger than 4kB, we store our metadata in the first SmallPage
        in the region and we assign a slide to the remaining SmallPages, so
        they forward to that first SmallPage when accessed.

        NOTE: We could use a less flexible technique that just hashed by
        vmPageSize() instead of 4kB at runtime, with no slide, but I think we'll
        be able to use this slide technique to make even more page sizes
        dynamically at runtime, which should save some memory and simplify
        the allocator.

        (bmalloc::SmallPage::begin): It's invalid to access a SmallPage with
        a slide, since such SmallPages do not contain meaningful data.

        (bmalloc::SmallPage::end): Account for smallPageCount when computing
        the size of a page.

        (bmalloc::Chunk::pageBegin): Deleted.
        (bmalloc::Chunk::pageEnd): Deleted.
        (bmalloc::Object::pageBegin): Deleted.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::Heap): Cache vmPageSize because computing it might require
        a syscall.

        (bmalloc::Heap::initializeLineMetadata): Line metadata is a vector instead
        of a 2D array because we don't know how much metadata we'll need until
        we know the page size.

        (bmalloc::Heap::scavengeSmallPage): Be sure to revert the slide when
        deallocating a page. Otherwise, the next attempt to allocate the page
        will slide when initializing it, sliding to nowhere.

        (bmalloc::Heap::allocateSmallBumpRanges): Account for vector change to
        line metadata.

        (bmalloc::Heap::allocateSmallPage): Initialize slide and smallPageCount
        since they aren't constant anymore.

        (bmalloc::Heap::allocateLarge):
        (bmalloc::Heap::splitAndAllocate):
        (bmalloc::Heap::tryAllocateXLarge):
        (bmalloc::Heap::shrinkXLarge): Adopt dynamic page size.

        * bmalloc/Heap.h:

        * bmalloc/Sizes.h: smallPageSize is no longer equal to the VM page
        size -- it's just the smallest VM page size we're interested in supporting.

        * bmalloc/SmallPage.h:
        (bmalloc::SmallPage::slide):
        (bmalloc::SmallPage::setSlide):
        (bmalloc::SmallPage::smallPageCount):
        (bmalloc::SmallPage::setSmallPageCount):
        (bmalloc::SmallPage::ref):
        (bmalloc::SmallPage::deref): Support slide and small page count as
        dynamic values. This doesn't increase metadata size since sizeof(SmallPage)
        rounds up to alignment anyway.

        * bmalloc/VMAllocate.h:
        (bmalloc::vmPageSize):
        (bmalloc::vmPageShift):
        (bmalloc::vmSize):
        (bmalloc::vmValidate):
        (bmalloc::tryVMAllocate):
        (bmalloc::vmDeallocatePhysicalPagesSloppy):
        (bmalloc::vmAllocatePhysicalPagesSloppy): Treat page size as a variable.

        * bmalloc/Vector.h:
        (bmalloc::Vector::initialCapacity):
        (bmalloc::Vector<T>::insert):
        (bmalloc::Vector<T>::grow):
        (bmalloc::Vector<T>::shrink):
        (bmalloc::Vector<T>::shrinkCapacity):
        (bmalloc::Vector<T>::growCapacity): Treat page size as a variable.

2016-03-29  David Kilzer  <ddkilzer@apple.com>

        bmalloc: add logging for mmap() failures
        <http://webkit.org/b/155409>
        <rdar://problem/24568515>

        Reviewed by Saam Barati.

        This patch causes additional logging to be generated on internal
        iOS builds when mmap() fails.  We are trying to track down an
        issue where the WebContent process runs out of VM address space
        before it is killed by jetsam.

        * CMakeLists.txt: Add Logging.cpp.
        * bmalloc.xcodeproj/project.pbxproj: Add new files.

        * bmalloc/BAssert.h:
        (RELEASE_BASSERT_WITH_MESSAGE): Add macro.
        * bmalloc/Logging.cpp: Added.
        (bmalloc::logVMFailure): Implementation.
        * bmalloc/Logging.h: Added.
        (bmalloc::logVMFailure): Declaration.
        * bmalloc/VMAllocate.h:
        (bmalloc::tryVMAllocate): Call logVMFailure() on mmap() failure.
        * bmalloc/darwin/BSoftLinking.h: Copied from Source/WebCore/platform/mac/SoftLinking.h.

2016-03-26  Geoffrey Garen  <ggaren@apple.com>

        Unreviewed, rolling out r198702, r198704.

        Caused a memory regression on PLUM.

        Reverted changeset:

        bmalloc: fix an ASSERT on iOS
        https://bugs.webkit.org/show_bug.cgi?id=155911
        http://trac.webkit.org/changeset/198704

        bmalloc: support physical page sizes that don't match the virtual page size
        https://bugs.webkit.org/show_bug.cgi?id=155898
        http://trac.webkit.org/changeset/198702

2016-03-25  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: fix an ASSERT on iOS
        https://bugs.webkit.org/show_bug.cgi?id=155911

        Reviewed by Gavin Barraclough.

        * bmalloc/VMAllocate.h:
        (bmalloc::vmValidatePhysical): Call through to vmValidatePhysical because
        the vmValidate function validates virtual sizes rather than physical
        sizes.

2016-03-25  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: support physical page sizes that don't match the virtual page size
        https://bugs.webkit.org/show_bug.cgi?id=155898

        Reviewed by Gavin Barraclough.

        This is a memory savings on iOS devices where the virtual page size
        is 16kB but the physical page size is 4kB.

        * bmalloc/Chunk.h:
        (bmalloc::Chunk::Chunk): smallPageSize is now unrelated to the OS's
        page size -- it just reflects the optimal unit of memory to recycle
        between small objects.

        We only need to round up to largeAlignment because small objects allocate
        as subsets of large objects now.

        (bmalloc::Chunk::page):
        (bmalloc::Object::pageBegin):
        (bmalloc::Object::line): Adopt smallPageSize.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::initializeLineMetadata):
        (bmalloc::Heap::allocateSmallPage):
        (bmalloc::Heap::allocateLarge): Adopt smallPageSize.

        (bmalloc::Heap::splitAndAllocate):
        (bmalloc::Heap::tryAllocateXLarge):
        (bmalloc::Heap::shrinkXLarge): Adopt vmPageSizePhysical(). We want the
        physical page size because that's the unit at which the hardware MMU
        will recycle memory.

        * bmalloc/Sizes.h: Adopt smallPageSize.

        * bmalloc/VMAllocate.h:
        (bmalloc::vmPageSizePhysical):
        (bmalloc::vmPageSize): Distinguish between page size, which is the virtual
        memory page size advertised by the OS, and physical page size, which the
        true hardware page size.

        (bmalloc::vmSize):
        (bmalloc::vmValidate):
        (bmalloc::vmValidatePhysical):
        (bmalloc::tryVMAllocate):
        (bmalloc::vmDeallocatePhysicalPages):
        (bmalloc::vmAllocatePhysicalPages):
        (bmalloc::vmDeallocatePhysicalPagesSloppy):
        (bmalloc::vmAllocatePhysicalPagesSloppy): Adopt vmPageSize() and
        vmPageSizePhyiscal().

        * bmalloc/Vector.h:
        (bmalloc::Vector::initialCapacity):
        (bmalloc::Vector<T>::shrink):
        (bmalloc::Vector<T>::shrinkCapacity):
        (bmalloc::Vector<T>::growCapacity): Adopt vmPageSize(). We'd prefer to
        use vmPageSizePhysical() but mmap() doesn't support it.

        * bmalloc/XLargeMap.cpp: #include.

2016-03-25  Geoffrey Garen  <ggaren@apple.com>

        Unreviewed, rolling in r198679.

        r198679 was just a rename. The regression was caused by r198675 and then
        fixed in r198693.

        Restored changeset:

        "bmalloc: Renamed LargeChunk => Chunk"
        https://bugs.webkit.org/show_bug.cgi?id=155894
        http://trac.webkit.org/changeset/198679

2016-03-25  Geoffrey Garen  <ggaren@apple.com>

        Unreviewed, try to fix a crash seen on the bots.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::reallocate): We have to take the lock even if we're
        only reading our own data becuse LargeObject contains validation code
        that will read our neighbors' data as well.

2016-03-25  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r198679.

        This change caused flaky LayoutTest crashes

        Reverted changeset:

        "bmalloc: Renamed LargeChunk => Chunk"
        https://bugs.webkit.org/show_bug.cgi?id=155894
        http://trac.webkit.org/changeset/198679

2016-03-25  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: stress_aligned fails when allocating a zero-sized object with XLarge alignment
        https://bugs.webkit.org/show_bug.cgi?id=155896

        Reviewed by Andreas Kling.

        We normally filter zero-sized allocations into small allocations, but
        a zero-sized allocation can sneak through if it requires sufficiently
        large alignment.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::tryAllocateXLarge): Set a floor on allocation size to
        catch zero-sized allocations.

2016-03-25  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Renamed LargeChunk => Chunk
        https://bugs.webkit.org/show_bug.cgi?id=155894

        Reviewed by Michael Saboff.

        A Chunk can contain both small and large objects now.

        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::allocate):
        * bmalloc/BoundaryTag.h:
        (bmalloc::BoundaryTag::isFree):
        * bmalloc/Chunk.h: Copied from Source/bmalloc/bmalloc/LargeChunk.h.
        (bmalloc::Chunk::pages):
        (bmalloc::Chunk::begin):
        (bmalloc::Chunk::end):
        (bmalloc::Chunk::Chunk):
        (bmalloc::Chunk::get):
        (bmalloc::Chunk::beginTag):
        (bmalloc::Chunk::endTag):
        (bmalloc::Chunk::offset):
        (bmalloc::Chunk::object):
        (bmalloc::Chunk::page):
        (bmalloc::Chunk::line):
        (bmalloc::SmallLine::begin):
        (bmalloc::SmallPage::begin):
        (bmalloc::SmallPage::end):
        (bmalloc::Object::Object):
        (bmalloc::Object::begin):
        (bmalloc::LargeChunk::pages): Deleted.
        (bmalloc::LargeChunk::begin): Deleted.
        (bmalloc::LargeChunk::end): Deleted.
        (bmalloc::LargeChunk::LargeChunk): Deleted.
        (bmalloc::LargeChunk::get): Deleted.
        (bmalloc::LargeChunk::beginTag): Deleted.
        (bmalloc::LargeChunk::endTag): Deleted.
        (bmalloc::LargeChunk::offset): Deleted.
        (bmalloc::LargeChunk::object): Deleted.
        (bmalloc::LargeChunk::page): Deleted.
        (bmalloc::LargeChunk::line): Deleted.
        * bmalloc/Deallocator.cpp:
        * bmalloc/FreeList.cpp:
        * bmalloc/Heap.cpp:
        (bmalloc::Heap::allocateLarge):
        * bmalloc/LargeChunk.h: Removed.
        * bmalloc/LargeObject.h:
        (bmalloc::LargeObject::LargeObject):
        (bmalloc::LargeObject::merge):
        (bmalloc::LargeObject::split):
        * bmalloc/Object.h:
        (bmalloc::Object::chunk):
        * bmalloc/ObjectType.cpp:
        * bmalloc/Sizes.h:
        * bmalloc/SmallAllocator.h: Removed.
        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::VMHeap):
        (bmalloc::VMHeap::allocateChunk):
        (bmalloc::VMHeap::allocateLargeChunk): Deleted.
        * bmalloc/VMHeap.h:
        (bmalloc::VMHeap::allocateLargeObject):
        (bmalloc::VMHeap::deallocateLargeObject):
        * bmalloc/Zone.cpp:
        (bmalloc::enumerator):
        * bmalloc/Zone.h:
        (bmalloc::Zone::chunks):
        (bmalloc::Zone::addChunk):
        (bmalloc::Zone::largeChunks): Deleted.
        (bmalloc::Zone::addLargeChunk): Deleted.

2016-03-24  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: small and large objects should share memory
        https://bugs.webkit.org/show_bug.cgi?id=155866

        Reviewed by Andreas Kling.

        This patch cuts our VM footprint in half. (VM footprint usually doesn't
        matter, but on iOS there's an artificial VM limit around 700MB, and if
        you hit it you jetsam / crash.)

        It's also a step toward honoring the hardware page size at runtime,
        which will reduce memory usage on iOS.

        This patch is a small improvement in peak memory usage because it allows
        small and large objects to recycle each other's memory. The tradeoff is
        that we require more metadata, which causes more memory usage after
        shrinking down from peak memory usage. In the end, we have some memory
        wins and some losses, and a small win in the mean on our standard memory
        benchmarks.

        * bmalloc.xcodeproj/project.pbxproj: Removed SuperChunk.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::reallocate): Adopt a new Heap API for shrinking
        large objects because it's a little more complicated than it used to be.

        Don't check for equality in the XLarge case because we don't do it in
        other cases, and it's unlikely that we'll be called for no reason.

        * bmalloc/BumpAllocator.h:
        (bmalloc::BumpAllocator::allocate): Don't ASSERT isSmall because that's
        an old concept from when small and large objects were in distinct memory
        regions.

        * bmalloc/Deallocator.cpp:
        (bmalloc::Deallocator::deallocateSlowCase): Large objects are not
        segregated anymore.

        (bmalloc::Deallocator::deallocateLarge): Deleted.

        * bmalloc/Deallocator.h:
        (bmalloc::Deallocator::deallocateFastCase): Don't ASSERT isSmall(). See
        above.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::scavenge):
        (bmalloc::Heap::scavengeSmallPage):
        (bmalloc::Heap::scavengeSmallPages): New helpers for returning cached
        small pages to the large object heap.

        (bmalloc::Heap::allocateSmallPage): Allocate small pages from the large
        object heap. This is how we accomplish sharing.

        (bmalloc::Heap::deallocateSmallLine): Handle large objects since we can
        encounter them on this code path now.

        (bmalloc::Heap::splitAndAllocate): Fixed a bug where we would sometimes
        not split even though we could.

        Allocating a large object also requires ref'ing its small line so that
        we can alias memory between small and large objects.

        (bmalloc::Heap::allocateLarge): Return cached small pages before
        allocating a large object that would fit in a cached small page. This
        allows some large allocations to reuse small object memory.

        (bmalloc::Heap::shrinkLarge): New helper.

        (bmalloc::Heap::deallocateLarge): Deleted.

        * bmalloc/Heap.h:

        * bmalloc/LargeChunk.h:
        (bmalloc::LargeChunk::pageBegin):
        (bmalloc::LargeChunk::pageEnd):
        (bmalloc::LargeChunk::lines):
        (bmalloc::LargeChunk::pages):
        (bmalloc::LargeChunk::begin):
        (bmalloc::LargeChunk::end):
        (bmalloc::LargeChunk::LargeChunk):
        (bmalloc::LargeChunk::get):
        (bmalloc::LargeChunk::endTag):
        (bmalloc::LargeChunk::offset):
        (bmalloc::LargeChunk::object):
        (bmalloc::LargeChunk::page):
        (bmalloc::LargeChunk::line):
        (bmalloc::SmallLine::begin):
        (bmalloc::SmallLine::end):
        (bmalloc::SmallPage::begin):
        (bmalloc::SmallPage::end):
        (bmalloc::Object::Object):
        (bmalloc::Object::begin):
        (bmalloc::Object::pageBegin):
        (bmalloc::Object::line):
        (bmalloc::Object::page): I merged all the SmallChunk metadata and code
        into LargeChunk. Now we use a single class to track both small and large
        metadata, so we can share memory between small and large objects.

        I'm going to rename this class to Chunk in a follow-up patch.

        * bmalloc/Object.h:
        (bmalloc::Object::chunk): Updated for LargeChunk transition.

        * bmalloc/ObjectType.cpp:
        (bmalloc::objectType):
        * bmalloc/ObjectType.h:
        (bmalloc::isXLarge):
        (bmalloc::isSmall): Deleted. The difference between small and large
        objects is now stored in metadata and is not a property of their
        virtual address range.

        * bmalloc/SegregatedFreeList.h: One more entry because we cover all of
        what used to be the super chunk in a large chunk now.

        * bmalloc/Sizes.h: Removed bit masking helpers because we don't use
        address masks to distinguish small vs large object type anymore.

        * bmalloc/SmallChunk.h: Removed.

        * bmalloc/SmallPage.h:
        (bmalloc::SmallPage::SmallPage): Store object type per page because any
        given page can be used for large objects or small objects.

        * bmalloc/SuperChunk.h: Removed.

        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::VMHeap):
        (bmalloc::VMHeap::allocateLargeChunk):
        (bmalloc::VMHeap::allocateSmallChunk): Deleted.
        (bmalloc::VMHeap::allocateSuperChunk): Deleted.
        * bmalloc/VMHeap.h:
        (bmalloc::VMHeap::allocateLargeObject):
        (bmalloc::VMHeap::deallocateLargeObject):
        (bmalloc::VMHeap::allocateSmallPage): Deleted.
        (bmalloc::VMHeap::deallocateSmallPage): Deleted. Removed super chunk and
        small chunk support.

        * bmalloc/Zone.cpp:
        (bmalloc::enumerator):
        * bmalloc/Zone.h:
        (bmalloc::Zone::largeChunks):
        (bmalloc::Zone::addLargeChunk):
        (bmalloc::Zone::superChunks): Deleted.
        (bmalloc::Zone::addSuperChunk): Deleted. Removed super chunk and
        small chunk support.

2016-03-23  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Added an Object helper class
        https://bugs.webkit.org/show_bug.cgi?id=155818

        Reviewed by Gavin Barraclough.

        Object is an abstraction that breaks out a void* into its component
        metadata pointers.

        This is slightly faster than recomputing them, and it enables a future
        patch in which Object will tell us whether it is small or large.

        * bmalloc.xcodeproj/project.pbxproj: Added to the project.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::reallocate): Use Object to compute size.

        * bmalloc/Deallocator.cpp:
        (bmalloc::Deallocator::processObjectLog):
        * bmalloc/Heap.cpp:
        (bmalloc::Heap::allocateSmallPage):
        (bmalloc::Heap::deallocateSmallLine):
        * bmalloc/Heap.h:
        (bmalloc::Heap::derefSmallLine): Use Object to deallocate.

        * bmalloc/Object.h: Added.
        (bmalloc::Object::Object):
        (bmalloc::Object::chunk):
        (bmalloc::Object::line):
        (bmalloc::Object::page): Helper class to break out a void* into its
        component metadata pointers.

        * bmalloc/SmallChunk.h:
        (bmalloc::SmallChunk::SmallChunk): SmallPage::get doesn't exist anymore
        so we use our new helper functions instead.

        (bmalloc::SmallChunk::offset):
        (bmalloc::SmallChunk::object):
        (bmalloc::SmallChunk::page):
        (bmalloc::SmallChunk::line):
        (bmalloc::SmallLine::begin):
        (bmalloc::SmallLine::end):
        (bmalloc::SmallPage::begin): New helpers that operate on the data
        stored in Object.

        (bmalloc::SmallLine::get): Deleted.
        (bmalloc::SmallPage::get): Deleted.

        * bmalloc/SmallLine.h:
        (bmalloc::SmallLine::refCount): Added a default ref value for convenience.

        * bmalloc/SmallPage.h:
        (bmalloc::SmallPage::SmallPage):

2016-03-23  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: process the object log before asking for new memory
        https://bugs.webkit.org/show_bug.cgi?id=155801

        Reviewed by Gavin Barraclough.

        This is a step toward merging large and small objects: In future, if we
        have large objects in the log, we need to process them right away to
        avoid pushing up peak memory use.

        But it also appears to be a speedup and memory use improvement now.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::allocate):
        (bmalloc::Allocator::refillAllocatorSlowCase):
        (bmalloc::Allocator::allocateLarge): Process the log before asking for
        more memory.

        * bmalloc/Deallocator.cpp:
        (bmalloc::Deallocator::processObjectLog):
        (bmalloc::Deallocator::deallocateSlowCase):
        * bmalloc/Deallocator.h: Provide a public API for processing the object log.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::allocateSmallPage): Pop fragmented pages from the front
        instead of from the back. This resolves a regression on tree_churn
        --parallel. Popping from the front gives us the oldest pages. The oldest
        pages have had the most time to accumulate free lines. They are therefore
        the least fragmented on average.

        * bmalloc/List.h:
        (bmalloc::List::popFront):
        (bmalloc::List::insertAfter): New API to pop from front.

2016-03-22  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: use a log scale for large-ish size classes
        https://bugs.webkit.org/show_bug.cgi?id=155770

        Reviewed by Michael Saboff.

        At larger sizes, precise allocation sizes don't save much memory -- and
        they can cost memory when objects of distinct size classes can't
        allocate together.

        This is a small savings up to our current allocation limits, and it may
        enable changing those limits in the long term.

        * bmalloc/Algorithm.h:
        (bmalloc::log2): We use this to compute large-ish size classes.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::Allocator): Iterate by size class instead of by
        object size so we can change object size limits without breaking stuff.

        (bmalloc::Allocator::scavenge): Ditto.

        (bmalloc::Allocator::allocateLogSizeClass): New helper function for
        allocating based on log size classes.

        (bmalloc::Allocator::allocateSlowCase): Account for extra size class
        possibilities.

        * bmalloc/Allocator.h:
        (bmalloc::Allocator::allocateFastCase): We only handle up to 512b on
        the fastest fast path now.

        * bmalloc/BumpAllocator.h:
        (bmalloc::BumpAllocator::validate): Deleted. I noticed that this function
        had been refactored not to do anything anymore.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::initializeLineMetadata): Iterate by size class. (See
        Allocator::Allocator.)

        * bmalloc/Heap.h: Use the sizeClassCount constant instead of hard coding
        things.

        * bmalloc/Sizes.h:
        (bmalloc::Sizes::maskSizeClass):
        (bmalloc::Sizes::maskObjectSize):
        (bmalloc::Sizes::logSizeClass):
        (bmalloc::Sizes::logObjectSize):
        (bmalloc::Sizes::sizeClass):
        (bmalloc::Sizes::objectSize): Separate size class calculation between
        simple size classes that can be computed with a mask and are 8-byte-precise
        and complex size classes that require more math and are less precise.

        * bmalloc/SmallLine.h:
        (bmalloc::SmallLine::ref):
        * bmalloc/SmallPage.h:
        (bmalloc::SmallPage::SmallPage):
        (bmalloc::SmallPage::ref):
        (bmalloc::SmallPage::deref): Cleaned up some ASSERTs that triggered
        while working on this patch.

        * bmalloc/Zone.cpp:
        (bmalloc::statistics):
        (bmalloc::zoneSize):
        (bmalloc::Zone::Zone):
        (bmalloc::size): Deleted. Renamed these symbols to work around an lldb
        bug that makes it impossible to print out variables named 'size' -- which
        can be a problem when working on malloc.

2016-03-22  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: shrink largeMax
        https://bugs.webkit.org/show_bug.cgi?id=155759

        Reviewed by Michael Saboff.

        If a largeChunk contains N bytes and we allocate objects of size
        N / 2 + 8 bytes, then we waste 50% of physical memory at peak.

        This patch sets largeMax to N / 2, reducing maximum waste to 25%.

        * bmalloc/BoundaryTag.h:
        * bmalloc/LargeChunk.h:
        (bmalloc::LargeChunk::LargeChunk):
        * bmalloc/SegregatedFreeList.cpp:
        (bmalloc::SegregatedFreeList::SegregatedFreeList):
        (bmalloc::SegregatedFreeList::insert): Honor largeMax vs largeObjectMax.

        * bmalloc/Sizes.h: Distinguish between the largest thing we can store
        in a free list (largeObjectMax) and the largest thing we're willing to
        allocate (largeMax).

2016-03-20  Dan Bernstein  <mitz@apple.com>

        [Mac] Determine TARGET_MAC_OS_X_VERSION_MAJOR from MACOSX_DEPLOYMENT_TARGET rather than from MAC_OS_X_VERSION_MAJOR
        https://bugs.webkit.org/show_bug.cgi?id=155707
        <rdar://problem/24980691>

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig: Set TARGET_MAC_OS_X_VERSION_MAJOR based on the last
          component of MACOSX_DEPLOYMENT_TARGET.
        * Configurations/DebugRelease.xcconfig: For engineering builds, preserve the behavior of
          TARGET_MAC_OS_X_VERSION_MAJOR being the host’s OS version.

2016-03-20  Dan Bernstein  <mitz@apple.com>

        Update build settings

        Rubber-stamped by Andy Estes.

        * Configurations/DebugRelease.xcconfig:

2016-03-14  Geoffrey Garen  <ggaren@apple.com>

        Unreviewed, rolling out r197955.

        I decided to go in another direction

        Reverted changeset:

        "bmalloc: Rename SmallPage to SmallRun"
        https://bugs.webkit.org/show_bug.cgi?id=155320
        http://trac.webkit.org/changeset/197955

2016-03-10  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Rename SmallPage to SmallRun
        https://bugs.webkit.org/show_bug.cgi?id=155320

        Reviewed by Alex Christensen.

        A page is a fixed-size set of lines.

        A run is an variable-sized set of lines.

        We want to start using runs because:

            (a) we want to support varying the hardware page size by OS;

            (b) we want to support allocations larger than our current page size.

        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::reallocate):
        * bmalloc/Heap.cpp:
        (bmalloc::Heap::Heap):
        (bmalloc::Heap::initializeSmallRunMetadata):
        (bmalloc::Heap::scavenge):
        (bmalloc::Heap::scavengeSmallRuns):
        (bmalloc::Heap::allocateSmallBumpRanges):
        (bmalloc::Heap::allocateSmallRun):
        (bmalloc::Heap::deallocateSmallLine):
        (bmalloc::Heap::initializeLineMetadata): Deleted.
        (bmalloc::Heap::scavengeSmallPages): Deleted.
        (bmalloc::Heap::allocateSmallPage): Deleted.
        * bmalloc/Heap.h:
        * bmalloc/LineMetadata.h:
        * bmalloc/SmallChunk.h:
        (bmalloc::SmallChunk::begin):
        (bmalloc::SmallChunk::end):
        (bmalloc::SmallChunk::lines):
        (bmalloc::SmallChunk::runs):
        (bmalloc::SmallChunk::SmallChunk):
        (bmalloc::SmallLine::end):
        (bmalloc::SmallRun::get):
        (bmalloc::SmallRun::begin):
        (bmalloc::SmallRun::end):
        (bmalloc::SmallChunk::pages): Deleted.
        (bmalloc::SmallPage::get): Deleted.
        (bmalloc::SmallPage::begin): Deleted.
        (bmalloc::SmallPage::end): Deleted.
        * bmalloc/SmallPage.h: Removed.
        * bmalloc/SmallRun.h: Copied from Source/bmalloc/bmalloc/SmallPage.h.
        (bmalloc::SmallRun::SmallRun):
        (bmalloc::SmallRun::ref):
        (bmalloc::SmallRun::deref):
        (bmalloc::SmallPage::SmallPage): Deleted.
        (bmalloc::SmallPage::ref): Deleted.
        (bmalloc::SmallPage::deref): Deleted.
        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::allocateSmallChunk):
        (bmalloc::VMHeap::allocateLargeChunk):
        * bmalloc/VMHeap.h:
        (bmalloc::VMHeap::allocateSmallRun):
        (bmalloc::VMHeap::allocateLargeObject):
        (bmalloc::VMHeap::deallocateSmallRun):
        (bmalloc::VMHeap::deallocateLargeObject):
        (bmalloc::VMHeap::allocateSmallPage): Deleted.
        (bmalloc::VMHeap::deallocateSmallPage): Deleted.

2016-03-08  Geoffrey Garen  <ggaren@apple.com>

        Unreviewed, rolling in r197722.
        https://bugs.webkit.org/show_bug.cgi?id=155171

        The right calculation for our static_assert is actually:

            sizeof(SmallChunk) % vmPageSize + 2 * smallMax <= vmPageSize

        instead of:

            sizeof(SmallChunk) % vmPageSize + smallMax <= vmPageSize

        smallMax is not enough because line metadata might require us to begin
        allocation at an offset as large as smallMax, so we need 2 * smallMax.

        Once correct, this static_assert fires, and we fix it by increasing
        the alignment of SmallChunk.

        Restored changeset:

        "bmalloc: Use List<T> instead of Vector<T> in some places"
        https://bugs.webkit.org/show_bug.cgi?id=155150
        http://trac.webkit.org/changeset/197722

2016-03-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r197722.
        https://bugs.webkit.org/show_bug.cgi?id=155171

        This change caused 800+ JSC test failures (Requested by
        ryanhaddad on #webkit).

        Reverted changeset:

        "bmalloc: Use List<T> instead of Vector<T> in some places"
        https://bugs.webkit.org/show_bug.cgi?id=155150
        http://trac.webkit.org/changeset/197722

2016-03-07  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Use List<T> instead of Vector<T> in some places
        https://bugs.webkit.org/show_bug.cgi?id=155150

        Reviewed by Andreas Kling.

        Vector<T> is expensive when you want a lot of them because our minimum
        allocation size is the system page size.

        * bmalloc.xcodeproj/project.pbxproj: Added a List<T> class.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::scavengeSmallPages):
        (bmalloc::Heap::allocateSmallPage): Use the List<T> API. No need to check
        for stale entries anymore because List<T> supports O(1) eager removal
        and we remove eagerly now.

        (bmalloc::Heap::deallocateSmallLine): Remove eagerly. This simplifies
        the allocation code and it is also required for correctness since we
        only have enough metadata to be in one list at a time.

        * bmalloc/Heap.h: List!

        * bmalloc/SmallChunk.h: Made this assert a little more precise since this
        patch triggered the old version in a benign way.

        (bmalloc::SmallChunk::SmallChunk): This code moved to the SmallPage
        constructor.

        * bmalloc/SmallPage.h:
        (bmalloc::SmallPage::SmallPage): Accomodate the List<T> data structure.
        This is a net memory savings on Mac for heaps smaller than ~128MB and on
        iOS for heaps smaller than ~512MB. The maximum memory saved is 512kB on
        Mac and 2MB on iOS. For larger heaps, there's a memory cost of 0.4% on
        Mac and 0.1% on iOS.

        * bmalloc/VMHeap.h:
        (bmalloc::VMHeap::allocateSmallPage): Use List<T> API.

2016-03-03  Geoffrey Garen  <ggaren@apple.com>

        Unreviewed, rolling in r197174.
        https://bugs.webkit.org/show_bug.cgi?id=154762

        The right calculation for alignment is actually:

            vmAlignment - getpagesize() + vmSize

        instead of:

            vmAlignment - vmPageSize + vmSize

        The vmPageSize might be larger than getpagesize().

        Restored changeset:

        "bmalloc: Added a fast XLarge allocator"
        https://bugs.webkit.org/show_bug.cgi?id=154720
        http://trac.webkit.org/changeset/197174

2016-02-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r197174.
        https://bugs.webkit.org/show_bug.cgi?id=154762

        This change caused LayoutTests to crash on iOS simulator
        (Requested by ryanhaddad on #webkit).

        Reverted changeset:

        "bmalloc: Added a fast XLarge allocator"
        https://bugs.webkit.org/show_bug.cgi?id=154720
        http://trac.webkit.org/changeset/197174

2016-02-25  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Added a fast XLarge allocator
        https://bugs.webkit.org/show_bug.cgi?id=154720

        Reviewed by Andreas Kling.

        This is a big speedup for XLarge allocations because it avoids mmap
        and page fault churn. It also enables future design changes to handle
        a smaller size range on the fast path.

        * bmalloc.xcodeproj/project.pbxproj:

        * bmalloc/Algorithm.h:
        (bmalloc::roundUpToMultipleOf):
        (bmalloc::roundDownToMultipleOf): Added a non-constant round down.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::tryAllocate): XLarge no longer requires the caller
        to align things.

        (bmalloc::Allocator::allocate): Tweaked the alignment calculation for
        clarity. When alignment and largeAlignment are equal, no adjustment
        is necessary since all allocations guarantee largeAlignment.

        (bmalloc::Allocator::reallocate): Updated for interface change.

        Note that the new interface fixes some concurrency bugs. The old code
        kept an iterator into the XLarge allocator across lock drop and acquisition,
        which is not cool.

        (bmalloc::Allocator::allocateXLarge): XLarge no longer requires the caller
        to align things.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::scavengeXLargeObjects): Added scavenging for XLarge.

        (bmalloc::Heap::allocateXLarge):

        (bmalloc::Heap::splitAndAllocate): Split XLarge objects to xLargeAlignment.

        (bmalloc::Heap::tryAllocateXLarge):
        (bmalloc::Heap::xLargeSize):
        (bmalloc::Heap::shrinkXLarge):
        (bmalloc::Heap::deallocateXLarge): Allocate from our map before going
        to the OS.

        (bmalloc::Heap::findXLarge): Deleted.

        * bmalloc/Heap.h:

        * bmalloc/LargeObject.h:
        (bmalloc::LargeObject::split):

        * bmalloc/ObjectType.h:
        (bmalloc::isXLarge): Give XLarge objects an explicit alignment for clarity.

        * bmalloc/Range.h:
        (bmalloc::Range::size):
        (bmalloc::Range::operator!):
        (bmalloc::Range::operator bool):
        (bmalloc::Range::operator<):
        (bmalloc::canMerge):
        (bmalloc::merge): Some helpers that were useful in writing this patch.

        * bmalloc/Sizes.h:

        * bmalloc/SortedVector.h: Added.
        (bmalloc::SortedVector::Bucket::Bucket):
        (bmalloc::SortedVector::Bucket::operator<):
        (bmalloc::SortedVector::iterator::iterator):
        (bmalloc::SortedVector::iterator::operator++):
        (bmalloc::SortedVector::iterator::operator!=):
        (bmalloc::SortedVector::iterator::operator*):
        (bmalloc::SortedVector::iterator::operator->):
        (bmalloc::SortedVector::iterator::skipDeletedBuckets):
        (bmalloc::SortedVector::begin):
        (bmalloc::SortedVector::end):
        (bmalloc::SortedVector<T>::insert):
        (bmalloc::SortedVector<T>::find):
        (bmalloc::SortedVector<T>::get):
        (bmalloc::SortedVector<T>::take):
        (bmalloc::SortedVector<T>::shrinkToFit): A simple abstraction for keeping
        a sorted vector. Insertion is average amortized log(n) because we keep
        deleted buckets that we can reuse.

        This is better than a tree because we get better locality, less memory
        use, and simpler code. Also, trees require a node memory allocator, and
        implementing a memory allocator in a memory allocator is no fun.

        Arguably we should use a hash table instead. But that's more code, and
        sorted vector has other nice properties that we might want to take
        adavantage of in the future.

        * bmalloc/VMAllocate.h:
        (bmalloc::tryVMAllocate): Fixed an inaccuracy in the alignment calculation
        here. This code was sort of trying to enforce the alignment that the
        XLarge allocator enforces -- but it's better to enforce that alignment
        there.

        The right calculation is:

            vmAlignment - vmPageSize + vmSize

        because the worst case is when you are aligned to 0 + vmPageSize, and
        you must walk forward vmAlignment - vmPageSize to reach the next
        vmAlignment.

        (bmalloc::tryVMExtend): Deleted. No need to go back to the OS for VM
        since we manage our own.

        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::allocateLargeChunk): Updated for clarity. When we
        grow the large heap we know that grown region is where the next allocation
        will take place, so we return it directly instead of pushing it to the
        free list.

        This fixes a subtle bug where an overly conservative aligned allocation
        algorithm can fail to allocate at all when it grows the heap.

        * bmalloc/VMHeap.h:
        (bmalloc::VMHeap::allocateLargeObject): Ditto.
        (bmalloc::VMHeap::allocateLargeObject): Ditto.

        * bmalloc/VMState.h:
        (bmalloc::merge): Added a helper.

        * bmalloc/Vector.h:
        (bmalloc::Vector::begin):
        (bmalloc::Vector::end):
        (bmalloc::Vector::size):
        (bmalloc::Vector::capacity):
        (bmalloc::Vector::last):
        (bmalloc::Vector::pop):
        (bmalloc::Vector<T>::push):
        (bmalloc::Vector<T>::pop):
        (bmalloc::Vector<T>::shrink): Use a proper iterator API to play nice
        with std algorithms.

        (bmalloc::Vector<T>::insert): New function required by SortedVector.

        (bmalloc::Vector<T>::reallocateBuffer):
        (bmalloc::Vector<T>::shrinkCapacity): Allow for shrinking back all the way
        to 0 because that's what shrinkToFit wants.
        (bmalloc::Vector<T>::growCapacity):
        (bmalloc::Vector<T>::shrinkToFit):

        * bmalloc/XLargeMap.cpp: Added. Helper data structure for managing XLarge
        objects. We have enough granularity in our metadata to represent any
        kind of address range.

        We store free ranges in a flat vector because most programs have very
        few individual free XLarge ranges. (They usually merge.)

        We store allocated ranges in a sorted vector because programs might
        allocate lots of XLarge ranges. For example, if the XLarge minimum is
        128kB, and you have a 1GB process, that's 8192 ranges. Linear scan would
        examine 8192 items but binary search only 13.

        Empirically, this is 1.5X faster than our current large allocator if you
        modify MallocBench/big to allocate XLarge objects and not to initialize
        objects and you allocate 128kB-256kB objects in a 1GB address space.

        (bmalloc::XLargeMap::takeFree): Be careful about overflow in this function
        because we support super huge pointers, alignments, and sizes.

        (bmalloc::XLargeMap::addFree): Merge eagerly on free because the cost
        of missing an XLarge opportunity is catastrophic. Also, I discovered
        by experiment that any allocator that doesn't merge eagerly can create
        lots of subtle opportunities for snowballing fragmentation, as
        fragmentation in range A forces you to chop up range B, and so on.

        We allocate "first fit" (allocating the lowest address) because someone
        wrote a paper once that said that it's the best algorithm to combat
        fragmentation (even though worst case fragmentation is unavoidable
        regardless of algorithm).

        (bmalloc::XLargeMap::addAllocated):
        (bmalloc::XLargeMap::getAllocated):
        (bmalloc::XLargeMap::takeAllocated):
        (bmalloc::XLargeMap::shrinkToFit):
        (bmalloc::XLargeMap::takePhysical):
        (bmalloc::XLargeMap::addVirtual):
        * bmalloc/XLargeMap.h: Added.
        (bmalloc::XLargeMap::Allocation::operator<):

        * bmalloc/XLargeRange.h: Added.
        (bmalloc::XLargeRange::XLargeRange):
        (bmalloc::XLargeRange::vmState):
        (bmalloc::XLargeRange::setVMState):
        (bmalloc::canMerge):
        (bmalloc::merge):
        (bmalloc::XLargeRange::split): Helper for tracking VMState in a range.

2016-02-23  Dan Bernstein  <mitz@apple.com>

        [Xcode] Linker errors display mangled names, but no longer should
        https://bugs.webkit.org/show_bug.cgi?id=154632

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig: Stop setting LINKER_DISPLAYS_MANGLED_NAMES to YES.

2016-02-22  Konstantin Tokarev  <annulen@yandex.ru>

        Fixed compilation of bmalloc with GCC 4.8 after r196873.
        https://bugs.webkit.org/show_bug.cgi?id=154534

        Reviewed by Mark Lam.

        See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55382.

        * bmalloc/LargeChunk.h:
        * bmalloc/SmallChunk.h:

2016-02-21  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Don't use a whole page for metadata
        https://bugs.webkit.org/show_bug.cgi?id=154510

        Reviewed by Andreas Kling.

        (1) Don't round up metadata to a page boundary. This saves 1.5% dirty
        memory on iOS and 0.2% on Mac. It also enables a future patch to allocate
        smaller chunks without wasting memory.

        (2) Initialize metadata lazily. This saves dirty memory when the program
        allocates primarily small or large objects (but not both), leaving some
        metadata uninitialized.

        * bmalloc.xcodeproj/project.pbxproj: Medium objects are gone now.

        * bmalloc/BumpAllocator.h:
        (bmalloc::BumpAllocator::refill): Added an ASSERT to help debug a bug
        I cause while working on this patch.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::allocateSmallBumpRanges): Ditto.

        (bmalloc::Heap::splitAndAllocate):
        (bmalloc::Heap::allocateLarge): Updated for interface change.

        * bmalloc/LargeChunk.h: Changed the boundaryTagCount calculation to
        a static_assert.

        Don't round up to page boundary. (See above.)

        (bmalloc::LargeChunk::LargeChunk): Moved code here from LargeChunk::init.
        A constructor is a more natural / automatic way to do this initialization.

        * bmalloc/LargeObject.h:
        (bmalloc::LargeObject::init): Deleted. Moved to LargeChunk.

        * bmalloc/Sizes.h: Chagned largeChunkMetadataSize to a simpler constant
        because metadata size no longer varies by page size.

        * bmalloc/SmallChunk.h:
        (bmalloc::SmallChunk::begin):
        (bmalloc::SmallChunk::end):
        (bmalloc::SmallChunk::lines):
        (bmalloc::SmallChunk::pages): Use std::array to make begin/end
        calculations easier.

        (bmalloc::SmallChunk::SmallChunk): Treat our metadata like a series
        of allocated objects. We used to avoid trampling our metadata by
        starting object memory at the next page. Now we share the first page
        between metadata and objects, and we account for metadata explicitly.

        * bmalloc/SuperChunk.h:
        (bmalloc::SuperChunk::SuperChunk):
        (bmalloc::SuperChunk::smallChunk):
        (bmalloc::SuperChunk::largeChunk):
        (bmalloc::SuperChunk::create): Deleted. Don't eagerly run the SmallChunk
        and LargeChunk constructors. We'll run them lazily as needed.

        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::VMHeap):
        (bmalloc::VMHeap::allocateSmallChunk):
        (bmalloc::VMHeap::allocateLargeChunk):
        (bmalloc::VMHeap::allocateSuperChunk):
        (bmalloc::VMHeap::grow): Deleted. Track small and large chunks explicitly
        so we can initialize them lazily.

        * bmalloc/VMHeap.h:
        (bmalloc::VMHeap::allocateSmallPage):
        (bmalloc::VMHeap::allocateLargeObject): Specify whether we're allocating
        a small or large chunk since we don't allocate both at once anymore.

2016-02-20  Mark Lam  <mark.lam@apple.com>

        Use of inlined asm statements causes problems for -std=c99 builds.
        https://bugs.webkit.org/show_bug.cgi?id=154507

        Reviewed by Dan Bernstein.

        * bmalloc/BAssert.h:

2016-02-19  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed. Fix debug build error since r196847

        Fix gcc build warning appeared as below
        by removing BASSERT(refCount <= maxRefCount).
        error: comparison is always true due to limited range of data type
        [-Werror=type-limits]

        * bmalloc/SmallLine.h:
        (bmalloc::SmallLine::ref): Deleted.

2016-02-19  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Chunk, Page, and Line don't need to be class templates
        https://bugs.webkit.org/show_bug.cgi?id=154480

        Reviewed by Gavin Barraclough.

        We needed class templates to distinguish between small and medium,
        but medium is gone now.

        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/Chunk.h: Removed.
        * bmalloc/Heap.cpp:
        (bmalloc::Heap::initializeLineMetadata):
        (bmalloc::Heap::allocateSmallBumpRanges):
        * bmalloc/Heap.h:
        * bmalloc/Line.h: Removed.
        * bmalloc/Page.h: Removed.
        * bmalloc/Sizes.h:
        * bmalloc/SmallChunk.h: Replaced with Source/bmalloc/bmalloc/Chunk.h.
        (bmalloc::SmallChunk::begin):
        (bmalloc::SmallChunk::end):
        (bmalloc::SmallChunk::lines):
        (bmalloc::SmallChunk::pages):
        (bmalloc::SmallChunk::get):
        (bmalloc::SmallLine::get):
        (bmalloc::SmallLine::begin):
        (bmalloc::SmallLine::end):
        (bmalloc::SmallPage::get):
        (bmalloc::SmallPage::begin):
        (bmalloc::SmallPage::end):
        (bmalloc::Chunk::begin): Deleted.
        (bmalloc::Chunk::end): Deleted.
        (bmalloc::Chunk::lines): Deleted.
        (bmalloc::Chunk::pages): Deleted.
        * bmalloc/SmallLine.h: Replaced with Source/bmalloc/bmalloc/Line.h.
        (bmalloc::SmallLine::ref):
        (bmalloc::SmallLine::deref):
        (bmalloc::Line<Traits>::begin): Deleted.
        (bmalloc::Line<Traits>::end): Deleted.
        (bmalloc::Line<Traits>::ref): Deleted.
        (bmalloc::Line<Traits>::deref): Deleted.
        * bmalloc/SmallPage.h: Replaced with Source/bmalloc/bmalloc/Page.h.
        (bmalloc::SmallPage::hasFreeLines):
        (bmalloc::SmallPage::setHasFreeLines):
        (bmalloc::SmallPage::ref):
        (bmalloc::SmallPage::deref):
        (bmalloc::Page::hasFreeLines): Deleted.
        (bmalloc::Page::setHasFreeLines): Deleted.
        (bmalloc::Page<Traits>::ref): Deleted.
        (bmalloc::Page<Traits>::deref): Deleted.
        * bmalloc/SmallTraits.h: Removed.

2016-02-18  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Remove the concept of medium objects
        https://bugs.webkit.org/show_bug.cgi?id=154436

        Reviewed by Sam Weinig.

        There's no need to distinguish medium objects from small: Small object
        metadata works naturally for both as long as we allow an object to
        span more than two small lines. (We already allow an object to span
        more than one small line.)

        This change reduces memory use because it eliminates the 1kB line size,
        so we don't have to hold down 1kB lines for individual 264+ byte objects.

        1kB lines were always a bit of a compromise. The main point of bump
        allocation is to take advantage of cache lines. Cache lines are usually
        64 bytes, so line sizes above 256 bytes are a bit of a stretch.

        This change speeds up small object benchmarks because it eliminates the
        branch to detect medium objects in deallocation log processing.

        This change reduces virtual memory use from worst cast 4X to worst case
        2X because the medium chunk is gone. iOS cares about virtual memory use
        and terminates apps above ~1GB, so this change gives us more breathing room.

        This change slows down medium benchmarks a bit because we end up doing
        more work to recycle fragmented medium objects. Overall, the tradeoff
        seems justified, since we have a net speedup and a memory use savings.

        * bmalloc.xcodeproj/project.pbxproj: Removed all the medium files. We
        can simplify even further in a follow-up patch, removing the base class
        templates for Chunk, Page, and Line as well.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::Allocator):
        (bmalloc::Allocator::allocate):
        (bmalloc::Allocator::reallocate):
        (bmalloc::Allocator::scavenge):
        (bmalloc::Allocator::refillAllocatorSlowCase):
        (bmalloc::Allocator::refillAllocator):
        (bmalloc::Allocator::allocateSlowCase): Medium is gone. Small max is the
        new medium max.

        * bmalloc/Allocator.h:
        (bmalloc::Allocator::allocateFastCase): Ditto.

        * bmalloc/BumpAllocator.h:
        (bmalloc::BumpAllocator::validate):
        (bmalloc::BumpAllocator::allocate): No more medium.

        * bmalloc/Chunk.h: No more medium.

        * bmalloc/Deallocator.cpp:
        (bmalloc::Deallocator::processObjectLog): No check for medium. This is
        a speedup.

        (bmalloc::Deallocator::deallocateSlowCase): No more medium.

        * bmalloc/Deallocator.h:
        (bmalloc::Deallocator::deallocateFastCase): Ditto.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::initializeLineMetadata): The algorithm here changed from
        iterating each line to iterating each object. This helps us accomodate
        objects that might span more than two lines -- i.e., all objects between
        (512 bytes, 1024 bytes].

        (bmalloc::Heap::scavenge):
        (bmalloc::Heap::scavengeSmallPages):
        (bmalloc::Heap::scavengeLargeObjects): Medium is gone.

        (bmalloc::Heap::allocateSmallBumpRanges): Allow for lines that allocate
        zero objects. This happens when an object spans more than two lines --
        the middle lines allocate zero objects.

        Also set the "has free lines" bit to false if we consume the last free
        line. This needs to be a bit now because not all pages agree on their
        maximum refcount anymore, so we need an explicit signal for the transition
        from maximum to maximum - 1.

        (bmalloc::Heap::allocateSmallPage): This code didn't change; I just removed
        the medium code.

        (bmalloc::Heap::deallocateSmallLine): Changed the algorithm to check
        hasFreeLines. See allocateSmallBumpRanges.

        (bmalloc::Heap::scavengeMediumPages): Deleted.
        (bmalloc::Heap::allocateMediumBumpRanges): Deleted.
        (bmalloc::Heap::allocateMediumPage): Deleted.
        (bmalloc::Heap::deallocateMediumLine): Deleted.
        * bmalloc/Heap.h:
        (bmalloc::Heap::derefMediumLine): Deleted.

        * bmalloc/LargeChunk.h:
        (bmalloc::LargeChunk::get):
        (bmalloc::LargeChunk::endTag):
        * bmalloc/Line.h: No more medium.

        * bmalloc/MediumChunk.h: Removed.
        * bmalloc/MediumLine.h: Removed.
        * bmalloc/MediumPage.h: Removed.
        * bmalloc/MediumTraits.h: Removed.

        * bmalloc/ObjectType.cpp:
        (bmalloc::objectType):
        * bmalloc/ObjectType.h:
        (bmalloc::isSmall):
        (bmalloc::isXLarge):
        (bmalloc::isSmallOrMedium): Deleted.
        (bmalloc::isMedium): Deleted. No more medium.

        * bmalloc/Page.h:
        (bmalloc::Page::sizeClass):
        (bmalloc::Page::setSizeClass):
        (bmalloc::Page::hasFreeLines):
        (bmalloc::Page::setHasFreeLines): Add the free lines bit. You get better
        codegen if you make it the low bit, since ref / deref can then add / sub
        2. So do that.

        * bmalloc/Sizes.h:
        (bmalloc::Sizes::sizeClass): Expand the small size class to include the
        medium size class.

        * bmalloc/SuperChunk.h:
        (bmalloc::SuperChunk::SuperChunk):
        (bmalloc::SuperChunk::smallChunk):
        (bmalloc::SuperChunk::largeChunk):
        (bmalloc::SuperChunk::mediumChunk): Deleted. No more medium.

        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::grow):
        * bmalloc/VMHeap.h:
        (bmalloc::VMHeap::allocateSmallPage): Set the has free lines bit before
        returning a Page to the Heap since this is the correct default state
        when we first allocate a page.

        (bmalloc::VMHeap::allocateMediumPage): Deleted.
        (bmalloc::VMHeap::deallocateMediumPage): Deleted.

2016-02-19  Michael Saboff  <msaboff@apple.com>

        bmalloc: Unify VMHeap and Heap LargeObjects free lists to reduce fragmentation
        https://bugs.webkit.org/show_bug.cgi?id=154192

        Reviewed by Geoffrey Garen.

        Change the operation of Heap and VMHeap LargeObject free lists.
        Renamed Owner to VMState to track the state of each LargeObject.
            Physical - The pages have been allocated.
            Virtual - The pages have not been allocated.
            Mixed - The object contains a mixture of Physical and Virtual pages.
        VMState uses one bit each for Physical and Virtual to simplify merging states
        when merging two adjacent blocks.  This change enforces the rule that objects in
        the Heap free list must have have the Physical bit set in their VMState while objects
        in the VMHeap free list must have the Physical bit clear.  Thie means that the Heap
        can have LargeObjects in Physical or Mixed VMState, but the VMHeap's free list can
        only contain Virtual LargeObjects.
        
        In both Heap::allocateLarge(), we now allocate physical pages if the LargeObject we
        pull from the free list has any Virtual pages before we possilby split the 
        object.  When we merge objects, the result might be made up of Mixed page allocations.
        When allocating a Mixed LargeObject, we need to allocate memory for them as well.
        The scavenger deallocates both Physical and Mixed LargeObjects, placing them back into
        the VMHeap's free list.

        When we allocate or deallocate Mixed LargeObjects, there are pages that within these
        objects that will be redundantly modified.  It would require additional metadata to
        eliminate this redundancy.

        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/BoundaryTag.h:
        (bmalloc::BoundaryTag::vmState): New helper.
        (bmalloc::BoundaryTag::setVMState): New helper.
        (bmalloc::BoundaryTag::owner): Deleted.
        (bmalloc::BoundaryTag::setOwner): Deleted.
        * bmalloc/Heap.h:
        (bmalloc::Heap::splitAndAllocate): New helpers.
        * bmalloc/LargeObject.h:
        (bmalloc::LargeObject::vmState): New helper.
        (bmalloc::LargeObject::setVMState): New helper.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::splitAndAllocate): New helpers.
        (bmalloc::Heap::allocateLarge): 
        (bmalloc::Heap::deallocatePhysicalPages): Refactored from VMHeap::deallocateLargeObjectMemory.

        * bmalloc/FreeList.cpp:
        (bmalloc::FreeList::takeGreedy):
        (bmalloc::FreeList::take):
        (bmalloc::FreeList::removeInvalidAndDuplicateEntries):
        * bmalloc/FreeList.h:
        (bmalloc::FreeList::FreeList):
        (bmalloc::FreeList::push):
        * bmalloc/Heap.cpp:
        (bmalloc::Heap::Heap):
        (bmalloc::Heap::scavengeLargeObjects):
        * bmalloc/LargeObject.h:
        (bmalloc::LargeObject::isValidAndFree):
        (bmalloc::LargeObject::validateSelf):
        * bmalloc/SegregatedFreeList.cpp:
        (bmalloc::SegregatedFreeList::SegregatedFreeList): Changed to initialize our required Physical state.
        * bmalloc/SegregatedFreeList.h:
        (bmalloc::SegregatedFreeList::SegregatedFreeList):
        (bmalloc::SegregatedFreeList::insert):
        (bmalloc::SegregatedFreeList::takeGreedy):
        (bmalloc::SegregatedFreeList::take):
        Replaced Owner parameters and checks with VMState::HasPhysical.

        * bmalloc/LargeObject.h:
        (bmalloc::LargeObject::prevCanMerge): Removed owner from tests.
        (bmalloc::LargeObject::nextCanMerge): Removed owner from tests.
        (bmalloc::LargeObject::merge): Removed owner from tests.  Updated to merge VMStates andset the
        VMState after the merge.

        * bmalloc/LargeObject.h:
        (bmalloc::LargeObject::owner): Deleted.
        (bmalloc::LargeObject::setOwner): Deleted.

        * bmalloc/Owner.h: Removed.

        * bmalloc/VMAllocate.h:
        (bmalloc::vmAllocatePhysicalPagesSloppy): Changed to round begin down to eliminate the left to right
        allocation constraint.

        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::grow): Large space managed like small or medium as a vector of LargeChunks.
        (bmalloc::VMHeap::VMHeap): Changed to initialize our required Physical state.

        * bmalloc/VMHeap.h:
        (bmalloc::VMHeap::allocateLargeObject): These no longer allocate memory.
        (bmalloc::VMHeap::deallocateLargeObject): Removed setOwner.  Now we set the VMState after any merges.

        * bmalloc/VMState.h: Copied from Source/bmalloc/bmalloc/Owner.h.
        (bmalloc::VMState::VMState):
        (bmalloc::VMState::hasPhysical):
        (bmalloc::VMState::hasVirtual):
        (bmalloc::VMState::merge):
        (bmalloc::VMState::operator ==):
        (bmalloc::VMState::operator unsigned):
        New class with various helpers.

2016-02-12  Michael Saboff  <msaboff@apple.com>

        BASSERTs added in r196421 are causing debug test failures
        https://bugs.webkit.org/show_bug.cgi?id=154113

        Reviewed by Geoffrey Garen.

        In VMHeap::deallocateLargeObject(), we drop the lock to deallocate the physical pages.
        If the scavenger thread is running at the same time a synchronous call to scavenge()
        comes in, we could call VMHeap::deallocateLargeObject() for an adjacent object while the
        lock in the other thread is dropped.  We fix this by checking for adjacent objects we
        can merge with and loop if we have one.

        * bmalloc/FreeList.h:
        (bmalloc::FreeList::push): Added BASSERT to catch adding unmerged free objects
        * bmalloc/Heap.cpp:
        (bmalloc::Heap::allocateLarge): Changed to use nextCanMerge().
        * bmalloc/LargeObject.h:
        (bmalloc::LargeObject::prevCanMerge): Repurposed prevIsAllocated.
        (bmalloc::LargeObject::nextCanMerge): Repurposed nextIsAllocated.
        (bmalloc::LargeObject::prevIsAllocated): Deleted.
        (bmalloc::LargeObject::nextIsAllocated): Deleted.
        * bmalloc/VMHeap.h:
        (bmalloc::VMHeap::allocateLargeObject): Moved adding the extra object back to the free list
        to after we set the object we'll return as being allocated.
        (bmalloc::VMHeap::deallocateLargeObject):

2016-02-12  Mark Lam  <mark.lam@apple.com>

        Make BCRASH() use breakpoint traps too for non-debug OS(DARWIN).
        https://bugs.webkit.org/show_bug.cgi?id=154184

        Reviewed by Saam Barati.

        This makes it behave consistently with WTFCrash().

        * bmalloc/BAssert.h:
        * bmalloc/BPlatform.h:

2016-02-11  Michael Saboff  <msaboff@apple.com>

        Unreviewed build fix after r196421.

        Removed BASSERTs that are firing to eliminate Debug build crashes.  I'll debug locally and
        enable or alter after the issue is understood.

        * bmalloc/LargeObject.h:
        (bmalloc::LargeObject::merge): Removed BASSERTs that are firing.

2016-02-11  Michael Saboff  <msaboff@apple.com>

        bmalloc: large aligned allocations will put 1 or 2 free object on free list without merging with free neighbors
        https://bugs.webkit.org/show_bug.cgi?id=154091

        Reviewed by Geoffrey Garen.

        If we split off any unused free object in the aligned version of Heap::allocateLarge(), we merge them with
        free neighbors before putting them back on the free list.  Added helpers to verify that when we
        add LargeObjects to the free list their neighbors are allocated.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::allocateLarge): Deleted private helper version and rolled it into the two the
        two public versions of allocateLarge().
        * bmalloc/Heap.h:
        * bmalloc/LargeObject.h:
        (bmalloc::LargeObject::prevIsAllocated): New helper.
        (bmalloc::LargeObject::nextIsAllocated): New helper.
        (bmalloc::LargeObject::merge): Check that the merge object has allocated neighbors.

2016-02-05  Saam barati  <sbarati@apple.com>

        bmalloc: largeMax calculation is wrong on iOS
        https://bugs.webkit.org/show_bug.cgi?id=153923

        Reviewed by Mark Lam.

        Our number for largeMax was larger than what we had
        space to actually allocate inside the LargeChunk. This made 
        it so that we would allocate a large object for something
        that really should be extra large. Previously:
        largeMax + sizeof(LargeChunk) > 1MB
        which meant that when we would grow() to accommodate an allocation
        of a particular size inside a LargeObject despite the fact that
        the allocation size would be too large to actually fit in the LargeObject.
        This would manifest when we had an allocation size in the range:
        1MB - sizeof(LargeChunk) < allocation size < largeMax

        We fix this bug by being precise in our calculation of largeMax
        instead of just assuming largeChunkSize * 99/100 is enough
        space for the metadata.

        * bmalloc/LargeChunk.h:
        (bmalloc::LargeChunk::get):
        * bmalloc/Sizes.h:

2016-01-31  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Remove unused definition of HAVE_HEADER_DETECTION_H
        https://bugs.webkit.org/show_bug.cgi?id=153729

        Reviewed by Sam Weinig.

        After r141700, HAVE_HEADER_DETECTION_H is no longer used.

        * Configurations/Base.xcconfig:

2015-12-19  Dan Bernstein  <mitz@apple.com>

        [Mac] WebKit contains dead source code for OS X Mavericks and earlier
        https://bugs.webkit.org/show_bug.cgi?id=152462

        Reviewed by Alexey Proskuryakov.

        * Configurations/DebugRelease.xcconfig: Removed definition of MACOSX_DEPLOYMENT_TARGET for
          OS X 10.9.

2015-12-03  Anders Carlsson  <andersca@apple.com>

        Remove Objective-C GC support
        https://bugs.webkit.org/show_bug.cgi?id=151819
        rdar://problem/23746991

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2015-12-03  Michael Saboff  <msaboff@apple.com>

        bmalloc: extra large allocations could be more efficient
        https://bugs.webkit.org/show_bug.cgi?id=151817

        Reviewed by Geoffrey Garen.

        Reduced the super chunk size from 4MB to 2MB.

        Added path to reallocate() of an extra large object to see if we can extend the allocation.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::reallocate):
        * bmalloc/SegregatedFreeList.h:
        * bmalloc/Sizes.h:
        * bmalloc/VMAllocate.h:
        (bmalloc::tryVMAllocate):
        (bmalloc::tryVMExtend):
        (bmalloc::vmAllocate):

2015-11-11  Akos Kiss  <akiss@inf.u-szeged.hu>

        bmalloc: Add libdl dependency
        https://bugs.webkit.org/show_bug.cgi?id=151140

        Reviewed by Csaba Osztrogonác.

        Make sure that the linker links libdl and finds the references to
        dlopen, dlsym and dlclose in Environment.cpp.

        * CMakeLists.txt:

2015-11-02  Andy Estes  <aestes@apple.com>

        [Cocoa] Add tvOS and watchOS to SUPPORTED_PLATFORMS
        https://bugs.webkit.org/show_bug.cgi?id=150819

        Reviewed by Dan Bernstein.

        This tells Xcode to include these platforms in its Devices dropdown, making it possible to build in the IDE.

        * Configurations/Base.xcconfig:

2015-11-01  Philip Chimento  <philip.chimento@gmail.com>

        [GTK] Fix combinations of PLATFORM(GTK) and OS(DARWIN)
        https://bugs.webkit.org/show_bug.cgi?id=144560

        Reviewed by Darin Adler.

        * PlatformGTK.cmake: Added. This adds Zone.cpp to the PlatformGTK
        build, on Darwin only. Since there was previously nothing for the
        build system to do that was specific to the GTK platform in
        bmalloc, we need to create this file.

2015-10-29  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: AsyncTask should handle destruction
        https://bugs.webkit.org/show_bug.cgi?id=150648

        Reviewed by Mark Lam.

        So we can use it in more places.

        * bmalloc/AsyncTask.h: Use std::thread instead of pthread because it
        should be more portable.

        (bmalloc::Function>::AsyncTask): Renamed Signaled to RunRequested for
        clarity. Added an ExitRequested state.

        (bmalloc::Function>::~AsyncTask): Wait for our child thread to exit
        before destroying ourselves because our child thread will modify our
        data (and might modify our client's data). Note that we only need to
        wait for the last child thread since any prior child thread, having
        reached the Exited condition, is guaranteed not to read or write any
        data.

        (bmalloc::Function>::run):
        (bmalloc::Function>::runSlowCase): Updated for interface changes. Also
        changed to use our WebKit style for condition signal: Hold the lock
        during the signal and always notify all. Technically, neither is necessary,
        but it is easier to understand the code this way, and harder to make
        mistakes.

        (bmalloc::Function>::threadEntryPoint):
        (bmalloc::Function>::threadRunLoop): Handle the new ExitRequested state.
        Technically, this state has no meaningful difference from the Exited
        state, but it is nice to be explicit.

        (bmalloc::Function>::join): Deleted.
        (bmalloc::Function>::pthreadEntryPoint): Deleted.
        (bmalloc::Function>::entryPoint): Deleted.

2015-10-15  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: per-thread cache data structure should be smaller
        https://bugs.webkit.org/show_bug.cgi?id=150218

        Reviewed by Andreas Kling.

        Reduce the number of entries in the range cache because it's really
        big, and the bigness only helps in cases of serious fragmentation, and
        it only saves us a little bit of lock acquisition time.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::scavenge):
        (bmalloc::Allocator::refillAllocatorSlowCase):
        (bmalloc::Allocator::refillAllocator):
        (bmalloc::Allocator::allocateLarge):
        (bmalloc::Allocator::allocateSlowCase):
        (bmalloc::Allocator::allocateBumpRangeSlowCase): Deleted.
        (bmalloc::Allocator::allocateBumpRange): Deleted.
        * bmalloc/Allocator.h: Pass through the empty allocator and the range
        cache when refilling, and refill both. Otherwise, we always immediately
        pop the last item in the range cache, wasting that slot of capacity.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::allocateSmallBumpRanges):
        (bmalloc::Heap::allocateMediumBumpRanges): Account for the fact that
        the range cache is no longer big enough to guarantee that it can hold
        all the ranges in a page.

        (bmalloc::Heap::refillSmallBumpRangeCache): Deleted.
        (bmalloc::Heap::refillMediumBumpRangeCache): Deleted.

        * bmalloc/Heap.h: Move VMHeap to the end of the object because it
        contains a lot of unused / wasted space, and we want to pack our data
        together in memory.

        * bmalloc/Sizes.h: Make the range cache smaller.

2015-10-13  Chris Dumez  <cdumez@apple.com>

        Avoid useless copies in range-loops that are using 'auto'
        https://bugs.webkit.org/show_bug.cgi?id=150091

        Reviewed by Sam Weinig.

        Avoid useless copies in range-loops that are using 'auto'. Also use
        'auto*' instead of 'auto' when range values are pointers for clarity.

        * bmalloc/Deallocator.cpp:
        (bmalloc::Deallocator::processObjectLog):

2015-10-12  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Don't ASSERT that all syscalls succeed
        https://bugs.webkit.org/show_bug.cgi?id=150047
        <rdar://problem/22649531>

        Reviewed by Mark Lam.

        madvise can fail due to VM behaviors outside of our control:
        copy-on-write, fork, mprotect, and other stuff.

        Older darwin kernels sometimes return this error value, and new kernels
        might again in future.

        We haven't gained much from this ASSERT so far, so let's remove it.

        Perhaps in future we can come up with a scheme that makes madvise
        never fail, or that responds to failure.

        * bmalloc/Syscall.h:

2015-10-10  Dan Bernstein  <mitz@apple.com>

        [iOS] Remove project support for iOS 8
        https://bugs.webkit.org/show_bug.cgi?id=149993

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:
        * Configurations/bmalloc.xcconfig:
        * Configurations/mbmalloc.xcconfig:

2015-08-31  Michael Catanzaro  <mcatanzaro@igalia.com>

        Implement bmalloc::isASanEnabled for generic Unix
        https://bugs.webkit.org/show_bug.cgi?id=148623

        Reviewed by Geoffrey Garen.

        * bmalloc/BPlatform.h: Add BOS_UNIX to detect whether the OS is a Unix.
        * bmalloc/Environment.cpp:
        (bmalloc::isASanEnabled): Implement a runtime check that should work on any Unix.

2015-08-19  Geoffrey Garen  <ggaren@apple.com>

        Crash @ bmalloc::Environment::computeIsBmallocEnabled
        https://bugs.webkit.org/show_bug.cgi?id=148183

        Reviewed by NOBODY Michael Saboff.

        CrashTracer says we have some crashes beneath computeIsBmallocEnabled
        dereferencing null in strstr. We null check getenv but not
        _dyld_get_image_name, so deduction indicates that _dyld_get_image_name
        must be returning null. _dyld_get_image_name isn't really documented,
        so let's assume it can return null.

        * bmalloc/Environment.cpp:
        (bmalloc::isASanEnabled): Check _dyld_get_image_name's return value for
        null because we can't prove it won't be null.

2015-07-24  Geoffrey Garen  <ggaren@apple.com>

        vmmap crash at JavaScriptCore: 0x31cd12f6 (the JavaScript malloc zone enumerator)
        https://bugs.webkit.org/show_bug.cgi?id=147274

        Reviewed by Anders Carlsson.

        It's not really clear why vmmap sometimes fails to read the target
        process, but we can avoid a crash when it does. This is useful because
        you'll still get all the non-bmalloc data out of the target process,
        and bmalloc might not even be relevant to your investigation.

        * bmalloc/Zone.cpp:
        (bmalloc::remoteRead): Check for failure.

2015-07-24  Geoffrey Garen  <ggaren@apple.com>

        JavaScriptCore bmalloc should not register its malloc zone more than once
        https://bugs.webkit.org/show_bug.cgi?id=147273

        Reviewed by Andreas Kling.

        This was a goof: The Zone constructor, by virtue of running automatically,
        was registering a Zone inside the analysis process.

        * bmalloc/Zone.cpp:
        (bmalloc::remoteRead): Clarify that the pointer is remote.

        (bmalloc::enumerator):
        (bmalloc::Zone::Zone):
        * bmalloc/Zone.h: Separate the normal constructor and the remote constructor.
        The remote constructor skips zone registration since its goal is not
        to register a zone in the current process or do any allocation but rather
        to mirror the bytes of the zone from the target process.

2015-07-23  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Shrink the super chunk size (again)
        https://bugs.webkit.org/show_bug.cgi?id=147240

        Reviewed by Andreas Kling.

        Shrinking to 8MB reduced VM exhaustion crashes but did not eliminate them.
        Let's try 4MB.

        (My previous comment was that the maximum fast object was 2MB. But it
        was 4MB! Now it's 2MB for realsies.)

        * bmalloc/Sizes.h:

2015-07-03  Dan Bernstein  <mitz@apple.com>

        [Xcode] Update some build settings as recommended by Xcode 7
        https://bugs.webkit.org/show_bug.cgi?id=146597

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig: Enabled CLANG_WARN_UNREACHABLE_CODE, GCC_NO_COMMON_BLOCKS,
        and ENABLE_STRICT_OBJC_MSGSEND. Removed GCC_MODEL_TUNING.

        * bmalloc.xcodeproj/project.pbxproj: Updated LastUpgradeCheck.

2015-07-02  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Shrink the super chunk size
        https://bugs.webkit.org/show_bug.cgi?id=146519

        Reviewed by Andreas Kling.

        We have lots of reports of crashing due to failed VM allocation on iOS.
        (This VM limit on iOS is usually 1GB-2GB, and has been as low as 256MB.)

        Shrink the super chunk size in case fragmentation is the reason for
        VM allocation failure.

        This has the downside that >= 2MB allocations will now be super slow,
        but they are also super rare (as in never on most websites), so this
        is probably an OK tradeoff.

        * bmalloc/Sizes.h:

2015-07-01  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: realloc of an XLarge range can unmap adjacent VM ranges
        https://bugs.webkit.org/show_bug.cgi?id=146535

        Reviewed by Anders Carlsson.

        This bug causes a crash when running fast/css/large-list-of-rules-crash.html
        with the fix applied for https://bugs.webkit.org/show_bug.cgi?id=146519.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::reallocate): Start at object + newSize since starting
        at object + oldSize means deleting the adjacent VM range.

2015-05-26  Geoffrey Garen  <ggaren@apple.com>

        Integer overflow in XLarge allocation (due to unchecked roundUpToMultipleOf)
        https://bugs.webkit.org/show_bug.cgi?id=145385

        Reviewed by Andreas Kling.

        Added some checking to verify that round-up operations will not overflow
        a size_t.

        The simplest way to do this was to introduce a notion of xLargeMax, like
        we have for smallMax, mediumMax, and largeMax. It's a bit surprising at
        first to think that there is an xLargeMax, since xLarge is what we use
        to handle the biggest things. But computers have limits, so it makes sense.

        FWIW, TCMalloc used to have an xLargeMax too, which it called kMaxValidPages.

        No test because this bug was found by code inspection and I don't know
        of a practical way to convince WebKit to make an allocation this large.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::tryAllocate):
        (bmalloc::Allocator::allocate):
        (bmalloc::Allocator::reallocate):
        (bmalloc::Allocator::allocateSlowCase): Check against xLargeMax to avoid
        overflow when rounding up.

        * bmalloc/BAssert.h: Added support for explicit crashing.

        * bmalloc/Sizes.h:

2015-05-26  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/21104551> Update build settings

        Reviewed by Anders Carlsson.

        * Configurations/DebugRelease.xcconfig:

2015-05-23  Dan Bernstein  <mitz@apple.com>

        Remove unused definitions of WEBKIT_VERSION_MIN_REQUIRED
        https://bugs.webkit.org/show_bug.cgi?id=145345

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig: Also changed to use $(inherited).

2015-05-07  Geoffrey Garen  <ggaren@apple.com>

        Release assert in com.apple.WebKit.WebContent under JavaScriptCore: JSC::JSONProtoFuncStringify
        https://bugs.webkit.org/show_bug.cgi?id=144758

        Reviewed by Andreas Kling.

        This was an out-of-memory error when trying to shrink a string builder.
        bmalloc was missing the optimization that allowed realloc() to shrink
        without copying. So, let's add it.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::reallocate): Added Large and XLarge cases for
        shrinking without copying. This isn't possible for small and medium
        objects, and probably not very profitable, either.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::findXLarge):
        (bmalloc::Heap::deallocateXLarge):
        * bmalloc/Heap.h: Refactored this code to return a reference to an
        XLarge range. This makes the code reusable, and also makes it easier
        for realloc() to update metadata.

        * bmalloc/LargeObject.h:
        (bmalloc::LargeObject::split): Allow allocated objects to split because
        that's what realloc() wants to do, and there's nothing intrinsically
        wrong with it.

2015-05-07  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/19317140> [Xcode] Remove usage of AspenFamily.xcconfig in Source/
        https://bugs.webkit.org/show_bug.cgi?id=144727

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig: Dont’s include AspenFamily.xcconfig, and define
        INSTALL_PATH_PREFIX for the iOS 8.x Simulator.

2015-04-01  Alex Christensen  <achristensen@webkit.org>

        Progress towards CMake on Windows and Mac.
        https://bugs.webkit.org/show_bug.cgi?id=143293

        Reviewed by Filip Pizlo.

        * bmalloc/BAssert.h:
        Removed ellipses from macros to appease Visual Studio.

2015-03-13  Alex Christensen  <achristensen@webkit.org>

        Progress towards CMake on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=142680

        Reviewed by Gyuyoung Kim.

        * CMakeLists.txt:
        * PlatformMac.cmake:
        Added Zone.cpp to Mac CMake builds.

2015-03-12  Geoffrey Garen  <ggaren@apple.com>

        Assertion failure in bmalloc::LargeObject::validateSelf on Mavericks Debug layout test bot
        https://bugs.webkit.org/show_bug.cgi?id=142642

        Reviewed by Michael Saboff.

        The typical backtrace to this crash shows the main thread trying to
        realloc a large string while a DFG compiler thread tries to
        free a large vector buffer.

        I believe that this is a race condition -- at least in debug builds --
        since the main thread will try to validate its object's neighbors
        without holding a lock, even though those neighbors might be in the
        midst of changing.

        In general, there may be sneaky times when it is valid to look at an
        object's metadata without holding the heap lock, but it is best not to
        do so unless we have a really really good reason to.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::reallocate): Take a lock before reading the metadata
        for this object, since we generally require any access to shared heap
        metadata to take a lock.

2015-03-10  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: tryFastMalloc shouldn't crash
        https://bugs.webkit.org/show_bug.cgi?id=142443

        Reviewed by Sam Weinig.

        Rolling back in r181307 with a check for whether bmalloc is enabled, to
        avoid crashes when running with ASan and GuardMalloc.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::tryAllocate):
        * bmalloc/Allocator.h:
        * bmalloc/Cache.cpp:
        (bmalloc::Cache::tryAllocateSlowCaseNullCache):
        * bmalloc/Cache.h:
        (bmalloc::Cache::tryAllocate):
        * bmalloc/Heap.cpp:
        (bmalloc::Heap::allocateXLarge):
        (bmalloc::Heap::tryAllocateXLarge):
        * bmalloc/Heap.h:
        * bmalloc/VMAllocate.h:
        (bmalloc::tryVMAllocate):
        (bmalloc::vmAllocate):
        * bmalloc/bmalloc.h:
        (bmalloc::api::tryMalloc):
        (bmalloc::api::realloc):
        (bmalloc::api::free):

2015-03-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r181307.
        https://bugs.webkit.org/show_bug.cgi?id=142525

        Broke ASan tests (Requested by ap on #webkit).

        Reverted changeset:

        "bmalloc: tryFastMalloc shouldn't crash"
        https://bugs.webkit.org/show_bug.cgi?id=142443
        http://trac.webkit.org/changeset/181307

2015-03-09  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: tryFastMalloc shouldn't crash
        https://bugs.webkit.org/show_bug.cgi?id=142443

        Reviewed by Darin Adler.

        Added support for tryMalloc.

        We assume that non-x-large allocations always succeed, and we crash
        otherwise, since normal allocation failure will just cause the next
        non-try allocation or internal metadata allocation to fail, and it's
        hard and not really useful to keep limping along after that. But
        extra-large allocations can meaningfully fail, and we can recover.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::allocateXLarge):
        (bmalloc::Heap::tryAllocateXLarge):
        * bmalloc/Heap.h: Added support for non-crashy x-large allocation.

        * bmalloc/VMAllocate.h:
        (bmalloc::tryVMAllocate):
        (bmalloc::vmAllocate): Added support for non-crashy VM allocation.

        * bmalloc/bmalloc.h:
        (bmalloc::api::tryMalloc):
        (bmalloc::api::realloc):
        (bmalloc::api::free): Tried to clarify our behavior with some comments.
        Unfortunately, calling what we do "malloc" is still not quite right, since
        malloc returns null on failure and we don't.

2015-03-03  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Don't branch when setting the owner of a large object
        https://bugs.webkit.org/show_bug.cgi?id=142241

        Reviewed by Andreas Kling.

        * bmalloc/BoundaryTag.h:
        (bmalloc::BoundaryTag::owner):
        (bmalloc::BoundaryTag::setOwner):

2015-03-03  Geoffrey Garen  <ggaren@apple.com>

        bmalloc should implement malloc introspection (to stop false-positive leaks when MallocStackLogging is off)
        https://bugs.webkit.org/show_bug.cgi?id=141802

        Reviewed by Andreas Kling.

        Re-enabled this feature on iOS, now that the iOS crash should be fixed.

        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::grow):
        * bmalloc/VMHeap.h:

2015-03-03  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Added missing features to the malloc zone introspection API
        https://bugs.webkit.org/show_bug.cgi?id=142235

        Reviewed by Andreas Kling.

        This should fix the crash we saw on the iOS PLT bot
        (c.f. http://trac.webkit.org/changeset/180604).

        * bmalloc/Zone.cpp:
        (bmalloc::good_size):
        (bmalloc::check):
        (bmalloc::print):
        (bmalloc::log):
        (bmalloc::force_lock):
        (bmalloc::force_unlock):
        (bmalloc::statistics):
        (bmalloc::size):
        (bmalloc::enumerator): Provide all of these functions since they are called
        indiscriminately on all zones.

        (bmalloc::Zone::Zone):
        (bmalloc::Zone::size): Deleted.
        (bmalloc::Zone::enumerator): Deleted. Moved these functions out of the
        Zone class since they can stand alone.

        * bmalloc/Zone.h:

2015-03-03  Geoffrey Garen  <ggaren@apple.com>

        bmalloc should implement malloc introspection (to stop false-positive leaks when MallocStackLogging is off)
        https://bugs.webkit.org/show_bug.cgi?id=141802

        Reviewed by Andreas Kling.

        Rolling back in but disabled on iOS until I can debug why the iOS PLT crashes.

        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::grow):
        * bmalloc/VMHeap.h:
        * bmalloc/Zone.cpp:
        (bmalloc::Zone::size):
        (bmalloc::Zone::Zone):
        * bmalloc/Zone.h:

2015-03-03  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Miscellaneous cleanup
        https://bugs.webkit.org/show_bug.cgi?id=142231

        Reviewed by Andreas Kling.

        No performance change -- maybe a tiny reduction in memory use.

        * bmalloc/Heap.cpp: Moved the sleep function into StaticMutex, since
        it's a helper for working with mutexes.

        (bmalloc::Heap::scavenge): Make sure to wait before we start any
        scavenging, since individual scavenging functions now always scavenge
        at least one page before waiting themselves.

        (bmalloc::Heap::scavengeSmallPages):
        (bmalloc::Heap::scavengeMediumPages):
        (bmalloc::Heap::scavengeLargeObjects): Use the new wait helper to
        simplify this code. Also, we now require our caller to wait until at
        least one deallocation is desirable. This simplifies our loop.

        (bmalloc::Heap::allocateSmallPage):
        (bmalloc::Heap::allocateMediumPage):
        (bmalloc::Heap::allocateXLarge):
        (bmalloc::Heap::allocateLarge): Don't freak out any time the heap does
        an allocation. Only consider the heap to be growing if it actually needs
        to allocate new VM. This allows us to shrink the heap back down from a
        high water mark more reliably even if heap activity continues.

        (bmalloc::sleep): Deleted.
        (bmalloc::Heap::scavengeLargeRanges): Renamed to match our use of
        "LargeObject".

        * bmalloc/Heap.h:

        * bmalloc/LargeObject.h:
        (bmalloc::LargeObject::operator bool): Added to simplify a while loop.

        * bmalloc/StaticMutex.h:
        (bmalloc::sleep):
        (bmalloc::waitUntilFalse): New helper for waiting until a condition
        becomes reliably false.

        * bmalloc/Vector.h:
        (bmalloc::Vector<T>::~Vector): Oops! Don't deallocate the null pointer.
        We don't actually run any Vector destructors, but an iteration of this
        patch did, and then crashed. So, let's fix that.

2015-03-02  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Eagerly remove allocated objects from the free list
        https://bugs.webkit.org/show_bug.cgi?id=142194

        Reviewed by Andreas Kling.

        This reduces the pressure to garbage collect the free list.

        Might be a 1% speedup on MallocBench.

        * bmalloc/FreeList.cpp: Put this comment at the top of the file instead
        of repeating it inside of each function. Tried to clarify the details.

        (bmalloc::FreeList::takeGreedy): Matched the other iteration code in this
        file for consistency -- even though either direction works fine in this
        function.

        (bmalloc::FreeList::take): Change to iterate from low to high so that we
        can maintain an index into the vector that is not disturbed even if we
        pop from the middle (which invalidates the last index in the vector).

        Decrement i when popping from the middle to make sure that we don't
        skip the next item after popping.

        (bmalloc::FreeList::removeInvalidAndDuplicateEntries): Ditto.

2015-02-27  Ryosuke Niwa  <rniwa@webkit.org>

        Fixed a typo in the previous commit.

        * bmalloc/BoundaryTag.h:
        (bmalloc::BoundaryTag::setOwner):

2015-02-27  Ryosuke Niwa  <rniwa@webkit.org>

        EFL build fix after r180797.

        * bmalloc/BoundaryTag.h:
        (bmalloc::BoundaryTag::owner):
        (bmalloc::BoundaryTag::setOwner):

2015-02-27  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Pathological madvise churn on the free(malloc(x)) benchmark
        https://bugs.webkit.org/show_bug.cgi?id=142058

        Reviewed by Andreas Kling.

        The churn was caused by repeatedly splitting an object with physical
        pages from an object without, and then merging them back together again.
        The merge would conservatively forget that we had physical pages, forcing
        a new call to madvise on the next allocation.

        This patch more strictly segregates objects in the heap from objects in
        the VM heap, with these changes:

        (1) Objects in the heap are not allowed to merge with objects in the VM
        heap, and vice versa -- since that would erase our precise knowledge of
        which physical pages had been allocated.

        (2) The VM heap is exclusively responsible for allocating and deallocating
        physical pages.

        (3) The heap free list must consider entries for objects that are in the
        VM heap to be invalid, and vice versa. (This condition can arise
        because the free list does not eagerly remove items.)

        With these changes, we can know that any valid object in the heap's free
        list already has physical pages, and does not need to call madvise.

        Note that the VM heap -- as before -- might sometimes contain ranges
        or pieces of ranges that have physical pages, since we allow splitting
        of ranges at granularities smaller than the VM page size. These ranges
        can eventually merge with ranges in the heap during scavenging.

        * bmalloc.xcodeproj/project.pbxproj:

        * bmalloc/BoundaryTag.h:
        (bmalloc::BoundaryTag::owner):
        (bmalloc::BoundaryTag::setOwner):
        (bmalloc::BoundaryTag::initSentinel):
        (bmalloc::BoundaryTag::hasPhysicalPages): Deleted.
        (bmalloc::BoundaryTag::setHasPhysicalPages): Deleted. Replaced the concept
        of "has physical pages" with a bit indicating which heap owns the large
        object. This is a more precise concept, since the old bit was really a
        Yes / Maybe bit.

        * bmalloc/Deallocator.cpp:

        * bmalloc/FreeList.cpp: Adopt
        (bmalloc::FreeList::takeGreedy):
        (bmalloc::FreeList::take):
        (bmalloc::FreeList::removeInvalidAndDuplicateEntries):
        * bmalloc/FreeList.h:
        (bmalloc::FreeList::push): Added API for considering the owner when
        deciding if a free list entry is valid.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::Heap): Adopt new API.

        (bmalloc::Heap::scavengeLargeRanges): Scavenge all ranges with no minimum,
        since some ranges might be able to merge with ranges in the VM heap, and
        they won't be allowed to until we scavenge them.

        (bmalloc::Heap::allocateSmallPage):
        (bmalloc::Heap::allocateMediumPage):
        (bmalloc::Heap::allocateLarge): New VM heap API makes this function
        simpler, since we always get back physical pages now.

        * bmalloc/Heap.h:
        * bmalloc/LargeObject.h:
        (bmalloc::LargeObject::end):
        (bmalloc::LargeObject::owner):
        (bmalloc::LargeObject::setOwner):
        (bmalloc::LargeObject::isValidAndFree):
        (bmalloc::LargeObject::merge): Do not merge objects across heaps since
        that causes madvise churn.
        (bmalloc::LargeObject::validateSelf):
        (bmalloc::LargeObject::init):
        (bmalloc::LargeObject::hasPhysicalPages): Deleted.
        (bmalloc::LargeObject::setHasPhysicalPages): Deleted. Propogate the Owner API.

        * bmalloc/Owner.h: Added.

        * bmalloc/SegregatedFreeList.cpp:
        (bmalloc::SegregatedFreeList::SegregatedFreeList):
        (bmalloc::SegregatedFreeList::insert):
        (bmalloc::SegregatedFreeList::takeGreedy):
        (bmalloc::SegregatedFreeList::take):
        * bmalloc/SegregatedFreeList.h: Propogate the owner API.

        * bmalloc/VMAllocate.h:
        (bmalloc::vmDeallocatePhysicalPagesSloppy):
        (bmalloc::vmAllocatePhysicalPagesSloppy): Clarified these functions and
        removed an edge case.

        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::VMHeap):
        * bmalloc/VMHeap.h:
        (bmalloc::VMHeap::allocateSmallPage):
        (bmalloc::VMHeap::allocateMediumPage):
        (bmalloc::VMHeap::allocateLargeObject):
        (bmalloc::VMHeap::deallocateLargeObject): Be sure to give each object
        a new chance to merge, since it might have been prohibited from merging
        before by virtue of not being in the VM heap.

        (bmalloc::VMHeap::allocateLargeRange): Deleted.
        (bmalloc::VMHeap::deallocateLargeRange): Deleted.

2015-02-26  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Large object free list can grow infinitely
        https://bugs.webkit.org/show_bug.cgi?id=142055

        Reviewed by Andreas Kling.

        By design, we don't eagerly remove large objects from the free list.
        This creates two simple pathologies:

            (1) If you free and then allocate the same object repeatedly, it will
            duplicate itself in the free list repeatedly. Since it is never
            invalid at the time of allocation, it will never be removed.

            (2) If you split and then merge the same object repeatedly, it will
            duplicate its split sibling in the free list repeatedly. If its
            sibling is in a separate free list size class, it will never be
            consulted at the time of allocation, so it will never be removed.

        So, a simple "while (1) { free(malloc(x)); }" causes infinite memory
        use in the free list.

        The solution in this patch is a simple helper to remove garbage from the
        free list if it grows too large. This pathology is not common, so the
        cost is OK.

        Long-term, perhaps we should rethink the laziness of these free lists.

        * bmalloc/BoundaryTag.h:
        (bmalloc::BoundaryTag::isMarked):
        (bmalloc::BoundaryTag::setMarked): New bit, used by free list GC.

        * bmalloc/FreeList.cpp:
        (bmalloc::FreeList::removeInvalidAndDuplicateEntries): The GC algorithm.

        * bmalloc/FreeList.h:
        (bmalloc::FreeList::FreeList):
        (bmalloc::FreeList::push): Invoke the GC if we're getting huge.

        * bmalloc/LargeObject.h:
        (bmalloc::LargeObject::isMarked):
        (bmalloc::LargeObject::setMarked):
        (bmalloc::LargeObject::validateSelf): Expose the new bit.

        * bmalloc/Sizes.h: New constant to control GC frequency.

2015-02-26  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r180693.

        * CMakeLists.txt:

2015-02-26  Geoffrey Garen  <ggaren@apple.com>

        Try to fix the Mac build.

        Unreviewed.

        * bmalloc.xcodeproj/project.pbxproj: Make FreeList.h available.

2015-02-26  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Refactored SegregatedFreeList and BoundaryTag::init
        https://bugs.webkit.org/show_bug.cgi?id=142049

        Reviewed by Anders Carlsson.

        Split out a FreeList class from SegregatedFreeList. This will make it
        easier to add behaviors on free list insertion and removal -- and it's
        probably how I should have designed things at the start.

        Moved BoundaryTag::init into LargeObject, since all the related logic
        lives in LargeObject now too, and this allows us to remove BoundaryTagInlines.h.

        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/BoundaryTagInlines.h: Removed.
        * bmalloc/FreeList.cpp: Copied from Source/bmalloc/bmalloc/SegregatedFreeList.cpp.
        (bmalloc::FreeList::takeGreedy):
        (bmalloc::FreeList::take):
        (bmalloc::SegregatedFreeList::SegregatedFreeList): Deleted.
        (bmalloc::SegregatedFreeList::insert): Deleted.
        (bmalloc::SegregatedFreeList::takeGreedy): Deleted.
        (bmalloc::SegregatedFreeList::take): Deleted.
        * bmalloc/FreeList.h: Copied from Source/bmalloc/bmalloc/SegregatedFreeList.h.
        (bmalloc::FreeList::push):
        * bmalloc/LargeObject.h:
        (bmalloc::LargeObject::init):
        * bmalloc/SegregatedFreeList.cpp:
        (bmalloc::SegregatedFreeList::SegregatedFreeList):
        (bmalloc::SegregatedFreeList::insert):
        (bmalloc::SegregatedFreeList::takeGreedy):
        (bmalloc::SegregatedFreeList::take):
        * bmalloc/SegregatedFreeList.h:
        * bmalloc/Sizes.h:
        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::grow):

2015-02-26  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: free up a bit in BoundaryTag
        https://bugs.webkit.org/show_bug.cgi?id=142048

        Reviewed by Brady Eidson.

        We were wasting a bit by accident, and I need one now.

        * bmalloc/Algorithm.h:
        (bmalloc::rightShift): Deleted. Not needed, now that I've simplified
        the math.

        * bmalloc/BoundaryTag.h: Since each boundary tag bucket is 1024 bytes
        long, the maximum offset into a bucket is 1023.

        You need 5 bits to count up to 1024, but only 4 to count up to 1023.
        
        Math is hard.

        (bmalloc::BoundaryTag::compactBegin): Switched to division because it
        is simpler, and easier to match up with our ASSERT. The compiler will
        turn division by constant power of two into a shift for us.

        (bmalloc::BoundaryTag::setRange): Added an ASSERT for compactBegin
        because we do encode it, so we should ASSERT that encoding did not
        lose information.

        * bmalloc/Sizes.h: Shifting is no longer used since we use division
        instead.

2015-02-24  Stephanie Lewis  <slewis@apple.com>

        Rolling out http://trac.webkit.org/changeset/180430 as it causes the PLT to crash.
        <rdar://problem/19948015>

        Unreviewed.

        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::grow):
        * bmalloc/VMHeap.h:
        * bmalloc/Zone.cpp:
        (bmalloc::Zone::Zone):
        (bmalloc::Zone::size): Deleted.
        * bmalloc/Zone.h:

2015-02-24  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Added a little more abstraction for large objects
        https://bugs.webkit.org/show_bug.cgi?id=141978

        Reviewed by Sam Weinig.

        Previously, each client needed to manage the boundary tags of
        a large object using free functions. This patch introduces a LargeObject
        class that does things a little more automatically.

        * bmalloc.xcodeproj/project.pbxproj:

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::reallocate): Use the new LargeObject class.

        * bmalloc/BeginTag.h:
        (bmalloc::BeginTag::isInFreeList): Deleted. Moved this logic into the
        LargeObject class.

        * bmalloc/BoundaryTag.h:
        (bmalloc::BoundaryTag::isSentinel):
        (bmalloc::BoundaryTag::compactBegin):
        (bmalloc::BoundaryTag::setRange):
        (bmalloc::BoundaryTag::initSentinel): Added an explicit API for sentinels,
        which we used to create and test for implicitly.

        * bmalloc/BoundaryTagInlines.h:
        (bmalloc::BoundaryTag::init):
        (bmalloc::validate): Deleted.
        (bmalloc::validatePrev): Deleted.
        (bmalloc::validateNext): Deleted.
        (bmalloc::BoundaryTag::mergeLeft): Deleted.
        (bmalloc::BoundaryTag::mergeRight): Deleted.
        (bmalloc::BoundaryTag::merge): Deleted.
        (bmalloc::BoundaryTag::deallocate): Deleted.
        (bmalloc::BoundaryTag::split): Deleted.
        (bmalloc::BoundaryTag::allocate): Deleted. Moved this logic into the
        LargeObject class.

        * bmalloc/EndTag.h:
        (bmalloc::EndTag::init):
        (bmalloc::EndTag::operator=): Deleted. Re-reading this code, I found
        special behavior in the assignment operator to be a surprising API.
        So, I replaced the assignment operation with an explicit initializing
        function.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::scavengeLargeRanges):
        (bmalloc::Heap::allocateXLarge):
        (bmalloc::Heap::findXLarge):
        (bmalloc::Heap::deallocateXLarge):
        (bmalloc::Heap::allocateLarge):
        (bmalloc::Heap::deallocateLarge):
        * bmalloc/Heap.h: No behavior changes here -- just adopting the
        LargeObject interface.

        * bmalloc/LargeObject.h: Added.
        (bmalloc::LargeObject::operator!):
        (bmalloc::LargeObject::begin):
        (bmalloc::LargeObject::size):
        (bmalloc::LargeObject::range):
        (bmalloc::LargeObject::LargeObject):
        (bmalloc::LargeObject::setFree):
        (bmalloc::LargeObject::isFree):
        (bmalloc::LargeObject::hasPhysicalPages):
        (bmalloc::LargeObject::setHasPhysicalPages):
        (bmalloc::LargeObject::isValidAndFree):
        (bmalloc::LargeObject::merge):
        (bmalloc::LargeObject::split):
        (bmalloc::LargeObject::validateSelf):
        (bmalloc::LargeObject::validate): Moved this code into a class, out of
        BoundaryTag free functions.

        New to the class are these features:

            (1) Every reference to an object is validated upon creation and use.

            (2) There's an explicit API for "This is a reference to an object
            that might be stale (the DoNotValidate API)".

            (3) The begin and end tags are kept in sync automatically.

        * bmalloc/SegregatedFreeList.cpp:
        (bmalloc::SegregatedFreeList::insert):
        (bmalloc::SegregatedFreeList::takeGreedy):
        (bmalloc::SegregatedFreeList::take):
        * bmalloc/SegregatedFreeList.h: Adopt the LargeObject interface.

        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::grow):
        * bmalloc/VMHeap.h:
        (bmalloc::VMHeap::allocateLargeRange):
        (bmalloc::VMHeap::deallocateLargeRange): Adopt the LargeObject interface.

2015-02-20  Geoffrey Garen  <ggaren@apple.com>

        bmalloc should implement malloc introspection (to stop false-positive leaks when MallocStackLogging is off)
        https://bugs.webkit.org/show_bug.cgi?id=141802

        Reviewed by Andreas Kling.

        Rolling back in with a fix for a crash seen while using GuardMalloc.

        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::grow):
        * bmalloc/VMHeap.h:
        * bmalloc/Zone.cpp: Re-land the old patch.

        (bmalloc::Zone::size): Be sure to implement the size() function since
        it's accessible indirectly via the malloc_zone_from_ptr public API --
        and GuardMalloc calls it all the time.

        (bmalloc::Zone::Zone):
        * bmalloc/Zone.h: Re-land the old patch.

2015-02-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r180363.
        https://bugs.webkit.org/show_bug.cgi?id=141814

        Caused >50 crashes when running LayoutTests in GuardMalloc or
        ASAN modes. (Requested by jernoble on #webkit).

        Reverted changeset:

        "bmalloc should implement malloc introspection (to stop false-
        positive leaks when MallocStackLogging is off)"
        https://bugs.webkit.org/show_bug.cgi?id=141802
        http://trac.webkit.org/changeset/180363

2015-02-19  Geoffrey Garen  <ggaren@apple.com>

        bmalloc should implement malloc introspection (to stop false-positive leaks when MallocStackLogging is off)
        https://bugs.webkit.org/show_bug.cgi?id=141802

        Reviewed by Andreas Kling.

        Fixed a last-minute type.

        The macro is OS, not PLATFORM.

        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::grow):
        * bmalloc/VMHeap.h:
        * bmalloc/Zone.h:

2015-02-19  Geoffrey Garen  <ggaren@apple.com>

        bmalloc should implement malloc introspection (to stop false-positive leaks when MallocStackLogging is off)
        https://bugs.webkit.org/show_bug.cgi?id=141802

        Reviewed by Andreas Kling.

        This patch does the bare minimum to stop false positive leaks from
        being reported by the Darwin leaks tool. We register each super chunk
        as a single object, and then request that the leaks tool scan it.

        * bmalloc.xcodeproj/project.pbxproj: Added an abstraction for the malloc
        zone introspection API.

        * bmalloc/Algorithm.h: Missing #include.

        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::grow):
        * bmalloc/VMHeap.h: Adopt the new abstraction.

        * bmalloc/Zone.cpp: Added.
        (bmalloc::remoteRead): Helper for reading an object out of another process.
        (bmalloc::Zone::enumerator):
        (bmalloc::Zone::Zone): Register a malloc zone so that we will participate
        in introspection.

        * bmalloc/Zone.h: Added.
        (bmalloc::Zone::superChunks):
        (bmalloc::Zone::addSuperChunk): Use a non-dynamically-allocated vector
        since our dynamic allocations will not be scanned by leaks since they
        will have the malloc VM tag.

2015-02-18  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: VMHeap should keep a record of all of its VM ranges (for malloc introspection)
        https://bugs.webkit.org/show_bug.cgi?id=141759

        Reviewed by Andreas Kling.

        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/SuperChunk.h: Added.
        (bmalloc::SuperChunk::create):
        (bmalloc::SuperChunk::SuperChunk):
        (bmalloc::SuperChunk::smallChunk):
        (bmalloc::SuperChunk::mediumChunk):
        (bmalloc::SuperChunk::largeChunk): Factored out super chunk creation
        into a separate class, for clarity and type safety.

        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::grow):
        (bmalloc::VMHeap::allocateSuperChunk): Renamed "allocateSuperChunk" to
        "grow" because Andreas found "allocateSuperChunk" to be unclear.

        * bmalloc/VMHeap.h: Track all our VM ranges. We will use this information
        for malloc introspection.

        (bmalloc::VMHeap::allocateSmallPage):
        (bmalloc::VMHeap::allocateMediumPage):
        (bmalloc::VMHeap::allocateLargeRange): Updated for renames.

2015-02-18  Zan Dobersek  <zdobersek@igalia.com>

        Build bmalloc through CMake as a static library. It's then linked either
        into the WTF library (if built as a shared library) or into the JSC and
        WebKit2 libraries. There's no need to build it as a standalone shared library.

        Rubber-stamped by Carlos Garcia Campos.

        * CMakeLists.txt:

2015-02-13  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [BMalloc] Add a FIXME comment for memory alignas
        https://bugs.webkit.org/show_bug.cgi?id=141556

        Reviewed by Csaba Osztrogonác.

        * bmalloc/Chunk.h: Add a FIXME comment.
        * bmalloc/LargeChunk.h: ditto.

2015-02-11  Csaba Osztrogonác  <ossy@webkit.org>

        bmalloc buildfix on 32 bit Linux (x86/ARM)
        https://bugs.webkit.org/show_bug.cgi?id=141472

        Reviewed by Gyuyoung Kim.

        * bmalloc/Algorithm.h:
        (bmalloc::roundUpToMultipleOf):
        * bmalloc/FixedVector.h:
        (bmalloc::FixedVector::clear):
        * bmalloc/Sizes.h:
        (bmalloc::Sizes::sizeClass):

2015-02-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL][GTK] Use bmalloc instead of tcmalloc
        https://bugs.webkit.org/show_bug.cgi?id=140162

        Reviewed by Carlos Garcia Campos.

        Support to use bmalloc on EFL and GTK ports.

        * CMakeLists.txt: Added.
        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::allocate):
            Fix unused return value caused by posix_memalign().
        * bmalloc/AsyncTask.h:
        * bmalloc/BoundaryTag.h:
        (bmalloc::BoundaryTag::clear):
        * bmalloc/Chunk.h:
            Change Traits::Page with Traits::PageType in order to fix
            -fpermitive build error on EFL and GTK port. 
        * bmalloc/EndTag.h:
        (bmalloc::EndTag::operator=):
        * bmalloc/Line.h: ditto.
        * bmalloc/MediumTraits.h:
        * bmalloc/Page.h: ditto.
        * bmalloc/PerThread.h:
            EFL port doesn't support __has_include definition yet.
            Define HAVE_PTHREAD_MACHDEP_H according to check if __has_include is supported.
        * bmalloc/SmallTraits.h: ditto.
        * bmalloc/VMAllocate.h:
        (bmalloc::vmDeallocatePhysicalPages):
        (bmalloc::vmAllocatePhysicalPages):
        * bmalloc/Vector.h:
        (bmalloc::Vector<T>::push):
        (bmalloc::Vector<T>::reallocateBuffer):

2015-01-31  Sam Weinig  <sam@webkit.org>

        Remove even more Mountain Lion support
        https://bugs.webkit.org/show_bug.cgi?id=141124

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2015-01-30  Geoffrey Garen  <ggaren@apple.com>

        GC marking threads should clear malloc caches
        https://bugs.webkit.org/show_bug.cgi?id=141097

        Reviewed by Andreas Kling.

        Split the scavenging API into per-thread vs global, so that you can
        request to scavenge your own thread without scavenging the whole heap.

        * bmalloc/Cache.cpp:
        (bmalloc::Cache::scavenge):
        * bmalloc/bmalloc.h:
        (bmalloc::api::scavengeThisThread):
        (bmalloc::api::scavenge):

2015-01-28  Dana Burkart  <dburkart@apple.com>

        Move ASan flag settings from DebugRelease.xcconfig to Base.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=136765

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2015-01-21  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: support aligned allocation
        https://bugs.webkit.org/show_bug.cgi?id=140732

        Reviewed by Andreas Kling.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::allocate): New function for aligned allocation.

        Small and medium requests just allocate and free until they find an
        aligned pointer. This is slightly inefficient in the worst case, but
        still constant-time with little-to-no space overhead.

        Large requests use a new API that requires the client to specify both
        its ideal size and alignment, and the worst-case size you would have to
        allocate in order to produce some interior pointer of the requested size
        and alignment. We put the burden of this calculation on the client
        because it simplifies things if we guarantee that allocation won't fail.

        XLarge requests are easy: we just forward them to vmAllocate, which
        already supported aligned requests.

        * bmalloc/BoundaryTag.h:
        * bmalloc/BoundaryTagInlines.h:
        (bmalloc::BoundaryTag::mergeLeft):
        (bmalloc::BoundaryTag::mergeRight):
        (bmalloc::BoundaryTag::merge):
        (bmalloc::BoundaryTag::deallocate):
        (bmalloc::BoundaryTag::split):
        (bmalloc::BoundaryTag::allocate): No behavior change here. I just
        refactored the interface to remove some reference out parameters in
        order to clarify what changes and what doesn't.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::allocateXLarge): Added an alignment API.

        (bmalloc::Heap::allocateLarge):
        * bmalloc/Heap.h: Added an alignment API. I split out allocateLarge into
        a few variants, so aligned and unaligned allocation could share some code.

        * bmalloc/SegregatedFreeList.cpp:
        (bmalloc::SegregatedFreeList::take):
        * bmalloc/SegregatedFreeList.h: Changed to use a separate, explicit API
        for aligned allocation. It turns out that the aligned path is pretty
        different, since it ends up searching for two potential ways to satisfy
        an allocation: either large enough and aligned, or large enough to split
        into something not aligned and something large enough and aligned.

        * bmalloc/VMAllocate.h:
        (bmalloc::vmAllocate): Switched alignment to come before size because
        that's how the memalign API specifies it.

        * bmalloc/VMHeap.h:
        (bmalloc::VMHeap::allocateLargeRange): Added an alignment API.

2015-01-20  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: a little bit of cleanup
        https://bugs.webkit.org/show_bug.cgi?id=140687

        Reviewed by Anders Carlsson.

        * bmalloc/Algorithm.h:
        (bmalloc::isPowerOfTwo): Added a check for 0, since 0 would break a lot
        of code.

        * bmalloc/BoundaryTag.h:
        * bmalloc/BoundaryTagInlines.h:
        (bmalloc::BoundaryTag::mergeLeft):
        (bmalloc::BoundaryTag::mergeRight):
        (bmalloc::BoundaryTag::merge):
        (bmalloc::BoundaryTag::deallocate):
        (bmalloc::BoundaryTag::split):
        (bmalloc::BoundaryTag::allocate):
        (bmalloc::BoundaryTag::mergeLargeLeft): Deleted.
        (bmalloc::BoundaryTag::mergeLargeRight): Deleted.
        (bmalloc::BoundaryTag::mergeLarge): Deleted.
        (bmalloc::BoundaryTag::splitLarge): Deleted. Removed the word "Large"
        from all these functions, since boundary tags always pertain to large
        objects, and putting the word "Large" everywhere wasn't helping to
        explain that.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::allocateXLarge):
        (bmalloc::Heap::findXLarge):
        (bmalloc::Heap::deallocateXLarge):
        * bmalloc/Heap.h:
        * bmalloc/VMHeap.h:
        (bmalloc::VMHeap::allocateXLarge): Deleted.
        (bmalloc::VMHeap::findXLarge): Deleted.
        (bmalloc::VMHeap::deallocateXLarge): Deleted. Moved XLarge allocation
        from VMHeap to Heap. Since the purpose of the VMHeap is to cache VM
        ranges, and the VMHeap never caches any XLarge ranges, it doesn't
        really make sense for the VMHeap to be involved.

2015-01-16  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: refactored XLarge allocation for better alignment
        https://bugs.webkit.org/show_bug.cgi?id=140582

        Reviewed by Andreas Kling.

        XLarge objects used to be Large objects with an extra bit of metadata
        that said "actually, I'm not large -- I'm extra large".

        The metadata header in an XLarge allocation made it impossible for the
        XLarge object to honor a very large alignment request.

        The solution is to stop using a metadata header for XLarge objects, and
        instead to store explicit metadata on the side.

        This is a bit less astonishing, which is also nice.

        Finding XLarge metadata is now a linear search. That's probably OK, since
        it was always so in TCMalloc, and the usual number of XLarge allocations
        in a process is 0.

        This design makes it possible for the heap to cache XLarge allocations
        with and/or without physical pages. I haven't actually done that yet
        because the tradeoffs are subtle, so I don't want to do anything without
        a motivating test case.

        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::reallocate): Removed the concept of an XLargeChunk,
        since an XLarge allocation is now just a naked buffer without a header.

        (bmalloc::Allocator::allocateXLarge): Added an explicit qualifier for
        XLarge alignment, since XLargeChunk won't give this to us implicitly
        anymore.

        * bmalloc/BoundaryTag.h:
        (bmalloc::BoundaryTag::setRange):
        (bmalloc::BoundaryTag::isXLarge): Deleted.
        (bmalloc::BoundaryTag::setXLarge): Deleted.
        * bmalloc/BoundaryTagInlines.h:
        (bmalloc::validate):
        (bmalloc::BoundaryTag::deallocate): Removed the XLarge hacks from Large allocations.

        * bmalloc/Deallocator.cpp:
        (bmalloc::Deallocator::deallocateXLarge):
        (bmalloc::Deallocator::deallocateSlowCase):
        * bmalloc/Heap.cpp:
        (bmalloc::Heap::findXLarge):
        (bmalloc::Heap::allocateXLarge):
        (bmalloc::Heap::deallocateXLarge):
        * bmalloc/Heap.h: Updated for interface changes.

        * bmalloc/ObjectType.cpp:
        (bmalloc::objectType):
        * bmalloc/ObjectType.h:
        (bmalloc::isXLarge): We can now tell if a pointer is XLarge just by
        examining its bit pattern -- just like we do for other kinds of
        allocations -- which is nice.

        * bmalloc/Sizes.h:
        * bmalloc/VMHeap.h:
        (bmalloc::VMHeap::allocateXLarge):
        (bmalloc::VMHeap::findXLarge):
        (bmalloc::VMHeap::deallocateXLarge): Keep an explicit vector of metadata
        for XLarge allocations.

        * bmalloc/XLargeChunk.h: Removed.

2015-01-16  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: added some infrastructure for aligned allocation
        https://bugs.webkit.org/show_bug.cgi?id=140572

        Reviewed by Andreas Kling.

        * bmalloc/Algorithm.h:
        (bmalloc::isPowerOfTwo):
        (bmalloc::roundUpToMultipleOf):
        (bmalloc::roundDownToMultipleOf): Refactored some duplicate code to use our
        isPowerOfTwo helper function.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::allocate):
        * bmalloc/Allocator.h: Stubbed out an implementation of aligned allocation.
        Doesn't do anything yet, but does correctly forward to system malloc
        when bmalloc is disabled.

        * bmalloc/Cache.cpp:
        (bmalloc::Cache::allocateSlowCaseNullCache):
        * bmalloc/Cache.h:
        (bmalloc::Cache::allocate):
        * bmalloc/bmalloc.h:
        (bmalloc::api::memalign):
        * bmalloc/mbmalloc.cpp: Stubbed out an API for aligned allocation.

2015-01-13  Geoffrey Garen  <ggaren@apple.com>

        Consider alignment when allocating from a SegregatedFreeList
        https://bugs.webkit.org/show_bug.cgi?id=140408

        Reviewed by Sam Weinig.

        In preparation for supporting aligned allocation.

        No performance change.

        Since this is just one extra branch in an already expensive function,
        I decided not to duplicate the function just to avoid the branch in
        the un-aligned case.

        * bmalloc/SegregatedFreeList.cpp:
        (bmalloc::SegregatedFreeList::take):
        * bmalloc/SegregatedFreeList.h:

2015-01-13  Geoffrey Garen  <ggaren@apple.com>

        Renamed minimum to size in SegregatedFreeList
        https://bugs.webkit.org/show_bug.cgi?id=140406

        Reviewed by Sam Weinig.

        In preparation for supporting aligned allocation.

        * bmalloc/SegregatedFreeList.cpp:
        (bmalloc::SegregatedFreeList::takeGreedy):
        (bmalloc::SegregatedFreeList::take): Every size passed to malloc is
        really just a minimum. Let's not imply that this value is special.

2015-01-11  Dan Bernstein  <mitz@apple.com>

        Geoff is organized, but he is not an organization.

        Rubber-stamped by Anders Carlsson.

        * bmalloc.xcodeproj/project.pbxproj: Removed the ORGANIZATIONNAME project attribute.

2015-01-07  Geoffrey Garen  <ggaren@apple.com>

        Make bmalloc work with ASan
        https://bugs.webkit.org/show_bug.cgi?id=140194

        Reviewed by Mark Lam.

        * bmalloc/BPlatform.h: Added a way to detect Darwin OSes, since we need
        an OS-specific API to test for loaded runtime libraries.

        * bmalloc/Environment.cpp:
        (bmalloc::isASanEnabled):
        (bmalloc::Environment::computeIsBmallocEnabled): Disabled bmalloc if
        ASan is enabled, since system malloc has the Asan hooks we need.

        You could check for the ASan compile-time flag instead, but doing this
        check at runtime prepares bmalloc for a world where it is a dynamic
        library that might be loaded into projects it did not compile with.

2015-01-05  Geoffrey Garen  <ggaren@apple.com>

        Fix up bmalloc's PerThread for use on Linux
        https://bugs.webkit.org/show_bug.cgi?id=139804

        Reviewed by Anders Carlsson.

        The previous implementation was a bit slow.

        * bmalloc/PerThread.h:
        (bmalloc::PerThreadStorage<Cache>::get):
        (bmalloc::PerThreadStorage::get):
        (bmalloc::PerThreadStorage::init): Added a catch-all cross-platform Unix
        way to do fast per-thread access without taking a lock every time. This
        probably works on all the platforms we care about, and it matches other
        techniques we use elsewhere in WebKit.

        (bmalloc::PerThread<T>::getFastCase): Removed the conditional from
        this class because PerThreadStorage now encapsulates everything that
        needs to be conditional.

        (bmalloc::PerThreadStorage::initSharedKeyIfNeeded): Deleted.

2014-12-26  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/19348208> REGRESSION (r177027): iOS builds use the wrong toolchain
        https://bugs.webkit.org/show_bug.cgi?id=139950

        Reviewed by David Kilzer.

        * Configurations/Base.xcconfig: Only define TOOLCHAINS when building for OS X, doing so
        in a manner that works with Xcode 5.1.1.

2014-12-15  Geoffrey Garen  <ggaren@apple.com>

        Safari crashes when you set Malloc environment variables
        https://bugs.webkit.org/show_bug.cgi?id=139656

        Reviewed by Michael Saboff.

        I forgot to cover the realloc() case. Whoops. (OoPS?)

        This time around, I ran the full MallocBench test suite in Malloc=1
        mode, and it passed.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::reallocate):
        * bmalloc/Allocator.h: Pushed realloc() logic down into the allocator.
        It needs to be down there so that we can do the short-circuiting check
        for whether bmalloc is enabled first.

        Also added the check.

        * bmalloc/Cache.cpp:
        (bmalloc::Cache::scavenge):
        (bmalloc::Cache::Cache):
        (bmalloc::Cache::reallocateSlowCaseNullCache):
        * bmalloc/Cache.h:
        (bmalloc::Cache::deallocator):
        (bmalloc::Cache::reallocate): Ditto.

        * bmalloc/bmalloc.h:
        (bmalloc::api::free):
        (bmalloc::api::realloc): Ditto.

        (bmalloc::api::scavenge): Pushed this down into Cache to match the
        surrounding functions.

2014-12-11  Geoffrey Garen  <ggaren@apple.com>

        bmalloc should support system memory analysis tools (part 2)
        https://bugs.webkit.org/show_bug.cgi?id=139565

        Reviewed by Mark Lam.

        This patch actually queries the environment to see if memory analysis
        tools have been enabled.

        * bmalloc/Deallocator.cpp:
        (bmalloc::Deallocator::scavenge): Don't process the object log if
        we've disabled bmalloc because it will be full of invalid nullptrs.

        * bmalloc/Environment.cpp:
        (bmalloc::isMallocEnvironmentVariableSet): Test for the list of known
        Malloc debugging flags. I also added a plain "Malloc" catch-all for
        when you want to disable bmalloc without enabling any kind of funny
        business.

        It would be slightly nicer just to iterate the list of environment
        variables and strstr them, but getenv is the more portable option,
        and performance here doesn't really matter.

        (bmalloc::isLibgmallocEnabled): Test for the libgmalloc insertion
        environment variable.

        (bmalloc::Environment::computeIsBmallocEnabled):

2014-12-11  Geoffrey Garen  <ggaren@apple.com>

        Try to fix the iOS simulator build.

        #include the declaration of malloc / free.

        * bmalloc/Allocator.cpp:
        * bmalloc/Deallocator.cpp:

2014-12-11  Geoffrey Garen  <ggaren@apple.com>

        Try to fix the build.

        * bmalloc.xcodeproj/project.pbxproj: Marked a header exported.

2014-12-11  Geoffrey Garen  <ggaren@apple.com>

        bmalloc should support system memory analysis tools (part 1)
        https://bugs.webkit.org/show_bug.cgi?id=139559

        Reviewed by Mark Lam.

        This patch adds the hooks to disable bmalloc at runtime if certain
        environment variables are set, but doesn't actually read from the
        environment yet.

        No performance change.

        * bmalloc.xcodeproj/project.pbxproj: Added the Environment class, which
        we'll use to read environment variables and see if memory analysis tools
        have been enabled.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::Allocator):
        (bmalloc::Allocator::allocateSlowCase): Added a hook to disable bmalloc
        on the allocation path. We cache the setting to make the check fast.

        * bmalloc/Allocator.h: Interface changes.

        * bmalloc/Cache.cpp:
        (bmalloc::Cache::Cache): Pass a heap pointer through to our allocator
        and deallocator. This main purpose is to enable them to query the
        environment for whether bmalloc is enabled; but this is also a slightly
        cleaner way to guarantee to them that the Heap has been pre-initialized.

        * bmalloc/Deallocator.cpp:
        (bmalloc::Deallocator::Deallocator): If bmalloc is disable, artificially
        fill the object log to force us to take the slow path on all deallocations.

        (bmalloc::Deallocator::deallocateSlowCase): Do the disabled check.

        * bmalloc/Deallocator.h: Interface changes.

        * bmalloc/Environment.cpp: Added.
        (bmalloc::Environment::Environment):
        (bmalloc::Environment::computeIsBmallocEnabled):
        * bmalloc/Environment.h: Added.
        (bmalloc::Environment::isBmallocEnabled): This is the class that will
        encapsulate looking for environment variables that turn on heap
        analysis tools.

        * bmalloc/Heap.h:
        (bmalloc::Heap::environment):

        * bmalloc/Mutex.h:
        (bmalloc::Mutex::Mutex):
        * bmalloc/StaticMutex.h: A little refactoring to clarify these comments,
        since I got super confused about them while writing this patch.

        * bmalloc/VMHeap.cpp: Fixed an #include.

2014-12-09  David Kilzer  <ddkilzer@apple.com>

        Switch from using PLATFORM_NAME to SDK selectors in ANGLE, bmalloc, gtest, JavaScriptCore, WTF
        <http://webkit.org/b/139212>

        Reviewed by Joseph Pecoraro.

        * Configurations/Base.xcconfig:
        - Only set GCC_ENABLE_OBJC_GC, GCC_MODEL_TUNING and TOOLCHAINS
          on OS X.
        * Configurations/DebugRelease.xcconfig:
        - Only set MACOSX_DEPLOYMENT_TARGET and SDKROOT on OS X.

2014-11-07  Geoffrey Garen  <ggaren@apple.com>

        bmalloc uses 8X more virtual memory than necessary
        https://bugs.webkit.org/show_bug.cgi?id=138495

        Reviewed by Mark Lam.

        iOS has a per-process virtual memory cap around 1GB, so there's some
        value to not going totally ham with virtual memory.

        We currently use about 8X the necessary amount:
            - 2X to align our VM allocation
            - 4X to reserve small / medium / (2) large chunk VM ranges per superchunk

        We can cut that down:
            - Return the unaligned portion of our VM allocation (-2X)
            - Use all the chunks in a superchunk, instead of allocating one
              chunk per superchunk (-4X)

        * bmalloc/Algorithm.h:
        (bmalloc::roundUpToMultipleOf): Added a non-constant version of this
        function so we can call it with getpagesize() at runtime.

        * bmalloc/Chunk.h:
        * bmalloc/LargeChunk.h:
        (bmalloc::LargeChunk::create): Deleted. Instead of each chunk allocating
        its own VM, VMHeap allocates the superchunk and all the chunks in it at a time.

        * bmalloc/VMAllocate.h:
        (bmalloc::vmValidate):
        (bmalloc::vmAllocate): ASSERT that mmap succeeds to make crashes clearer
        if it does not succeed. Allocate precisely, and give back the extra.

        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::allocateSuperChunk):
        (bmalloc::VMHeap::allocateSmallChunk): Deleted.
        (bmalloc::VMHeap::allocateMediumChunk): Deleted.
        (bmalloc::VMHeap::allocateLargeChunk): Deleted. Use all the chunks
        in a superchunk, instead of just one.

        * bmalloc/VMHeap.h:
        (bmalloc::VMHeap::allocateSmallPage):
        (bmalloc::VMHeap::allocateMediumPage):
        (bmalloc::VMHeap::allocateLargeRange):
        * bmalloc/XLargeChunk.h:
        (bmalloc::XLargeChunk::create): Updated to match changes above.

2014-11-01  David Kilzer  <ddkilzer@apple.com>

        JavaScriptCore is missing debug info for bmalloc because libbmalloc.a is stripped
        <https://webkit.org/b/138286>
        <rdar://problem/18847087>

        Reviewed by Dan Bernstein.

        * Configurations/bmalloc.xcconfig: Set STRIP_INSTALLED_PRODUCT
        to NO for the target that produces libbmalloc.a so that the
        debug symbols will be linked into JavaScriptCore and end up in
        its dSYM file.

2014-10-30  Dana Burkart  <dburkart@apple.com>

        <rdar://problem/18821260> Prepare for the mysterious future

        Reviewed by Lucas Forschler.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2014-09-24  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: cleaned up fast path vs slow path
        https://bugs.webkit.org/show_bug.cgi?id=137081

        Reviewed by Sam Weinig.

        Might be a 1% speedup on MallocBench. Also cleans up the code a bit.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::Allocator): Merged the small and medium range
        caches, just like the small and medium allocators. Ranges are abstract
        objects that don't really care whether they hold small or medium objects,
        so they don't need to be segregated.

        (bmalloc::Allocator::scavenge): Ditto.

        (bmalloc::Allocator::allocateBumpRangeSlowCase):
        (bmalloc::Allocator::allocateBumpRange): Same thing here, except that
        we do care a tiny bit, because we need to specify small vs medium when
        allocating new ranges from the heap, to ensure that the heap allocates
        from the right segment of VM.

        (bmalloc::Allocator::allocateLarge):
        (bmalloc::Allocator::allocateXLarge): NO_INLINE because this was clouding
        up the fast path. Large allocation performance is dominated by allocation
        logic and initialization, so inlining it doesn't help.

        (bmalloc::Allocator::allocateSlowCase): Slow path got a bit cleaner since
        it doesn't need to distinguish small vs medium objects.

        (bmalloc::Allocator::allocateSmallBumpRange): Deleted.
        (bmalloc::Allocator::allocateMediumBumpRange): Deleted.

        * bmalloc/Allocator.h:
        * bmalloc/BumpRange.h:

        * bmalloc/Cache.cpp:
        (bmalloc::Cache::allocateSlowCase): Deleted.
        (bmalloc::Cache::deallocateSlowCase): Deleted.
        * bmalloc/Cache.h:
        (bmalloc::Cache::allocate):
        (bmalloc::Cache::deallocate):
        (bmalloc::Cache::allocateFastCase): Deleted.
        (bmalloc::Cache::deallocateFastCase): Deleted. Removed the Cache slow
        paths. The downside to this change is that the fast path branches to two
        distinct failure cases instead of one. The upside is that the slow path
        doesn't need to re-read the segment register, which is not as cheap as a
        normal register, and it doesn't need to do an extra level of function 
        call. Seems to be worth it.

        * bmalloc/Deallocator.h:
        * bmalloc/Heap.cpp:
        (bmalloc::Heap::refillSmallBumpRangeCache):
        (bmalloc::Heap::refillMediumBumpRangeCache):
        * bmalloc/Heap.h: Updated for interface changes.

        * bmalloc/Sizes.h: The most ranges a cache will hold is the number of
        small lines in a page / 2, since any other free lines will coalesce
        with their neighbors.

2014-09-23  Geoffrey Garen  <ggaren@apple.com>

        Rolled out r173346.

            bmalloc should honor the FastMalloc statistics API
            https://bugs.webkit.org/show_bug.cgi?id=136592

        This didn't really work. Because we allow ranges with and without
        physical pages to merge, and we allow double-committing and
        double-decommitting, we can't rely on commit actions to track memory
        footprint.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::size): Deleted.
        (bmalloc::Heap::capacity): Deleted.
        * bmalloc/Heap.h:
        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::VMHeap):
        (bmalloc::VMHeap::allocateSmallChunk):
        (bmalloc::VMHeap::allocateMediumChunk):
        (bmalloc::VMHeap::allocateLargeChunk):
        * bmalloc/VMHeap.h:
        (bmalloc::VMHeap::allocateSmallPage):
        (bmalloc::VMHeap::allocateMediumPage):
        (bmalloc::VMHeap::allocateLargeRange):
        (bmalloc::VMHeap::deallocateSmallPage):
        (bmalloc::VMHeap::deallocateMediumPage):
        (bmalloc::VMHeap::deallocateLargeRange):
        (bmalloc::VMHeap::size): Deleted.
        (bmalloc::VMHeap::capacity): Deleted.
        * bmalloc/bmalloc.h:
        (bmalloc::api::heapSize): Deleted.
        (bmalloc::api::heapCapacity): Deleted.

2014-09-23  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Allocation should be more precise
        https://bugs.webkit.org/show_bug.cgi?id=136993

        Reviewed by Gavin Barraclough.

        13% reduction in heap size on the MallocBench *_memory_warning benchmarks.

        This patch teaches the allocator to merge adjacent free lines into a
        single allocatable range. This allows us to shrink the size of an
        individual line without increasing fragmentation or the rate of allocator
        slow paths.

        We'll only take more slow paths when available memory is sparse, which
        is exactly when it's worth it. When available memory is dense, we'll
        take fewer slow paths.

        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/Algorithm.h:
        (bmalloc::divideRoundingUp):

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::Allocator): Updated for interface changes.

        (bmalloc::Allocator::scavenge): Scavenge by object instead of by line.
        Now that we merge lines, it's not convenient to scavenge by line.

        (bmalloc::Allocator::allocateSmallBumpRange):
        (bmalloc::Allocator::allocateMediumBumpRange): Allocate whole ranges
        instead of individual lines.

        (bmalloc::Allocator::allocateSlowCase):
        (bmalloc::Allocator::allocateSmallLine): Deleted.
        (bmalloc::Allocator::allocateMediumLine): Deleted.
        (bmalloc::Allocator::allocateMedium): Deleted.
        * bmalloc/Allocator.h:
        (bmalloc::Allocator::allocateFastCase): Folded medium allocations
        into the standard fast path with small allocations. Since a BumpAllocator
        just allocates out of an arbitrary range, it doesn't need to distinguish
        between small and medium lines.

        * bmalloc/BumpAllocator.h:
        (bmalloc::BumpAllocator::size):
        (bmalloc::BumpAllocator::BumpAllocator):
        (bmalloc::BumpAllocator::init):
        (bmalloc::BumpAllocator::refill):
        (bmalloc::BumpAllocator::line): Deleted. No need to track line information
        anymore: the heap just gives us a pointer and a pre-computed number of
        objects, and we allocate them.

        * bmalloc/Deallocator.cpp:
        (bmalloc::Deallocator::processObjectLog): Updated for interface changes.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::Heap):
        (bmalloc::Heap::initializeLineMetadata): Pre-compute precise metadata
        detailing where all objects will lie in memory. After we merge two lines,
        we might allocate an object that spans from one line to the next. This
        metadata details which bits of memory overlap in that way, and how they
        overlap.

        (bmalloc::Heap::refillSmallBumpRangeCache):
        (bmalloc::Heap::refillMediumBumpRangeCache): Scan a whole page at a time,
        and merge adjacent free lines into BumpRanges.

        (bmalloc::Heap::allocateSmallPage):
        (bmalloc::Heap::allocateMediumPage):
        (bmalloc::Heap::deallocateSmallLine):
        (bmalloc::Heap::deallocateMediumLine): Track pages rather than lines,
        since we scan for free memory a page at a time.

        (bmalloc::Heap::allocateSmallLineSlowCase): Deleted.
        (bmalloc::Heap::allocateMediumLineSlowCase): Deleted. Folded into the
        fast path.

        * bmalloc/Heap.h:
        (bmalloc::Heap::derefSmallLine):
        (bmalloc::Heap::derefMediumLine):
        (bmalloc::Heap::deallocateSmallLine): Deleted.
        (bmalloc::Heap::allocateSmallLine): Deleted.
        (bmalloc::Heap::deallocateMediumLine): Deleted.
        (bmalloc::Heap::allocateMediumLine): Deleted. Updated for interface changes.

        * bmalloc/Line.h:
        (bmalloc::Line<Traits>::ref):
        (bmalloc::Line<Traits>::deref):
        (bmalloc::Line<Traits>::concurrentRef): Deleted. We don't pass a derefCount
        anymore, since we only ever deref by 1 now.

        * bmalloc/MediumAllocator.h:
        (bmalloc::MediumAllocator::isNull): Deleted.
        (bmalloc::MediumAllocator::MediumAllocator): Deleted.
        (bmalloc::MediumAllocator::line): Deleted.
        (bmalloc::MediumAllocator::allocate): Deleted.
        (bmalloc::MediumAllocator::derefCount): Deleted.
        (bmalloc::MediumAllocator::refill): Deleted.
        (bmalloc::MediumAllocator::clear): Deleted. Deleted some code that's
        been dead for a while, since it doesn't build anymore with this patch.

        * bmalloc/Page.h:
        (bmalloc::Page::sizeClass):
        (bmalloc::Page::setSizeClass):
        (bmalloc::Page::smallSizeClass): Deleted.
        (bmalloc::Page::setSmallSizeClass): Deleted. Renamed setSmallSizeClass
        to sizeClass, since we use it for medium sizes too.

        * bmalloc/Sizes.h:
        (bmalloc::Sizes::sizeClass):
        (bmalloc::Sizes::objectSize): Shrank line sizes to save memory.

        (bmalloc::Sizes::smallSizeClassFor): Deleted.
        (bmalloc::Sizes::mediumSizeClassFor): Deleted.

        * bmalloc/bmalloc.h:
        (bmalloc::api::realloc): Now that we have precise objects sizes, realloc
        can be a bit more precise. It also has to be, since we can't guarantee
        that an object ends at the end of a line anymore.

2014-09-19  Daniel Bates  <dabates@apple.com>

        Always assume internal SDK when building configuration Production
        https://bugs.webkit.org/show_bug.cgi?id=136925
        <rdar://problem/18362399>

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2014-09-16  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: moved line caches from the deallocator to the allocator
        https://bugs.webkit.org/show_bug.cgi?id=136868

        Reviewed by Gavin Barraclough.

        I did this mostly as a simplification, to make it easier to change the
        allocation strategy.

        No throughput change on MallocBench. Saves about 50kB.

        Since the deallocator needs to lock the heap when freeing lines anyway,
        there isn't much benefit to giving the deallocator a local cache of
        deallocated lines.

        We still give the allocator a local cache of lines because that does
        reduce the frequency at which it needs to lock the heap in order to
        acquire more lines.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::scavenge):
        (bmalloc::Allocator::allocateSmallLine):
        (bmalloc::Allocator::allocateMediumLine):
        (bmalloc::Allocator::allocateMedium):
        (bmalloc::Allocator::allocateSlowCase):
        * bmalloc/Allocator.h:
        * bmalloc/Deallocator.cpp:
        (bmalloc::Deallocator::Deallocator):
        (bmalloc::Deallocator::scavenge):
        (bmalloc::Deallocator::processObjectLog):
        (bmalloc::Deallocator::deallocateSmallLine): Deleted.
        (bmalloc::Deallocator::allocateSmallLine): Deleted.
        (bmalloc::Deallocator::deallocateMediumLine): Deleted.
        (bmalloc::Deallocator::allocateMediumLine): Deleted.
        * bmalloc/Deallocator.h:

        * bmalloc/Sizes.h:
        * bmalloc/VMAllocate.h: Took the opportunity to make the line cache size
        exactly one page in size. That's about what we were shooting for anyway,
        and it may make it easier to switch to per-page allocation in future.

2014-09-15  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: allocate small and medium objects using the same bump pointer class
        https://bugs.webkit.org/show_bug.cgi?id=136843

        Reviewed by Gavin Barraclough.

        4% speedup on MallocBench.

        Now that medium-sized objects have dedicated per-size allocators, they
        don't need to use an arbitrary bump pointer allocator. This means that
        every allocator knows how many objects it will allocate from the start,
        and we don't need a post-processing step to adjust refcounts based on
        real allocation count.

        * bmalloc.xcodeproj/project.pbxproj: Renamed SmallAllocator to BumpAllocator
        since it's used for small and medium objects now.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::Allocator): Updated to use new interface.
        (bmalloc::Allocator::scavenge): To "retire" an allocator, we just need
        to make sure that we finish allocating all the objects in it.

        (bmalloc::Allocator::allocateMedium):
        (bmalloc::Allocator::allocateSlowCase):
        (bmalloc::Allocator::retire): Deleted.
        (bmalloc::Allocator::processSmallAllocatorLog): Deleted.
        (bmalloc::Allocator::processMediumAllocatorLog): Deleted.
        * bmalloc/Allocator.h:
        (bmalloc::Allocator::allocateFastCase): Removed abstractions and data
        used to post-process an allocator based on how many objects it allocated.

        * bmalloc/BumpAllocator.h: Copied from Source/bmalloc/bmalloc/SmallAllocator.h.
        (bmalloc::BumpAllocator::BumpAllocator):
        (bmalloc::BumpAllocator::init):
        (bmalloc::BumpAllocator::line):
        (bmalloc::BumpAllocator::validate):
        (bmalloc::BumpAllocator::allocate):
        (bmalloc::BumpAllocator::refill):
        (bmalloc::BumpAllocator::clear): Updated these functions to be agnostic
        about the kinds of lines they allocate into. In some cases, the line
        type must be provided as a template parameter by the caller.

        (bmalloc::SmallAllocator::SmallAllocator): Deleted.
        (bmalloc::SmallAllocator::line): Deleted.
        (bmalloc::SmallAllocator::allocate): Deleted.
        (bmalloc::SmallAllocator::objectCount): Deleted.
        (bmalloc::SmallAllocator::derefCount): Deleted.
        (bmalloc::SmallAllocator::refill): Deleted.
        (bmalloc::SmallAllocator::clear): Deleted.

        * bmalloc/ObjectType.h:
        (bmalloc::isMedium):

        * bmalloc/SmallAllocator.h:
        (bmalloc::SmallAllocator::isNull): Deleted.
        (bmalloc::SmallAllocator::canAllocate): Deleted.
        (bmalloc::SmallAllocator::SmallAllocator): Deleted.
        (bmalloc::SmallAllocator::line): Deleted.
        (bmalloc::SmallAllocator::allocate): Deleted.
        (bmalloc::SmallAllocator::objectCount): Deleted.
        (bmalloc::SmallAllocator::derefCount): Deleted.
        (bmalloc::SmallAllocator::refill): Deleted.
        (bmalloc::SmallAllocator::clear): Deleted.

2014-09-12  Geoffrey Garen  <ggaren@apple.com>

        Fixed a goof in bmalloc Vector sizing
        https://bugs.webkit.org/show_bug.cgi?id=136795

        Reviewed by Gavin Barraclough and Sam Weinig.

        We want our minimum vector to be page-sized since the OS will give us
        a page no matter what -- but we want that many bytes, and not enough
        bytes to store that many elements.

        * bmalloc/Vector.h: Math is hard.

2014-09-11  Geoffrey Garen  <ggaren@apple.com>

        bmalloc should segregate medium-sized objects by line like it does for small-sized objects
        https://bugs.webkit.org/show_bug.cgi?id=136693

        Reviewed by Gavin Barraclough.

        4% reduction in heap size on the MallocBench *_memory_warning benchmarks.

        No throughput change.

        We keep an array of medium allocators, just like our array of small
        allocators.

        In future, we can simplify the allocation fast path by merging the small
        and medium allocator arrays. For now, this is the simplest change that
        gets the win.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::Allocator):
        (bmalloc::Allocator::scavenge):
        (bmalloc::Allocator::allocateMedium):
        * bmalloc/Allocator.h:
        * bmalloc/Sizes.h:
        (bmalloc::Sizes::mediumSizeClassFor):

2014-09-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Renamed log => retire for clarity.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::scavenge):
        (bmalloc::Allocator::retire):
        (bmalloc::Allocator::allocateMedium):
        (bmalloc::Allocator::allocateSlowCase):
        (bmalloc::Allocator::log): Deleted.
        * bmalloc/Allocator.h:

2014-09-11  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: eager scavenge leaves behind a bogus allocator
        https://bugs.webkit.org/show_bug.cgi?id=136743

        Reviewed by Sam Weinig.

        Be sure to clear the allocator after logging it in the eager scavenge
        case, so that we don't later try to allocate out of the lines that we
        have thrown away.

        We didn't need to do this previously because scavenge would only happen
        at thread exit time, after which no further allocation from the per-thread
        cache would take place.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::scavenge):
        * bmalloc/MediumAllocator.h:
        (bmalloc::MediumAllocator::clear):
        * bmalloc/SmallAllocator.h:
        (bmalloc::SmallAllocator::clear):

2014-09-05  Geoffrey Garen  <ggaren@apple.com>

        bmalloc should honor the FastMalloc statistics API
        https://bugs.webkit.org/show_bug.cgi?id=136592

        Reviewed by Gavin Barraclough.

        We do this by tracking "size" and "capacity" in the VM heap.

        The VM heap's "capacity" is all the VM we ever allocated.

        The VM heap's "size" the subset of VM currently held onto by the
        VM heap (and therefore not in use by the regular heap).

        Somewhat ironically, reducing the process's memory footprint, increases
        the size of the VM heap, since the VM heap holds the pages that are
        purely virtual and not physical.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::size):
        (bmalloc::Heap::capacity):
        * bmalloc/Heap.h:
        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::VMHeap):
        (bmalloc::VMHeap::allocateSmallChunk):
        (bmalloc::VMHeap::allocateMediumChunk):
        (bmalloc::VMHeap::allocateLargeChunk):
        * bmalloc/VMHeap.h:
        (bmalloc::VMHeap::size):
        (bmalloc::VMHeap::capacity):
        (bmalloc::VMHeap::allocateSmallPage):
        (bmalloc::VMHeap::allocateMediumPage):
        (bmalloc::VMHeap::allocateLargeRange):
        (bmalloc::VMHeap::deallocateSmallPage):
        (bmalloc::VMHeap::deallocateMediumPage):
        (bmalloc::VMHeap::deallocateLargeRange):
        * bmalloc/bmalloc.h:
        (bmalloc::api::heapSize):
        (bmalloc::api::heapCapacity):

2014-09-02  Geoffrey Garen  <ggaren@apple.com>

        bmalloc crashes on the EWS bots (due to bad large object allocation)
        https://bugs.webkit.org/show_bug.cgi?id=136469

        Reviewed by Andreas Kling.

        It's possible to convince bmalloc to perform a bad large object allocation,
        through these steps:

        (1) Insert object A into freelist F0.

        (2) Split, merge and split again A's neighbors such that object B is
        inserted into freelist F0, with boundary tag and size equal to object A,
        but pointer not completely equal to object A. Put object B at the head of F0.

        (3) Allocate some other object from F0, swapping its position in the
        freelist with object B, such that object A is now ahead of object B.

        --> Now, the next allocation for size A/B will allocate object A, which
        has a slightly wrong idea about where the object actually begins.
        Immediately, you'll corrupt a little memory, and over time, you'll also
        corrupt boundary tag metadata.

        The solution is to store the begin pointer in the boundary tag. Luckily,
        this doesn't make the tag any bigger, and it's not a noticeable slowdown
        on MallocBench.

        * bmalloc/Algorithm.h:
        (bmalloc::rightShift):
        * bmalloc/BeginTag.h:
        (bmalloc::BeginTag::isInFreeList): This is the bug fix. Make sure to
        validate the start pointer when popping off the free list. Through a
        very uncommon set of steps, it is possible to have an item in the free
        list that is valid by all accounts except for its start pointer.

        * bmalloc/BoundaryTag.h:
        (bmalloc::BoundaryTag::compactBegin):
        (bmalloc::BoundaryTag::setRange):
        (bmalloc::BoundaryTag::setSize): Deleted. Record a compact version of the
        start pointer. We don't need the whole pointer -- just the offset, in
        largeAlignment increments, into the relevant boundary tag bucket.

        * bmalloc/BoundaryTagInlines.h:
        (bmalloc::validateNext):
        (bmalloc::BoundaryTag::init):
        (bmalloc::BoundaryTag::mergeLarge):
        (bmalloc::BoundaryTag::splitLarge):
        * bmalloc/SegregatedFreeList.cpp:
        (bmalloc::SegregatedFreeList::insert):
        (bmalloc::SegregatedFreeList::takeGreedy):
        (bmalloc::SegregatedFreeList::take): Provide the whole range instead of
        the size when establishing a boundary tag, as required by the new
        interface.

        * bmalloc/Sizes.h:

2014-08-14  Geoffrey Garen  <ggaren@apple.com>

        Fixed a bmalloc crash seen on the EWS bot
        https://bugs.webkit.org/show_bug.cgi?id=135955

        Reviewed by Andreas Kling.

        * bmalloc/Syscall.h: Some CG APIs vm_copy their input buffers. If the
        input buffer is a malloc region, that region will get marked Copy-On-Write
        by the kernel. Calls to madvise() for COW regions fail and return EINVAL
        on older OS X's. In 10.10, they still fail, but they do not return
        EINVAL.

        So, we can only ASSERT that our syscalls succeed starting with 10.10.

2014-08-14  Geoffrey Garen  <ggaren@apple.com>

        Fixed the bmalloc build
        https://bugs.webkit.org/show_bug.cgi?id=135953

        Reviewed by Andreas Kling.

        * bmalloc.xcodeproj/project.pbxproj: Marked a few headers as private.
        These headers are used, so they must be available outside the project.

2014-08-13  Daniel Bates  <dabates@apple.com>

        Attempt to fix the build following <http://trac.webkit.org/changeset/172576>
        (https://bugs.webkit.org/show_bug.cgi?id=135895)

        Substitute PerThreadStorage<T>::initSharedKeyIfNeeded() for initSharedKeyIfNeeded() in
        implementation of PerThread<T>::getFastCase().

        * bmalloc/PerThread.h:
        (bmalloc::PerThread<T>::getFastCase):

2014-08-13  Daniel Bates  <dabates@apple.com>

        Make bmalloc::PerThread work without C++ thread local storage
        https://bugs.webkit.org/show_bug.cgi?id=135895

        Reviewed by Geoffrey Garen.

        Implement support for building bmalloc without C++ thread local storage.

        * bmalloc/BPlatform.h: Remove macro define BPLATFORM_IOS_SIMULATOR. Added macro function
        BCOMPILER_SUPPORTS() and macro define BCOMPILER_SUPPORTS_CXX_THREAD_LOCAL that can be used
        to determine whether the compiler supports C++ thread local storage.
        * bmalloc/PerThread.h:
        (bmalloc::PerThreadStorage::get): Modified to call pthread_getspecific() when building
        without C++ thread local storage.
        (bmalloc::PerThreadStorage::initSharedKeyIfNeeded): Added.
        (bmalloc::PerThreadStorage::init): Moved logic to initialize shared Pthread key from here to
        PerThreadStorage::initSharedKeyIfNeeded().
        (bmalloc::PerThread<T>::getFastCase): Modified to call PerThreadStorage::initSharedKeyIfNeeded()
        before querying PerThreadStorage::get() when building without C++ thread local storage so as to
        ensure that the shared key has been initialized.
        (_pthread_setspecific_direct): Deleted.
        (_pthread_getspecific_direct): Deleted.

2014-08-13  Daniel Bates  <dabates@apple.com>

        [iOS] Make JavaScriptCore and bmalloc build with the public SDK
        https://bugs.webkit.org/show_bug.cgi?id=135848

        Reviewed by Geoffrey Garen.

        * bmalloc/BPlatform.h: Added macro BPLATFORM_IOS_SIMULATOR, which evaluates to true
        when building for the iOS Simulator.
        * bmalloc/PerThread.h: Use pthread_machdep.h code path when building for iOS Simulator
        using the public SDK.
        (_pthread_setspecific_direct): Added; only defined when building for the iOS Simulator
        using the public SDK.
        (_pthread_getspecific_direct): Added; only defined when building for the iOS Simulator
        using the public SDK.

2014-08-12  Daniel Bates  <dabates@apple.com>

        BPLATFORM(IOS) always evaluates to false
        https://bugs.webkit.org/show_bug.cgi?id=135843

        Reviewed by Geoffrey Garen.

        Fix typo in definition of BPLATFORM() and include system header TargetConditionals.h
        (when building on an Apple platform) so that BPLATFORM(X) evaluates to true when
        building for platform X. In particular, so that BPLATFORM(IOS) evaluates to true when
        building for iOS.

        As a side effect of this change, the change made in <http://trac.webkit.org/changeset/167289>
        will be honored and iOS will assume a VM page size of 16kB (again) instead of 4kB.

        * bmalloc/BPlatform.h:

2014-08-11  Andy Estes  <aestes@apple.com>

        [iOS] Get rid of iOS.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=135809

        Reviewed by Joseph Pecoraro.

        All iOS.xcconfig did was include AspenFamily.xcconfig, so there's no need for the indirection.

        * Configurations/Base.xcconfig:
        * Configurations/iOS.xcconfig: Removed.
        * bmalloc.xcodeproj/project.pbxproj:

2014-05-01  Dan Bernstein  <mitz@apple.com>

        Fixed production builds for the iOS Simulator.
        <rdar://problem/16792221>

        * Configurations/bmalloc.xcconfig: Include INSTALL_PATH_PREFIX in
        PRIVATE_HEADERS_FOLDER_PATH when installing.

2014-04-20  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Segregate pages by objects size
        https://bugs.webkit.org/show_bug.cgi?id=131909

        Reviewed by Andreas Kling.

        2% reduction in memory-at-end on the Membuster memory_warning benchmarks.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::allocateSlowCase):
        * bmalloc/Allocator.h:
        (bmalloc::Allocator::allocateFastCase):
        (bmalloc::Allocator::smallAllocatorFor): Use the new shared helper
        function for size class calculation.

        * bmalloc/Deallocator.cpp:
        (bmalloc::Deallocator::Deallocator):
        (bmalloc::Deallocator::scavenge):
        (bmalloc::Deallocator::deallocateSmallLine):
        (bmalloc::Deallocator::allocateSmallLine):
        * bmalloc/Deallocator.h: Keep a cache for every size class, since the
        cache can't be shared anymore.

        * bmalloc/Heap.cpp:
        (bmalloc::Heap::allocateSmallLineSlowCase):
        * bmalloc/Heap.h:
        (bmalloc::Heap::deallocateSmallLine): Ditto.

        (bmalloc::Heap::allocateSmallLine): Check size class in addition to
        page refcount when allocating a line because we might have deallocated
        the page and the recycled it for another size class.

        (bmalloc::Heap::deallocateMediumLine):
        (bmalloc::Heap::allocateMediumLine):
        * bmalloc/Line.h:
        (bmalloc::Line::refCount):
        * bmalloc/Page.h:
        (bmalloc::Page::refCount):
        (bmalloc::Page::smallSizeClass):
        (bmalloc::Page::setSmallSizeClass):
        (bmalloc::Page<Traits>::refCount): Deleted.
        * bmalloc/Sizes.h:
        (bmalloc::Sizes::smallSizeClassFor): New shared API for computing
        an index into an array from a size.

2014-04-19  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Improved alignment in LargeChunk
        https://bugs.webkit.org/show_bug.cgi?id=131895

        Reviewed by Andreas Kling.

        * bmalloc/Chunk.h:
        * bmalloc/LargeChunk.h: Align to vmPageSize just like Chunk does.
        Technically, the previous alignment was harmless, but I would prefer,
        dear reader, not to have to explain the interlocking set of
        circumstances that made it so.

2014-04-19  Geoffrey Garen  <ggaren@apple.com>

        Rolled out r167502 because it caused a crash on the facebook benchmark.

        Unreviewed.

            bmalloc: Added an XSmall line size
            https://bugs.webkit.org/show_bug.cgi?id=131851

            Reviewed by Sam Weinig.

2014-04-19  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Mutex should be harder to use wrong
        https://bugs.webkit.org/show_bug.cgi?id=131879

        Reviewed by Andreas Kling.

        Mutex now has a proper constructor, so you can't deadlock by forgetting
        to initialize it.

        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::processXSmallAllocatorLog):
        (bmalloc::Allocator::processSmallAllocatorLog):
        (bmalloc::Allocator::processMediumAllocatorLog):
        (bmalloc::Allocator::allocateLarge):
        (bmalloc::Allocator::allocateXLarge): Global replace Mutex => StaticMutex,
        since the Heap mutex is a static.

        * bmalloc/AsyncTask.h:
        (bmalloc::Function>::AsyncTask): Use Mutex, since we're not static. No
        need for explicit initialization anymore.

        * bmalloc/Deallocator.cpp:
        (bmalloc::Deallocator::scavenge):
        (bmalloc::Deallocator::deallocateLarge):
        (bmalloc::Deallocator::deallocateXLarge):
        (bmalloc::Deallocator::processObjectLog):
        (bmalloc::Deallocator::deallocateSmallLine):
        (bmalloc::Deallocator::deallocateXSmallLine):
        (bmalloc::Deallocator::allocateSmallLine):
        (bmalloc::Deallocator::allocateXSmallLine):
        (bmalloc::Deallocator::deallocateMediumLine):
        (bmalloc::Deallocator::allocateMediumLine):
        * bmalloc/Deallocator.h:
        * bmalloc/Heap.cpp:
        (bmalloc::sleep):
        (bmalloc::Heap::Heap):
        (bmalloc::Heap::concurrentScavenge):
        (bmalloc::Heap::scavenge):
        (bmalloc::Heap::scavengeSmallPages):
        (bmalloc::Heap::scavengeXSmallPages):
        (bmalloc::Heap::scavengeMediumPages):
        (bmalloc::Heap::scavengeLargeRanges):
        (bmalloc::Heap::allocateXSmallLineSlowCase):
        (bmalloc::Heap::allocateSmallLineSlowCase):
        (bmalloc::Heap::allocateMediumLineSlowCase):
        (bmalloc::Heap::allocateXLarge):
        (bmalloc::Heap::deallocateXLarge):
        (bmalloc::Heap::allocateLarge):
        (bmalloc::Heap::deallocateLarge):
        * bmalloc/Heap.h:
        (bmalloc::Heap::deallocateXSmallLine):
        (bmalloc::Heap::allocateXSmallLine):
        (bmalloc::Heap::deallocateSmallLine):
        (bmalloc::Heap::allocateSmallLine):
        (bmalloc::Heap::deallocateMediumLine):
        (bmalloc::Heap::allocateMediumLine):
        * bmalloc/Line.h:
        (bmalloc::Line<Traits>::deref):
        * bmalloc/Mutex.cpp: Removed.
        * bmalloc/Mutex.h:
        (bmalloc::Mutex::Mutex):
        (bmalloc::Mutex::init): Deleted.
        (bmalloc::Mutex::try_lock): Deleted.
        (bmalloc::Mutex::lock): Deleted.
        (bmalloc::Mutex::unlock): Deleted.
        * bmalloc/Page.h:
        (bmalloc::Page<Traits>::ref):
        (bmalloc::Page<Traits>::deref):
        (bmalloc::Page<Traits>::refCount):
        * bmalloc/PerProcess.h:
        (bmalloc::PerProcess::mutex):
        (bmalloc::PerProcess<T>::getSlowCase):
        * bmalloc/StaticMutex.cpp: Added.
        (bmalloc::StaticMutex::lockSlowCase):
        * bmalloc/StaticMutex.h: Added.
        (bmalloc::StaticMutex::init):
        (bmalloc::StaticMutex::try_lock):
        (bmalloc::StaticMutex::lock):
        (bmalloc::StaticMutex::unlock):
        * bmalloc/VMHeap.h:
        (bmalloc::VMHeap::deallocateXSmallPage):
        (bmalloc::VMHeap::deallocateSmallPage):
        (bmalloc::VMHeap::deallocateMediumPage):
        (bmalloc::VMHeap::deallocateLargeRange):
        * bmalloc/bmalloc.h:
        (bmalloc::api::scavenge): Global replace Mutex => StaticMutex,
        since the Heap mutex is a static.

2014-04-18  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: AsyncTask should use Mutex instead of std::mutex
        https://bugs.webkit.org/show_bug.cgi?id=131865

        Reviewed by Gavin Barraclough.

        std::mutex is so slow that it makes parallelizing simple tasks through
        AsyncTask a net regression. Mutex fixes this.

        * bmalloc/AsyncTask.h:
        (bmalloc::Function>::AsyncTask):
        (bmalloc::Function>::join):
        (bmalloc::Function>::runSlowCase):
        (bmalloc::Function>::entryPoint):
        * bmalloc/Mutex.h:
        (bmalloc::Mutex::init):

2014-04-18  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Added an XSmall line size
        https://bugs.webkit.org/show_bug.cgi?id=131851

        Reviewed by Sam Weinig.

        Reduces malloc footprint on Membuster recordings by 10%.

        This is a throughput regression, but we're still way ahead of TCMalloc.
        I have some ideas for how to recover the regression -- but I wanted to
        get this win in first.

        Full set of benchmark results:

                bmalloc> ~/webkit/PerformanceTests/MallocBench/run-malloc-benchmarks --measure-heap nopatch:~/scratch/Build-nopatch/Release/ patch:~/webkit/WebKitBuild/Release/
                                                                                                
                                                               nopatch                      patch                                Δ
                Peak Memory:
                    reddit_memory_warning                      7,896kB                    7,532kB                  ^ 1.05x smaller
                    flickr_memory_warning                     12,968kB                   12,324kB                  ^ 1.05x smaller
                    theverge_memory_warning                   16,672kB                   15,200kB                   ^ 1.1x smaller

                    <geometric mean>                          11,952kB                   11,216kB                  ^ 1.07x smaller
                    <arithmetic mean>                         12,512kB                   11,685kB                  ^ 1.07x smaller
                    <harmonic mean>                           11,375kB                   10,726kB                  ^ 1.06x smaller

                Memory at End:
                    reddit_memory_warning                      7,320kB                    6,856kB                  ^ 1.07x smaller
                    flickr_memory_warning                     10,848kB                    9,692kB                  ^ 1.12x smaller
                    theverge_memory_warning                   16,380kB                   14,872kB                   ^ 1.1x smaller

                    <geometric mean>                          10,916kB                    9,961kB                   ^ 1.1x smaller
                    <arithmetic mean>                         11,516kB                   10,473kB                   ^ 1.1x smaller
                    <harmonic mean>                           10,350kB                    9,485kB                  ^ 1.09x smaller

                MallocBench> ~/webkit/PerformanceTests/MallocBench/run-malloc-benchmarks nopatch:~/scratch/Build-nopatch/Release/ patch:~/webkit/WebKitBuild/Release/
                                                                                                
                                                   nopatch                patch                         Δ
                Execution Time:
                    churn                            127ms                151ms            ! 1.19x slower
                    list_allocate                    130ms                164ms            ! 1.26x slower
                    tree_allocate                    109ms                127ms            ! 1.17x slower
                    tree_churn                       115ms                120ms            ! 1.04x slower
                    facebook                         240ms                259ms            ! 1.08x slower
                    fragment                          91ms                131ms            ! 1.44x slower
                    fragment_iterate                 105ms                106ms            ! 1.01x slower
                    message_one                      260ms                259ms             ^ 1.0x faster
                    message_many                     149ms                154ms            ! 1.03x slower
                    medium                           194ms                248ms            ! 1.28x slower
                    big                              157ms                160ms            ! 1.02x slower

                    <geometric mean>                 144ms                163ms            ! 1.13x slower
                    <arithmetic mean>                152ms                171ms            ! 1.12x slower
                    <harmonic mean>                  137ms                156ms            ! 1.14x slower

                MallocBench> ~/webkit/PerformanceTests/MallocBench/run-malloc-benchmarks nopatch:~/scratch/Build-nopatch/Release/ patch:~/webkit/WebKitBuild/Release/
                                                                                                
                                                                       nopatch                          patch                                     Δ
                Execution Time:
                    churn                                                126ms                          148ms                        ! 1.17x slower
                    churn --parallel                                      62ms                           76ms                        ! 1.23x slower
                    list_allocate                                        130ms                          164ms                        ! 1.26x slower
                    list_allocate --parallel                             120ms                          175ms                        ! 1.46x slower
                    tree_allocate                                        111ms                          127ms                        ! 1.14x slower
                    tree_allocate --parallel                              95ms                          135ms                        ! 1.42x slower
                    tree_churn                                           115ms                          124ms                        ! 1.08x slower
                    tree_churn --parallel                                107ms                          126ms                        ! 1.18x slower
                    facebook                                             240ms                          276ms                        ! 1.15x slower
                    facebook --parallel                                  802ms                        1,088ms                        ! 1.36x slower
                    fragment                                              92ms                          130ms                        ! 1.41x slower
                    fragment --parallel                                   66ms                          124ms                        ! 1.88x slower
                    fragment_iterate                                     109ms                          127ms                        ! 1.17x slower
                    fragment_iterate --parallel                           55ms                           64ms                        ! 1.16x slower
                    message_one                                          260ms                          260ms                                      
                    message_many                                         170ms                          238ms                         ! 1.4x slower
                    medium                                               185ms                          250ms                        ! 1.35x slower
                    medium --parallel                                    210ms                          334ms                        ! 1.59x slower
                    big                                                  150ms                          169ms                        ! 1.13x slower
                    big --parallel                                       138ms                          144ms                        ! 1.04x slower

                    <geometric mean>                                     135ms                          170ms                        ! 1.26x slower
                    <arithmetic mean>                                    167ms                          214ms                        ! 1.28x slower
                    <harmonic mean>                                      117ms                          148ms                        ! 1.26x slower

                MallocBench> ~/webkit/PerformanceTests/MallocBench/run-malloc-benchmarks TC:~/scratch/Build-TCMalloc/Release/ patch:~/webkit/WebKitBuild/Release/

                                                                    TC                      patch                                Δ
                Peak Memory:
                    reddit_memory_warning                     13,836kB                   13,436kB                  ^ 1.03x smaller
                    flickr_memory_warning                     24,868kB                   25,188kB                   ! 1.01x bigger
                    theverge_memory_warning                   24,504kB                   26,636kB                   ! 1.09x bigger

                    <geometric mean>                          20,353kB                   20,812kB                   ! 1.02x bigger
                    <arithmetic mean>                         21,069kB                   21,753kB                   ! 1.03x bigger
                    <harmonic mean>                           19,570kB                   19,780kB                   ! 1.01x bigger

                Memory at End:
                    reddit_memory_warning                      8,656kB                   10,016kB                   ! 1.16x bigger
                    flickr_memory_warning                     11,844kB                   13,784kB                   ! 1.16x bigger
                    theverge_memory_warning                   18,516kB                   22,748kB                   ! 1.23x bigger

                    <geometric mean>                          12,382kB                   14,644kB                   ! 1.18x bigger
                    <arithmetic mean>                         13,005kB                   15,516kB                   ! 1.19x bigger
                    <harmonic mean>                           11,813kB                   13,867kB                   ! 1.17x bigger

                MallocBench> ~/webkit/PerformanceTests/MallocBench/run-malloc-benchmarks TC:~/scratch/Build-TCMalloc/Release/ patch:~/webkit/WebKitBuild/Release/
                                                                                                
                                                        TC                patch                         Δ
                Execution Time:
                    churn                            416ms                148ms            ^ 2.81x faster
                    list_allocate                    463ms                164ms            ^ 2.82x faster
                    tree_allocate                    292ms                127ms             ^ 2.3x faster
                    tree_churn                       157ms                120ms            ^ 1.31x faster
                    facebook                         327ms                276ms            ^ 1.18x faster
                    fragment                         335ms                129ms             ^ 2.6x faster
                    fragment_iterate                 344ms                108ms            ^ 3.19x faster
                    message_one                      386ms                258ms             ^ 1.5x faster
                    message_many                     410ms                154ms            ^ 2.66x faster
                    medium                           391ms                245ms             ^ 1.6x faster
                    big                              261ms                167ms            ^ 1.56x faster

                    <geometric mean>                 332ms                164ms            ^ 2.02x faster
                    <arithmetic mean>                344ms                172ms            ^ 1.99x faster
                    <harmonic mean>                  317ms                157ms            ^ 2.02x faster

        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::Allocator): Don't assume that each allocator's
        index corresponds with its size. Instead, use the size selection function
        explicitly. Now that we have XSmall, some small allocator entries are
        unused.

        (bmalloc::Allocator::scavenge):
        (bmalloc::Allocator::log):
        (bmalloc::Allocator::processXSmallAllocatorLog):
        (bmalloc::Allocator::allocateSlowCase):
        * bmalloc/Allocator.h:
        (bmalloc::Allocator::xSmallAllocatorFor):
        (bmalloc::Allocator::allocateFastCase):
        * bmalloc/Chunk.h:
        * bmalloc/Deallocator.cpp:
        (bmalloc::Deallocator::scavenge):
        (bmalloc::Deallocator::processObjectLog):
        (bmalloc::Deallocator::deallocateSlowCase):
        (bmalloc::Deallocator::deallocateXSmallLine):
        (bmalloc::Deallocator::allocateXSmallLine):
        * bmalloc/Deallocator.h:
        (bmalloc::Deallocator::deallocateFastCase):
        * bmalloc/Heap.cpp:
        (bmalloc::Heap::scavenge):
        (bmalloc::Heap::scavengeXSmallPages):
        (bmalloc::Heap::allocateXSmallLineSlowCase):
        * bmalloc/Heap.h:
        (bmalloc::Heap::deallocateXSmallLine):
        (bmalloc::Heap::allocateXSmallLine):
        * bmalloc/LargeChunk.h:
        (bmalloc::LargeChunk::get):
        (bmalloc::LargeChunk::endTag):
        * bmalloc/Line.h:
        * bmalloc/MediumAllocator.h:
        (bmalloc::MediumAllocator::allocate):
        (bmalloc::MediumAllocator::refill):
        * bmalloc/ObjectType.cpp:
        (bmalloc::objectType):
        * bmalloc/ObjectType.h:
        (bmalloc::isXSmall):
        (bmalloc::isSmall):
        (bmalloc::isMedium):
        (bmalloc::isLarge):
        (bmalloc::isSmallOrMedium): Deleted.
        * bmalloc/SegregatedFreeList.h: I boiler-plate copied existing code for
        handling small objects. There's probably a reasonable way to share this
        code in the future -- I'll look into that once it's stopped changing.

        * bmalloc/Sizes.h: Tweaked size classes to make Membuster happy. This
        is the main reason things got slower.

        * bmalloc/SmallAllocator.h:
        (bmalloc::SmallAllocator::allocate):
        * bmalloc/SmallTraits.h:
        * bmalloc/VMHeap.cpp:
        (bmalloc::VMHeap::allocateXSmallChunk):
        * bmalloc/VMHeap.h:
        (bmalloc::VMHeap::allocateXSmallPage):
        (bmalloc::VMHeap::deallocateXSmallPage):
        * bmalloc/XSmallAllocator.h: Added.
        (bmalloc::XSmallAllocator::isNull):
        (bmalloc::XSmallAllocator::canAllocate):
        (bmalloc::XSmallAllocator::XSmallAllocator):
        (bmalloc::XSmallAllocator::line):
        (bmalloc::XSmallAllocator::allocate):
        (bmalloc::XSmallAllocator::objectCount):
        (bmalloc::XSmallAllocator::derefCount):
        (bmalloc::XSmallAllocator::refill):
        * bmalloc/XSmallChunk.h: Added.
        * bmalloc/XSmallLine.h: Added.
        * bmalloc/XSmallPage.h: Added.
        * bmalloc/XSmallTraits.h: Added.
        * bmalloc/bmalloc.h:
        (bmalloc::api::realloc): Boiler-plate copy, as above.

2014-04-14  Geoffrey Garen  <ggaren@apple.com>

        MallocBench should scavenge explicitly instead of waiting
        https://bugs.webkit.org/show_bug.cgi?id=131661

        Reviewed by Andreas Kling.

        Added explicit scavenge support to bmalloc. This isn't a memory win,
        since bmalloc's per-thread cache is so small. But it makes testing
        simpler.

        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::~Allocator):
        (bmalloc::Allocator::scavenge):
        * bmalloc/Allocator.h:
        * bmalloc/Cache.cpp:
        (bmalloc::Cache::operator new):
        (bmalloc::Cache::operator delete):
        (bmalloc::Cache::Cache):
        (bmalloc::Cache::scavenge):
        * bmalloc/Cache.h:
        * bmalloc/Deallocator.cpp:
        (bmalloc::Deallocator::~Deallocator):
        (bmalloc::Deallocator::scavenge):
        * bmalloc/Deallocator.h: Factored existing scavenging code into helper
        functions, for reuse.

        * bmalloc/Heap.cpp:
        (bmalloc::sleep):
        (bmalloc::Heap::concurrentScavenge):
        (bmalloc::Heap::scavenge):
        (bmalloc::Heap::scavengeSmallPages):
        (bmalloc::Heap::scavengeMediumPages):
        (bmalloc::Heap::scavengeLargeRanges):
        * bmalloc/Heap.h: Made scavenge sleep duration a parameter. Forced
        scavenging -- in response to a benchmark or a low memory warning --
        wants to complete as soon as possible, so its sleep duration is 0.

        * bmalloc/bmalloc.h:
        (bmalloc::api::scavenge):
        * bmalloc/mbmalloc.cpp: Exported the scavenge API for MallocBench's use.

2014-04-14  Geoffrey Garen  <ggaren@apple.com>

        Use 4kB pages on Mac
        https://bugs.webkit.org/show_bug.cgi?id=131658

        Reviewed by Sam Weinig.

        This reduces memory use a lot on Membuster:

                                                                  base                      patch                                Δ
                Execution Time:
                    reddit_memory_warning                         18ms                       17ms                   ^ 1.06x faster
                    flickr_memory_warning                         34ms                       36ms                   ! 1.06x slower
                    theverge_memory_warning                       39ms                       41ms                   ! 1.05x slower

                    <geometric mean>                              29ms                       29ms                   ! 1.02x slower
                    <arithmetic mean>                             30ms                       31ms                   ! 1.03x slower
                    <harmonic mean>                               27ms                       27ms                    ^ 1.0x faster

                Peak Memory:
                    reddit_memory_warning                     16,412kB                   16,436kB                    ! 1.0x bigger
                    flickr_memory_warning                     30,120kB                   30,184kB                    ! 1.0x bigger
                    theverge_memory_warning                   33,408kB                   33,420kB                    ! 1.0x bigger

                    <geometric mean>                          25,466kB                   25,499kB                    ! 1.0x bigger
                    <arithmetic mean>                         26,647kB                   26,680kB                    ! 1.0x bigger
                    <harmonic mean>                           24,181kB                   24,214kB                    ! 1.0x bigger

                Memory at End:
                    reddit_memory_warning                      2,404kB                    1,920kB                  ^ 1.25x smaller
                    flickr_memory_warning                      3,764kB                    3,072kB                  ^ 1.23x smaller
                    theverge_memory_warning                    3,648kB                    3,132kB                  ^ 1.16x smaller

                    <geometric mean>                           3,208kB                    2,644kB                  ^ 1.21x smaller
                    <arithmetic mean>                          3,272kB                    2,708kB                  ^ 1.21x smaller
                    <harmonic mean>                            3,139kB                    2,574kB                  ^ 1.22x smaller


        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/BPlatform.h: Added.
        * bmalloc/VMAllocate.h: Only use 16kB pages on iOS because the page size
        is 4kB on Mac.

2014-04-14  Alexey Proskuryakov  <ap@apple.com>

        Fixed svn:ignore on bmalloc.xcodeproj, it had erroneous leading spaces.

        * bmalloc.xcodeproj: Modified property svn:ignore.

2014-04-13  Geoffrey Garen  <ggaren@apple.com>

        Fixed some mbmalloc exports
        https://bugs.webkit.org/show_bug.cgi?id=131599

        Reviewed by Ryosuke Niwa.

        * bmalloc.xcodeproj/project.pbxproj: Made some headers a private part
        of the project, so we can call them from API.

        * bmalloc/mbmalloc.cpp: Marked the mbmalloc functions with default
        visibility, so they show up as exported in the .dylib.

2014-04-09  Geoffrey Garen  <ggaren@apple.com>

        Put bmalloc headers in the right place
        https://bugs.webkit.org/show_bug.cgi?id=131464

        Reviewed by Mark Rowe.

        * Configurations/bmalloc.xcconfig: Set PRIVATE_HEADERS_FOLDER_PATH to
        specify that we don't just want to dump all of our generically-named
        headers into /usr/local/include.

2014-04-08  Geoffrey Garen  <ggaren@apple.com>

        Made bmalloc more #include friendly
        https://bugs.webkit.org/show_bug.cgi?id=131386

        Reviewed by Andreas Kling.

        Marked a bunch of headers private so they can be used from client code
        that #includes bmalloc.h.

        Renamed ASSERT macros to BASSERT. This matches their header, which already
        had to be renamed, and fixes conflicts with WTF's ASSERT macros.

        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::allocateSlowCase):
        * bmalloc/AsyncTask.h:
        (bmalloc::Function>::runSlowCase):
        * bmalloc/BAssert.h:
        * bmalloc/BoundaryTag.h:
        (bmalloc::BoundaryTag::setSize):
        * bmalloc/BoundaryTagInlines.h:
        (bmalloc::validate):
        (bmalloc::BoundaryTag::init):
        (bmalloc::BoundaryTag::deallocate):
        (bmalloc::BoundaryTag::splitLarge):
        (bmalloc::BoundaryTag::allocate):
        * bmalloc/Chunk.h:
        * bmalloc/Deallocator.cpp:
        (bmalloc::Deallocator::processObjectLog):
        (bmalloc::Deallocator::deallocateSlowCase):
        * bmalloc/Deallocator.h:
        (bmalloc::Deallocator::deallocateFastCase):
        * bmalloc/FixedVector.h:
        (bmalloc::Capacity>::operator):
        (bmalloc::Capacity>::push):
        (bmalloc::Capacity>::pop):
        (bmalloc::Capacity>::shrink):
        * bmalloc/Heap.cpp:
        (bmalloc::Heap::allocateLarge):
        * bmalloc/LargeChunk.h:
        (bmalloc::LargeChunk::get):
        (bmalloc::LargeChunk::endTag):
        * bmalloc/Line.h:
        (bmalloc::Line<Traits>::concurrentRef):
        (bmalloc::Line<Traits>::deref):
        * bmalloc/MediumAllocator.h:
        (bmalloc::MediumAllocator::allocate):
        * bmalloc/ObjectType.h:
        (bmalloc::isSmall):
        * bmalloc/Page.h:
        (bmalloc::Page<Traits>::ref):
        (bmalloc::Page<Traits>::deref):
        * bmalloc/PerThread.h:
        (bmalloc::PerThread<T>::getSlowCase):
        * bmalloc/SegregatedFreeList.cpp:
        (bmalloc::SegregatedFreeList::SegregatedFreeList):
        (bmalloc::SegregatedFreeList::insert):
        * bmalloc/SmallAllocator.h:
        (bmalloc::SmallAllocator::allocate):
        (bmalloc::SmallAllocator::refill):
        * bmalloc/Syscall.h:
        * bmalloc/VMAllocate.h:
        (bmalloc::vmValidate):
        (bmalloc::vmAllocate):
        (bmalloc::vmDeallocatePhysicalPagesSloppy):
        * bmalloc/Vector.h:
        (bmalloc::Vector<T>::operator):
        (bmalloc::Vector<T>::pop):
        (bmalloc::Vector<T>::shrink):
        * bmalloc/XLargeChunk.h:
        (bmalloc::XLargeChunk::range):
        (bmalloc::XLargeChunk::size):

2014-04-08  Geoffrey Garen  <ggaren@apple.com>

        Removed an unused file.

        Unreviewed.

        * bmalloc/AsyncTask.cpp: Removed.

2014-04-07  Geoffrey Garen  <ggaren@apple.com>

        Build bmalloc on Mac
        https://bugs.webkit.org/show_bug.cgi?id=131333

        Reviewed by Mark Rowe.

        * Makefile: Added. For make clients.

        These files are required for building any project in WebKit. I copied
        them from WTF:
        * Configurations: Added.
        * Configurations/Base.xcconfig: Added.
        * Configurations/DebugRelease.xcconfig: Added.
        * Configurations/bmalloc.xcconfig: Added.
        * Configurations/iOS.xcconfig: Added.
        * Configurations/mbmalloc.xcconfig: Added.

        * bmalloc.xcodeproj/project.pbxproj: I removed per-project-file stuff
        from here because everything is in .xcconfig files now.

        I had to fix a bunch of minor warnings, since they're enabled in our
        .xcconfig files:

        * bmalloc/AsyncTask.h:
        (bmalloc::Function>::AsyncTask):
        * bmalloc/BAssert.h:
        * bmalloc/BoundaryTagInlines.h:
        (bmalloc::validate):
        * bmalloc/Heap.cpp:
        (bmalloc::Heap::Heap):
        (bmalloc::Heap::allocateLarge):
        (bmalloc::Heap::deallocateLarge):
        * bmalloc/Mutex.h:
        (bmalloc::Mutex::Mutex): Deleted.
        * bmalloc/VMAllocate.h:
        (bmalloc::vmValidate):
        * bmalloc/mbmalloc.cpp:

2014-04-07  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: Fixed a leak in the per-thread cache
        https://bugs.webkit.org/show_bug.cgi?id=131330

        Reviewed by Andreas Kling.

        Remember to deallocate our line caches upon thread exit.

        * bmalloc/Deallocator.cpp:
        (bmalloc::Deallocator::~Deallocator):

2014-04-07  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: rolled out the tryLock experiment
        https://bugs.webkit.org/show_bug.cgi?id=131328

        Reviewed by Andreas Kling.

        It wasn't a speedup.

        * bmalloc.xcodeproj/project.pbxproj:
        * bmalloc/Allocator.cpp:
        (bmalloc::Allocator::processSmallAllocatorLog):
        (bmalloc::Allocator::processMediumAllocatorLog):
        * bmalloc/Deallocator.cpp:
        (bmalloc::Deallocator::processObjectLog):
        (bmalloc::Deallocator::deallocateSlowCase):
        (bmalloc::Deallocator::deallocateSmallLine):
        (bmalloc::Deallocator::deallocateMediumLine):
        * bmalloc/Deallocator.h:
        (bmalloc::Deallocator::deallocateFastCase):
        * bmalloc/Heap.h:
        (bmalloc::Heap::deallocateSmallLine):
        (bmalloc::Heap::deallocateMediumLine):
        * bmalloc/Line.h:
        (bmalloc::Line<Traits>::deref):
        * bmalloc/Page.h:
        (bmalloc::Page<Traits>::deref):

2014-04-07  Geoffrey Garen  <ggaren@apple.com>

        bmalloc
        https://bugs.webkit.org/show_bug.cgi?id=131170

        Reviewed by Andreas Kling.

        Initial commit.

        * bmalloc: Added.
        * bmalloc.xcodeproj: Added.
        * bmalloc.xcodeproj/project.pbxproj: Added.
        * bmalloc/Algorithm.h: Added.
        (bmalloc::max):
        (bmalloc::min):
        (bmalloc::mask):
        (bmalloc::test):
        (bmalloc::roundUpToMultipleOf):
        (bmalloc::roundDownToMultipleOf):
        (bmalloc::sizeOf):
        (bmalloc::bitCount):
        (bmalloc::isPowerOfTwo):
        * bmalloc/Allocator.cpp: Added.
        (bmalloc::Allocator::Allocator):
        (bmalloc::Allocator::~Allocator):
        (bmalloc::Allocator::log):
        (bmalloc::Allocator::processSmallAllocatorLog):
        (bmalloc::Allocator::processMediumAllocatorLog):
        (bmalloc::Allocator::allocateLarge):
        (bmalloc::Allocator::allocateXLarge):
        (bmalloc::Allocator::allocateMedium):
        (bmalloc::Allocator::allocateSlowCase):
        * bmalloc/Allocator.h: Added.
        (bmalloc::Allocator::smallAllocatorFor):
        (bmalloc::Allocator::allocateFastCase):
        (bmalloc::Allocator::allocate):
        * bmalloc/AsyncTask.cpp: Added.
        (bmalloc::AsyncTask<Function>::runSlowCase):
        (bmalloc::AsyncTask<Function>::pthreadEntryPoint):
        (bmalloc::AsyncTask<Function>::entryPoint):
        * bmalloc/AsyncTask.h: Added.
        (bmalloc::Function>::AsyncTask):
        (bmalloc::Function>::join):
        (bmalloc::Function>::run):
        (bmalloc::Function>::runSlowCase):
        (bmalloc::Function>::pthreadEntryPoint):
        (bmalloc::Function>::entryPoint):
        * bmalloc/BAssert.h: Added.
        * bmalloc/BeginTag.h: Added.
        (bmalloc::BeginTag::isInFreeList):
        * bmalloc/BoundaryTag.h: Added.
        (bmalloc::BoundaryTag::isXLarge):
        (bmalloc::BoundaryTag::setXLarge):
        (bmalloc::BoundaryTag::isFree):
        (bmalloc::BoundaryTag::setFree):
        (bmalloc::BoundaryTag::isEnd):
        (bmalloc::BoundaryTag::setEnd):
        (bmalloc::BoundaryTag::hasPhysicalPages):
        (bmalloc::BoundaryTag::setHasPhysicalPages):
        (bmalloc::BoundaryTag::isNull):
        (bmalloc::BoundaryTag::clear):
        (bmalloc::BoundaryTag::size):
        (bmalloc::BoundaryTag::setSize):
        (bmalloc::BoundaryTag::prev):
        (bmalloc::BoundaryTag::next):
        * bmalloc/BoundaryTagInlines.h: Added.
        (bmalloc::validate):
        (bmalloc::validatePrev):
        (bmalloc::validateNext):
        (bmalloc::BoundaryTag::init):
        (bmalloc::BoundaryTag::mergeLargeLeft):
        (bmalloc::BoundaryTag::mergeLargeRight):
        (bmalloc::BoundaryTag::mergeLarge):
        (bmalloc::BoundaryTag::deallocate):
        (bmalloc::BoundaryTag::splitLarge):
        (bmalloc::BoundaryTag::allocate):
        * bmalloc/Cache.cpp: Added.
        (bmalloc::Cache::operator new):
        (bmalloc::Cache::operator delete):
        (bmalloc::Cache::Cache):
        (bmalloc::Cache::allocateSlowCase):
        (bmalloc::Cache::allocateSlowCaseNullCache):
        (bmalloc::Cache::deallocateSlowCase):
        (bmalloc::Cache::deallocateSlowCaseNullCache):
        * bmalloc/Cache.h: Added.
        (bmalloc::Cache::allocator):
        (bmalloc::Cache::deallocator):
        (bmalloc::Cache::allocateFastCase):
        (bmalloc::Cache::deallocateFastCase):
        (bmalloc::Cache::allocate):
        (bmalloc::Cache::deallocate):
        * bmalloc/Chunk.h: Added.
        (bmalloc::Chunk::begin):
        (bmalloc::Chunk::end):
        (bmalloc::Chunk::lines):
        (bmalloc::Chunk::pages):
        * bmalloc/Deallocator.cpp: Added.
        (bmalloc::Deallocator::Deallocator):
        (bmalloc::Deallocator::~Deallocator):
        (bmalloc::Deallocator::deallocateLarge):
        (bmalloc::Deallocator::deallocateXLarge):
        (bmalloc::Deallocator::processObjectLog):
        (bmalloc::Deallocator::deallocateSlowCase):
        (bmalloc::Deallocator::deallocateSmallLine):
        (bmalloc::Deallocator::allocateSmallLine):
        (bmalloc::Deallocator::deallocateMediumLine):
        (bmalloc::Deallocator::allocateMediumLine):
        * bmalloc/Deallocator.h: Added.
        (bmalloc::Deallocator::deallocateFastCase):
        (bmalloc::Deallocator::deallocate):
        * bmalloc/EndTag.h: Added.
        (bmalloc::EndTag::operator=):
        * bmalloc/FixedVector.h: Added.
        (bmalloc::FixedVector::begin):
        (bmalloc::FixedVector::end):
        (bmalloc::FixedVector::size):
        (bmalloc::FixedVector::capacity):
        (bmalloc::FixedVector::clear):
        (bmalloc::FixedVector::isEmpty):
        (bmalloc::Capacity>::FixedVector):
        (bmalloc::Capacity>::operator):
        (bmalloc::Capacity>::push):
        (bmalloc::Capacity>::pop):
        (bmalloc::Capacity>::shrink):
        * bmalloc/Heap.cpp: Added.
        (bmalloc::sleep):
        (bmalloc::Heap::Heap):
        (bmalloc::Heap::concurrentScavenge):
        (bmalloc::Heap::scavengeSmallPages):
        (bmalloc::Heap::scavengeMediumPages):
        (bmalloc::Heap::scavengeLargeRanges):
        (bmalloc::Heap::allocateSmallLineSlowCase):
        (bmalloc::Heap::allocateMediumLineSlowCase):
        (bmalloc::Heap::allocateXLarge):
        (bmalloc::Heap::deallocateXLarge):
        (bmalloc::Heap::allocateLarge):
        (bmalloc::Heap::deallocateLarge):
        * bmalloc/Heap.h: Added.
        (bmalloc::Heap::deallocateSmallLine):
        (bmalloc::Heap::allocateSmallLine):
        (bmalloc::Heap::deallocateMediumLine):
        (bmalloc::Heap::allocateMediumLine):
        * bmalloc/Inline.h: Added.
        * bmalloc/LargeChunk.h: Added.
        (bmalloc::LargeChunk::begin):
        (bmalloc::LargeChunk::end):
        (bmalloc::LargeChunk::create):
        (bmalloc::LargeChunk::get):
        (bmalloc::LargeChunk::beginTag):
        (bmalloc::LargeChunk::endTag):
        * bmalloc/Line.h: Added.
        (bmalloc::Line<Traits>::begin):
        (bmalloc::Line<Traits>::end):
        (bmalloc::Line<Traits>::concurrentRef):
        (bmalloc::Line<Traits>::deref):
        * bmalloc/MediumAllocator.h: Added.
        (bmalloc::MediumAllocator::isNull):
        (bmalloc::MediumAllocator::MediumAllocator):
        (bmalloc::MediumAllocator::line):
        (bmalloc::MediumAllocator::allocate):
        (bmalloc::MediumAllocator::derefCount):
        (bmalloc::MediumAllocator::refill):
        * bmalloc/MediumChunk.h: Added.
        * bmalloc/MediumLine.h: Added.
        * bmalloc/MediumPage.h: Added.
        * bmalloc/MediumTraits.h: Added.
        * bmalloc/Mutex.cpp: Added.
        (bmalloc::Mutex::lockSlowCase):
        * bmalloc/Mutex.h: Added.
        (bmalloc::Mutex::Mutex):
        (bmalloc::Mutex::try_lock):
        (bmalloc::Mutex::lock):
        (bmalloc::Mutex::unlock):
        * bmalloc/ObjectType.cpp: Added.
        (bmalloc::objectType):
        * bmalloc/ObjectType.h: Added.
        (bmalloc::isSmallOrMedium):
        (bmalloc::isSmall):
        * bmalloc/Page.h: Added.
        (bmalloc::Page<Traits>::ref):
        (bmalloc::Page<Traits>::deref):
        (bmalloc::Page<Traits>::refCount):
        * bmalloc/PerProcess.h: Added.
        (bmalloc::PerProcess::mutex):
        (bmalloc::PerProcess<T>::getFastCase):
        (bmalloc::PerProcess<T>::get):
        (bmalloc::PerProcess<T>::getSlowCase):
        * bmalloc/PerThread.h: Added.
        (bmalloc::PerThreadStorage<Cache>::get):
        (bmalloc::PerThreadStorage<Cache>::init):
        (bmalloc::PerThreadStorage::get):
        (bmalloc::PerThreadStorage::init):
        (bmalloc::PerThread<T>::getFastCase):
        (bmalloc::PerThread<T>::get):
        (bmalloc::PerThread<T>::destructor):
        (bmalloc::PerThread<T>::getSlowCase):
        * bmalloc/Range.h: Added.
        (bmalloc::Range::Range):
        (bmalloc::Range::begin):
        (bmalloc::Range::end):
        (bmalloc::Range::size):
        (bmalloc::Range::operator!):
        (bmalloc::Range::operator<):
        * bmalloc/SegregatedFreeList.cpp: Added.
        (bmalloc::SegregatedFreeList::SegregatedFreeList):
        (bmalloc::SegregatedFreeList::insert):
        (bmalloc::SegregatedFreeList::takeGreedy):
        (bmalloc::SegregatedFreeList::take):
        * bmalloc/SegregatedFreeList.h: Added.
        * bmalloc/Sizes.h: Added.
        * bmalloc/SmallAllocator.h: Added.
        (bmalloc::SmallAllocator::isNull):
        (bmalloc::SmallAllocator::canAllocate):
        (bmalloc::SmallAllocator::SmallAllocator):
        (bmalloc::SmallAllocator::line):
        (bmalloc::SmallAllocator::allocate):
        (bmalloc::SmallAllocator::objectCount):
        (bmalloc::SmallAllocator::derefCount):
        (bmalloc::SmallAllocator::refill):
        * bmalloc/SmallChunk.h: Added.
        * bmalloc/SmallLine.h: Added.
        * bmalloc/SmallPage.h: Added.
        * bmalloc/SmallTraits.h: Added.
        * bmalloc/Syscall.h: Added.
        * bmalloc/VMAllocate.h: Added.
        (bmalloc::vmSize):
        (bmalloc::vmValidate):
        (bmalloc::vmAllocate):
        (bmalloc::vmDeallocate):
        (bmalloc::vmDeallocatePhysicalPages):
        (bmalloc::vmAllocatePhysicalPages):
        (bmalloc::vmDeallocatePhysicalPagesSloppy):
        (bmalloc::vmAllocatePhysicalPagesSloppy):
        * bmalloc/VMHeap.cpp: Added.
        (bmalloc::VMHeap::VMHeap):
        (bmalloc::VMHeap::allocateSmallChunk):
        (bmalloc::VMHeap::allocateMediumChunk):
        (bmalloc::VMHeap::allocateLargeChunk):
        * bmalloc/VMHeap.h: Added.
        (bmalloc::VMHeap::allocateSmallPage):
        (bmalloc::VMHeap::allocateMediumPage):
        (bmalloc::VMHeap::allocateLargeRange):
        (bmalloc::VMHeap::deallocateSmallPage):
        (bmalloc::VMHeap::deallocateMediumPage):
        (bmalloc::VMHeap::deallocateLargeRange):
        * bmalloc/Vector.h: Added.
        (bmalloc::Vector::begin):
        (bmalloc::Vector::end):
        (bmalloc::Vector::size):
        (bmalloc::Vector::capacity):
        (bmalloc::Vector::last):
        (bmalloc::Vector::pop):
        (bmalloc::Vector<T>::Vector):
        (bmalloc::Vector<T>::~Vector):
        (bmalloc::Vector<T>::operator):
        (bmalloc::Vector<T>::push):
        (bmalloc::Vector<T>::pop):
        (bmalloc::Vector<T>::shrink):
        (bmalloc::Vector<T>::reallocateBuffer):
        (bmalloc::Vector<T>::shrinkCapacity):
        (bmalloc::Vector<T>::growCapacity):
        * bmalloc/XLargeChunk.h: Added.
        (bmalloc::XLargeChunk::get):
        (bmalloc::XLargeChunk::begin):
        (bmalloc::XLargeChunk::XLargeChunk):
        (bmalloc::XLargeChunk::create):
        (bmalloc::XLargeChunk::destroy):
        (bmalloc::XLargeChunk::range):
        (bmalloc::XLargeChunk::size):
        * bmalloc/bmalloc.h: Added.
        (bmalloc::api::malloc):
        (bmalloc::api::free):
        (bmalloc::api::realloc):
        * bmalloc/mbmalloc.cpp: Added.

