<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[197066] releases/WebKitGTK/webkit-2.12/Source/bmalloc</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/197066">197066</a></dd>
<dt>Author</dt> <dd>carlosgc@webkit.org</dd>
<dt>Date</dt> <dd>2016-02-25 01:14:31 -0800 (Thu, 25 Feb 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Merge <a href="http://trac.webkit.org/projects/webkit/changeset/196840">r196840</a> - 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.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#releasesWebKitGTKwebkit212SourcebmallocChangeLog">releases/WebKitGTK/webkit-2.12/Source/bmalloc/ChangeLog</a></li>
<li><a href="#releasesWebKitGTKwebkit212SourcebmallocbmallocBoundaryTagh">releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/BoundaryTag.h</a></li>
<li><a href="#releasesWebKitGTKwebkit212SourcebmallocbmallocFreeListcpp">releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/FreeList.cpp</a></li>
<li><a href="#releasesWebKitGTKwebkit212SourcebmallocbmallocFreeListh">releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/FreeList.h</a></li>
<li><a href="#releasesWebKitGTKwebkit212SourcebmallocbmallocHeapcpp">releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/Heap.cpp</a></li>
<li><a href="#releasesWebKitGTKwebkit212SourcebmallocbmallocHeaph">releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/Heap.h</a></li>
<li><a href="#releasesWebKitGTKwebkit212SourcebmallocbmallocLargeObjecth">releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/LargeObject.h</a></li>
<li><a href="#releasesWebKitGTKwebkit212SourcebmallocbmallocSegregatedFreeListcpp">releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/SegregatedFreeList.cpp</a></li>
<li><a href="#releasesWebKitGTKwebkit212SourcebmallocbmallocSegregatedFreeListh">releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/SegregatedFreeList.h</a></li>
<li><a href="#releasesWebKitGTKwebkit212SourcebmallocbmallocVMAllocateh">releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/VMAllocate.h</a></li>
<li><a href="#releasesWebKitGTKwebkit212SourcebmallocbmallocVMHeapcpp">releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/VMHeap.cpp</a></li>
<li><a href="#releasesWebKitGTKwebkit212SourcebmallocbmallocVMHeaph">releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/VMHeap.h</a></li>
<li><a href="#releasesWebKitGTKwebkit212Sourcebmallocbmallocxcodeprojprojectpbxproj">releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc.xcodeproj/project.pbxproj</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#releasesWebKitGTKwebkit212SourcebmallocbmallocVMStateh">releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/VMState.h</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#releasesWebKitGTKwebkit212SourcebmallocbmallocOwnerh">releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/Owner.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="releasesWebKitGTKwebkit212SourcebmallocChangeLog"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.12/Source/bmalloc/ChangeLog (197065 => 197066)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/Source/bmalloc/ChangeLog        2016-02-25 08:37:49 UTC (rev 197065)
+++ releases/WebKitGTK/webkit-2.12/Source/bmalloc/ChangeLog        2016-02-25 09:14:31 UTC (rev 197066)
</span><span class="lines">@@ -1,3 +1,105 @@
</span><ins>+2016-02-19  Michael Saboff  &lt;msaboff@apple.com&gt;
+
+        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.
+
</ins><span class="cx"> 2016-02-12  Michael Saboff  &lt;msaboff@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         BASSERTs added in r196421 are causing debug test failures
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit212SourcebmallocbmallocBoundaryTagh"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/BoundaryTag.h (197065 => 197066)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/BoundaryTag.h        2016-02-25 08:37:49 UTC (rev 197065)
+++ releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/BoundaryTag.h        2016-02-25 09:14:31 UTC (rev 197066)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2014, 2015 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2014-2016 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -27,9 +27,9 @@
</span><span class="cx"> #define BoundaryTag_h
</span><span class="cx"> 
</span><span class="cx"> #include &quot;BAssert.h&quot;
</span><del>-#include &quot;Owner.h&quot;
</del><span class="cx"> #include &quot;Range.h&quot;
</span><span class="cx"> #include &quot;Sizes.h&quot;
</span><ins>+#include &quot;VMState.h&quot;
</ins><span class="cx"> #include &lt;cstring&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace bmalloc {
</span><span class="lines">@@ -50,9 +50,9 @@
</span><span class="cx">     bool isEnd() { return m_isEnd; }
</span><span class="cx">     void setEnd(bool isEnd) { m_isEnd = isEnd; }
</span><span class="cx"> 
</span><del>-    Owner owner() { return static_cast&lt;Owner&gt;(m_owner); }
-    void setOwner(Owner owner) { m_owner = static_cast&lt;unsigned&gt;(owner); }
-    
</del><ins>+    VMState vmState() { return VMState(m_vmState); }
+    void setVMState(VMState vmState) { m_vmState = static_cast&lt;unsigned&gt;(vmState); }
+
</ins><span class="cx">     bool isMarked() { return m_isMarked; }
</span><span class="cx">     void setMarked(bool isMarked) { m_isMarked = isMarked; }
</span><span class="cx"> 
</span><span class="lines">@@ -71,7 +71,7 @@
</span><span class="cx">     BeginTag* next();
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    static const size_t flagBits = 4;
</del><ins>+    static const size_t flagBits = 5;
</ins><span class="cx">     static const size_t compactBeginBits = 4;
</span><span class="cx">     static const size_t sizeBits = bitCount&lt;unsigned&gt;() - flagBits - compactBeginBits;
</span><span class="cx"> 
</span><span class="lines">@@ -85,7 +85,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool m_isFree: 1;
</span><span class="cx">     bool m_isEnd: 1;
</span><del>-    unsigned m_owner: 1;
</del><ins>+    unsigned m_vmState: 2;
</ins><span class="cx">     bool m_isMarked: 1;
</span><span class="cx">     unsigned m_compactBegin: compactBeginBits;
</span><span class="cx">     unsigned m_size: sizeBits;
</span><span class="lines">@@ -122,7 +122,7 @@
</span><span class="cx"> {
</span><span class="cx">     setRange(Range(nullptr, largeMin));
</span><span class="cx">     setFree(false);
</span><del>-    setOwner(Owner::VMHeap);
</del><ins>+    setVMState(VMState::Virtual);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace bmalloc
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit212SourcebmallocbmallocFreeListcpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/FreeList.cpp (197065 => 197066)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/FreeList.cpp        2016-02-25 08:37:49 UTC (rev 197065)
+++ releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/FreeList.cpp        2016-02-25 09:14:31 UTC (rev 197066)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2014, 2015 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2014-2016 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -37,11 +37,11 @@
</span><span class="cx"> // invalid entries as we discover them during allocation, and we also garbage
</span><span class="cx"> // collect the free list as it grows.
</span><span class="cx"> 
</span><del>-LargeObject FreeList::takeGreedy(Owner owner)
</del><ins>+LargeObject FreeList::takeGreedy(VMState::HasPhysical hasPhysical)
</ins><span class="cx"> {
</span><span class="cx">     for (size_t i = 0; i &lt; m_vector.size(); ++i) {
</span><span class="cx">         LargeObject largeObject(LargeObject::DoNotValidate, m_vector[i].begin());
</span><del>-        if (!largeObject.isValidAndFree(owner, m_vector[i].size())) {
</del><ins>+        if (!largeObject.isValidAndFree(hasPhysical, m_vector[i].size())) {
</ins><span class="cx">             m_vector.pop(i--);
</span><span class="cx">             continue;
</span><span class="cx">         }
</span><span class="lines">@@ -53,14 +53,14 @@
</span><span class="cx">     return LargeObject();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-LargeObject FreeList::take(Owner owner, size_t size)
</del><ins>+LargeObject FreeList::take(VMState::HasPhysical hasPhysical, size_t size)
</ins><span class="cx"> {
</span><span class="cx">     LargeObject candidate;
</span><span class="cx">     size_t candidateIndex;
</span><span class="cx">     size_t begin = m_vector.size() &gt; freeListSearchDepth ? m_vector.size() - freeListSearchDepth : 0;
</span><span class="cx">     for (size_t i = begin; i &lt; m_vector.size(); ++i) {
</span><span class="cx">         LargeObject largeObject(LargeObject::DoNotValidate, m_vector[i].begin());
</span><del>-        if (!largeObject.isValidAndFree(owner, m_vector[i].size())) {
</del><ins>+        if (!largeObject.isValidAndFree(hasPhysical, m_vector[i].size())) {
</ins><span class="cx">             m_vector.pop(i--);
</span><span class="cx">             continue;
</span><span class="cx">         }
</span><span class="lines">@@ -80,7 +80,7 @@
</span><span class="cx">     return candidate;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-LargeObject FreeList::take(Owner owner, size_t alignment, size_t size, size_t unalignedSize)
</del><ins>+LargeObject FreeList::take(VMState::HasPhysical hasPhysical, size_t alignment, size_t size, size_t unalignedSize)
</ins><span class="cx"> {
</span><span class="cx">     BASSERT(isPowerOfTwo(alignment));
</span><span class="cx">     size_t alignmentMask = alignment - 1;
</span><span class="lines">@@ -90,7 +90,7 @@
</span><span class="cx">     size_t begin = m_vector.size() &gt; freeListSearchDepth ? m_vector.size() - freeListSearchDepth : 0;
</span><span class="cx">     for (size_t i = begin; i &lt; m_vector.size(); ++i) {
</span><span class="cx">         LargeObject largeObject(LargeObject::DoNotValidate, m_vector[i].begin());
</span><del>-        if (!largeObject.isValidAndFree(owner, m_vector[i].size())) {
</del><ins>+        if (!largeObject.isValidAndFree(hasPhysical, m_vector[i].size())) {
</ins><span class="cx">             m_vector.pop(i--);
</span><span class="cx">             continue;
</span><span class="cx">         }
</span><span class="lines">@@ -113,11 +113,11 @@
</span><span class="cx">     return candidate;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void FreeList::removeInvalidAndDuplicateEntries(Owner owner)
</del><ins>+void FreeList::removeInvalidAndDuplicateEntries(VMState::HasPhysical hasPhysical)
</ins><span class="cx"> {
</span><span class="cx">     for (size_t i = 0; i &lt; m_vector.size(); ++i) {
</span><span class="cx">         LargeObject largeObject(LargeObject::DoNotValidate, m_vector[i].begin());
</span><del>-        if (!largeObject.isValidAndFree(owner, m_vector[i].size())) {
</del><ins>+        if (!largeObject.isValidAndFree(hasPhysical, m_vector[i].size())) {
</ins><span class="cx">             m_vector.pop(i--);
</span><span class="cx">             continue;
</span><span class="cx">         }
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit212SourcebmallocbmallocFreeListh"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/FreeList.h (197065 => 197066)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/FreeList.h        2016-02-25 08:37:49 UTC (rev 197065)
+++ releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/FreeList.h        2016-02-25 09:14:31 UTC (rev 197066)
</span><span class="lines">@@ -37,15 +37,15 @@
</span><span class="cx"> public:
</span><span class="cx">     FreeList();
</span><span class="cx"> 
</span><del>-    void push(Owner, const LargeObject&amp;);
</del><ins>+    void push(VMState::HasPhysical, const LargeObject&amp;);
</ins><span class="cx"> 
</span><del>-    LargeObject take(Owner, size_t);
-    LargeObject take(Owner, size_t alignment, size_t, size_t unalignedSize);
-    
-    LargeObject takeGreedy(Owner);
</del><ins>+    LargeObject take(VMState::HasPhysical, size_t);
+    LargeObject take(VMState::HasPhysical, size_t alignment, size_t, size_t unalignedSize);
</ins><span class="cx"> 
</span><del>-    void removeInvalidAndDuplicateEntries(Owner);
-    
</del><ins>+    LargeObject takeGreedy(VMState::HasPhysical);
+
+    void removeInvalidAndDuplicateEntries(VMState::HasPhysical);
+
</ins><span class="cx"> private:
</span><span class="cx">     Vector&lt;Range&gt; m_vector;
</span><span class="cx">     size_t m_limit;
</span><span class="lines">@@ -57,13 +57,14 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline void FreeList::push(Owner owner, const LargeObject&amp; largeObject)
</del><ins>+inline void FreeList::push(VMState::HasPhysical hasPhysical, const LargeObject&amp; largeObject)
</ins><span class="cx"> {
</span><span class="cx">     BASSERT(largeObject.isFree());
</span><ins>+    BASSERT(largeObject.vmState().hasPhysical() == static_cast&lt;bool&gt;(hasPhysical));
</ins><span class="cx">     BASSERT(!largeObject.prevCanMerge());
</span><span class="cx">     BASSERT(!largeObject.nextCanMerge());
</span><span class="cx">     if (m_vector.size() == m_limit) {
</span><del>-        removeInvalidAndDuplicateEntries(owner);
</del><ins>+        removeInvalidAndDuplicateEntries(hasPhysical);
</ins><span class="cx">         m_limit = std::max(m_vector.size() * freeListGrowFactor, freeListSearchDepth);
</span><span class="cx">     }
</span><span class="cx">     m_vector.push(largeObject.range());
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit212SourcebmallocbmallocHeapcpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/Heap.cpp (197065 => 197066)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/Heap.cpp        2016-02-25 08:37:49 UTC (rev 197065)
+++ releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/Heap.cpp        2016-02-25 09:14:31 UTC (rev 197066)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2014, 2015 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2014-2016 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -37,7 +37,7 @@
</span><span class="cx"> namespace bmalloc {
</span><span class="cx"> 
</span><span class="cx"> Heap::Heap(std::lock_guard&lt;StaticMutex&gt;&amp;)
</span><del>-    : m_largeObjects(Owner::Heap)
</del><ins>+    : m_largeObjects(VMState::HasPhysical::True)
</ins><span class="cx">     , m_isAllocatingPages(false)
</span><span class="cx">     , m_scavenger(*this, &amp;Heap::concurrentScavenge)
</span><span class="cx"> {
</span><span class="lines">@@ -346,18 +346,8 @@
</span><span class="cx">     lock.lock();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void* Heap::allocateLarge(std::lock_guard&lt;StaticMutex&gt;&amp;, size_t size)
</del><ins>+inline LargeObject&amp; Heap::splitAndAllocate(LargeObject&amp; largeObject, size_t size)
</ins><span class="cx"> {
</span><del>-    BASSERT(size &lt;= largeMax);
-    BASSERT(size &gt;= largeMin);
-    BASSERT(size == roundUpToMultipleOf&lt;largeAlignment&gt;(size));
-    
-    LargeObject largeObject = m_largeObjects.take(size);
-    if (!largeObject) {
-        m_isAllocatingPages = true;
-        largeObject = m_vmHeap.allocateLargeObject(size);
-    }
-
</del><span class="cx">     BASSERT(largeObject.isFree());
</span><span class="cx"> 
</span><span class="cx">     LargeObject nextLargeObject;
</span><span class="lines">@@ -367,35 +357,19 @@
</span><span class="cx">         largeObject = split.first;
</span><span class="cx">         nextLargeObject = split.second;
</span><span class="cx">     }
</span><del>-    
</del><ins>+
</ins><span class="cx">     largeObject.setFree(false);
</span><del>-    
</del><ins>+
</ins><span class="cx">     if (nextLargeObject) {
</span><span class="cx">         BASSERT(!nextLargeObject.nextCanMerge());
</span><span class="cx">         m_largeObjects.insert(nextLargeObject);
</span><span class="cx">     }
</span><del>-    
-    return largeObject.begin();
</del><ins>+
+    return largeObject;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void* Heap::allocateLarge(std::lock_guard&lt;StaticMutex&gt;&amp;, size_t alignment, size_t size, size_t unalignedSize)
</del><ins>+inline LargeObject&amp; Heap::splitAndAllocate(LargeObject&amp; largeObject, size_t alignment, size_t size)
</ins><span class="cx"> {
</span><del>-    BASSERT(size &lt;= largeMax);
-    BASSERT(size &gt;= largeMin);
-    BASSERT(size == roundUpToMultipleOf&lt;largeAlignment&gt;(size));
-    BASSERT(unalignedSize &lt;= largeMax);
-    BASSERT(unalignedSize &gt;= largeMin);
-    BASSERT(unalignedSize == roundUpToMultipleOf&lt;largeAlignment&gt;(unalignedSize));
-    BASSERT(alignment &lt;= largeChunkSize / 2);
-    BASSERT(alignment &gt;= largeAlignment);
-    BASSERT(isPowerOfTwo(alignment));
-
-    LargeObject largeObject = m_largeObjects.take(alignment, size, unalignedSize);
-    if (!largeObject) {
-        m_isAllocatingPages = true;
-        largeObject = m_vmHeap.allocateLargeObject(alignment, size, unalignedSize);
-    }
-
</del><span class="cx">     LargeObject prevLargeObject;
</span><span class="cx">     LargeObject nextLargeObject;
</span><span class="cx"> 
</span><span class="lines">@@ -408,13 +382,13 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     BASSERT(largeObject.isFree());
</span><del>-    
</del><ins>+
</ins><span class="cx">     if (largeObject.size() - size &gt; largeMin) {
</span><span class="cx">         std::pair&lt;LargeObject, LargeObject&gt; split = largeObject.split(size);
</span><span class="cx">         largeObject = split.first;
</span><span class="cx">         nextLargeObject = split.second;
</span><span class="cx">     }
</span><del>-    
</del><ins>+
</ins><span class="cx">     largeObject.setFree(false);
</span><span class="cx"> 
</span><span class="cx">     if (prevLargeObject) {
</span><span class="lines">@@ -427,9 +401,59 @@
</span><span class="cx">         m_largeObjects.insert(merged);
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    return largeObject;
+}
+
+void* Heap::allocateLarge(std::lock_guard&lt;StaticMutex&gt;&amp;, size_t size)
+{
+    BASSERT(size &lt;= largeMax);
+    BASSERT(size &gt;= largeMin);
+    BASSERT(size == roundUpToMultipleOf&lt;largeAlignment&gt;(size));
+
+    LargeObject largeObject = m_largeObjects.take(size);
+    if (!largeObject)
+        largeObject = m_vmHeap.allocateLargeObject(size);
+
+    if (largeObject.vmState().hasVirtual()) {
+        m_isAllocatingPages = true;
+        // We commit before we split in order to avoid split/merge commit/decommit churn.
+        vmAllocatePhysicalPagesSloppy(largeObject.begin(), largeObject.size());
+        largeObject.setVMState(VMState::Physical);
+    }
+
+    largeObject = splitAndAllocate(largeObject, size);
+
</ins><span class="cx">     return largeObject.begin();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void* Heap::allocateLarge(std::lock_guard&lt;StaticMutex&gt;&amp;, size_t alignment, size_t size, size_t unalignedSize)
+{
+    BASSERT(size &lt;= largeMax);
+    BASSERT(size &gt;= largeMin);
+    BASSERT(size == roundUpToMultipleOf&lt;largeAlignment&gt;(size));
+    BASSERT(unalignedSize &lt;= largeMax);
+    BASSERT(unalignedSize &gt;= largeMin);
+    BASSERT(unalignedSize == roundUpToMultipleOf&lt;largeAlignment&gt;(unalignedSize));
+    BASSERT(alignment &lt;= largeChunkSize / 2);
+    BASSERT(alignment &gt;= largeAlignment);
+    BASSERT(isPowerOfTwo(alignment));
+
+    LargeObject largeObject = m_largeObjects.take(alignment, size, unalignedSize);
+    if (!largeObject)
+        largeObject = m_vmHeap.allocateLargeObject(alignment, size, unalignedSize);
+
+    if (largeObject.vmState().hasVirtual()) {
+        m_isAllocatingPages = true;
+        // We commit before we split in order to avoid split/merge commit/decommit churn.
+        vmAllocatePhysicalPagesSloppy(largeObject.begin(), largeObject.size());
+        largeObject.setVMState(VMState::Physical);
+    }
+
+    largeObject = splitAndAllocate(largeObject, alignment, size);
+
+    return largeObject.begin();
+}
+
</ins><span class="cx"> void Heap::deallocateLarge(std::lock_guard&lt;StaticMutex&gt;&amp;, const LargeObject&amp; largeObject)
</span><span class="cx"> {
</span><span class="cx">     BASSERT(!largeObject.isFree());
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit212SourcebmallocbmallocHeaph"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/Heap.h (197065 => 197066)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/Heap.h        2016-02-25 08:37:49 UTC (rev 197065)
+++ releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/Heap.h        2016-02-25 09:14:31 UTC (rev 197066)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2014, 2015 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2014-2016 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -85,7 +85,8 @@
</span><span class="cx"> 
</span><span class="cx">     void deallocateLarge(std::lock_guard&lt;StaticMutex&gt;&amp;, const LargeObject&amp;);
</span><span class="cx"> 
</span><del>-    void splitLarge(BeginTag*, size_t, EndTag*&amp;, Range&amp;);
</del><ins>+    LargeObject&amp; splitAndAllocate(LargeObject&amp;, size_t);
+    LargeObject&amp; splitAndAllocate(LargeObject&amp;, size_t, size_t);
</ins><span class="cx">     void mergeLarge(BeginTag*&amp;, EndTag*&amp;, Range&amp;);
</span><span class="cx">     void mergeLargeLeft(EndTag*&amp;, BeginTag*&amp;, Range&amp;, bool&amp; inVMHeap);
</span><span class="cx">     void mergeLargeRight(EndTag*&amp;, BeginTag*&amp;, Range&amp;, bool&amp; inVMHeap);
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit212SourcebmallocbmallocLargeObjecth"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/LargeObject.h (197065 => 197066)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/LargeObject.h        2016-02-25 08:37:49 UTC (rev 197065)
+++ releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/LargeObject.h        2016-02-25 09:14:31 UTC (rev 197066)
</span><span class="lines">@@ -57,14 +57,14 @@
</span><span class="cx">     bool prevCanMerge() const;
</span><span class="cx">     bool nextCanMerge() const;
</span><span class="cx"> 
</span><del>-    Owner owner() const;
-    void setOwner(Owner) const;
-    
</del><ins>+    VMState vmState() const;
+    void setVMState(VMState) const;
+
</ins><span class="cx">     bool isMarked() const;
</span><span class="cx">     void setMarked(bool) const;
</span><del>-    
-    bool isValidAndFree(Owner, size_t) const;
</del><span class="cx"> 
</span><ins>+    bool isValidAndFree(VMState::HasPhysical, size_t) const;
+
</ins><span class="cx">     LargeObject merge() const;
</span><span class="cx">     std::pair&lt;LargeObject, LargeObject&gt; split(size_t) const;
</span><span class="cx"> 
</span><span class="lines">@@ -123,29 +123,25 @@
</span><span class="cx"> 
</span><span class="cx"> inline bool LargeObject::prevCanMerge() const
</span><span class="cx"> {
</span><del>-    EndTag* prev = m_beginTag-&gt;prev();
-
-    return prev-&gt;isFree() &amp;&amp; prev-&gt;owner() == this-&gt;owner();
</del><ins>+    return m_beginTag-&gt;prev()-&gt;isFree();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> inline bool LargeObject::nextCanMerge() const
</span><span class="cx"> {
</span><del>-    BeginTag* next = m_endTag-&gt;next();
-
-    return next-&gt;isFree() &amp;&amp; next-&gt;owner() == this-&gt;owner();
</del><ins>+    return m_endTag-&gt;next()-&gt;isFree();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline Owner LargeObject::owner() const
</del><ins>+inline VMState LargeObject::vmState() const
</ins><span class="cx"> {
</span><span class="cx">     validate();
</span><del>-    return m_beginTag-&gt;owner();
</del><ins>+    return m_beginTag-&gt;vmState();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline void LargeObject::setOwner(Owner owner) const
</del><ins>+inline void LargeObject::setVMState(VMState vmState) const
</ins><span class="cx"> {
</span><span class="cx">     validate();
</span><del>-    m_beginTag-&gt;setOwner(owner);
-    m_endTag-&gt;setOwner(owner);
</del><ins>+    m_beginTag-&gt;setVMState(vmState);
+    m_endTag-&gt;setVMState(vmState);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> inline bool LargeObject::isMarked() const
</span><span class="lines">@@ -161,7 +157,7 @@
</span><span class="cx">     m_endTag-&gt;setMarked(isMarked);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline bool LargeObject::isValidAndFree(Owner expectedOwner, size_t expectedSize) const
</del><ins>+inline bool LargeObject::isValidAndFree(VMState::HasPhysical hasPhysical, size_t expectedSize) const
</ins><span class="cx"> {
</span><span class="cx">     if (!m_beginTag-&gt;isFree())
</span><span class="cx">         return false;
</span><span class="lines">@@ -175,9 +171,9 @@
</span><span class="cx">     if (m_beginTag-&gt;compactBegin() != BoundaryTag::compactBegin(m_object))
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><del>-    if (m_beginTag-&gt;owner() != expectedOwner)
</del><ins>+    if (m_beginTag-&gt;vmState().hasPhysical() != static_cast&lt;bool&gt;(hasPhysical))
</ins><span class="cx">         return false;
</span><del>-    
</del><ins>+
</ins><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -189,10 +185,11 @@
</span><span class="cx">     BeginTag* beginTag = m_beginTag;
</span><span class="cx">     EndTag* endTag = m_endTag;
</span><span class="cx">     Range range = this-&gt;range();
</span><del>-    Owner owner = this-&gt;owner();
-    
</del><ins>+    VMState vmState = this-&gt;vmState();
+
</ins><span class="cx">     EndTag* prev = beginTag-&gt;prev();
</span><del>-    if (prev-&gt;isFree() &amp;&amp; prev-&gt;owner() == owner) {
</del><ins>+    if (prev-&gt;isFree()) {
+        vmState.merge(prev-&gt;vmState());
</ins><span class="cx">         Range left(range.begin() - prev-&gt;size(), prev-&gt;size());
</span><span class="cx">         range = Range(left.begin(), left.size() + range.size());
</span><span class="cx"> 
</span><span class="lines">@@ -203,7 +200,8 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     BeginTag* next = endTag-&gt;next();
</span><del>-    if (next-&gt;isFree() &amp;&amp; next-&gt;owner() == owner) {
</del><ins>+    if (next-&gt;isFree()) {
+        vmState.merge(next-&gt;vmState());
</ins><span class="cx">         Range right(range.end(), next-&gt;size());
</span><span class="cx">         range = Range(range.begin(), range.size() + right.size());
</span><span class="cx"> 
</span><span class="lines">@@ -215,7 +213,7 @@
</span><span class="cx"> 
</span><span class="cx">     beginTag-&gt;setRange(range);
</span><span class="cx">     beginTag-&gt;setFree(true);
</span><del>-    beginTag-&gt;setOwner(owner);
</del><ins>+    beginTag-&gt;setVMState(vmState);
</ins><span class="cx">     endTag-&gt;init(beginTag);
</span><span class="cx"> 
</span><span class="cx">     return LargeObject(beginTag, endTag, range.begin());
</span><span class="lines">@@ -254,7 +252,7 @@
</span><span class="cx"> 
</span><span class="cx">     BASSERT(m_beginTag-&gt;size() == m_endTag-&gt;size());
</span><span class="cx">     BASSERT(m_beginTag-&gt;isFree() == m_endTag-&gt;isFree());
</span><del>-    BASSERT(m_beginTag-&gt;owner() == m_endTag-&gt;owner());
</del><ins>+    BASSERT(m_beginTag-&gt;vmState() == m_endTag-&gt;vmState());
</ins><span class="cx">     BASSERT(m_beginTag-&gt;isMarked() == m_endTag-&gt;isMarked());
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -280,7 +278,7 @@
</span><span class="cx">     BeginTag* beginTag = LargeChunk::beginTag(range.begin());
</span><span class="cx">     beginTag-&gt;setRange(range);
</span><span class="cx">     beginTag-&gt;setFree(true);
</span><del>-    beginTag-&gt;setOwner(Owner::VMHeap);
</del><ins>+    beginTag-&gt;setVMState(VMState::Virtual);
</ins><span class="cx"> 
</span><span class="cx">     EndTag* endTag = LargeChunk::endTag(range.begin(), range.size());
</span><span class="cx">     endTag-&gt;init(beginTag);
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit212SourcebmallocbmallocOwnerh"></a>
<div class="delfile"><h4>Deleted: releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/Owner.h (197065 => 197066)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/Owner.h        2016-02-25 08:37:49 UTC (rev 197065)
+++ releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/Owner.h        2016-02-25 09:14:31 UTC (rev 197066)
</span><span class="lines">@@ -1,38 +0,0 @@
</span><del>-/*
- * Copyright (C) 2015 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-#ifndef Owner_h
-#define Owner_h
-
-namespace bmalloc {
-
-enum class Owner : unsigned {
-    VMHeap,
-    Heap
-};
-
-} // namespace bmalloc
-
-#endif // Owner_h
</del></span></pre></div>
<a id="releasesWebKitGTKwebkit212SourcebmallocbmallocSegregatedFreeListcpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/SegregatedFreeList.cpp (197065 => 197066)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/SegregatedFreeList.cpp        2016-02-25 08:37:49 UTC (rev 197065)
+++ releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/SegregatedFreeList.cpp        2016-02-25 09:14:31 UTC (rev 197066)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2014, 2015 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2014-2016 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -27,23 +27,22 @@
</span><span class="cx"> 
</span><span class="cx"> namespace bmalloc {
</span><span class="cx"> 
</span><del>-SegregatedFreeList::SegregatedFreeList(Owner owner)
-    : m_owner(owner)
</del><ins>+SegregatedFreeList::SegregatedFreeList(VMState::HasPhysical hasPhysical)
+    : m_hasPhysical(hasPhysical)
</ins><span class="cx"> {
</span><span class="cx">     BASSERT(static_cast&lt;size_t&gt;(&amp;select(largeMax) - m_freeLists.begin()) == m_freeLists.size() - 1);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void SegregatedFreeList::insert(const LargeObject&amp; largeObject)
</span><span class="cx"> {
</span><del>-    BASSERT(largeObject.owner() == m_owner);
</del><span class="cx">     auto&amp; list = select(largeObject.size());
</span><del>-    list.push(m_owner, largeObject);
</del><ins>+    list.push(hasPhysical(), largeObject);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> LargeObject SegregatedFreeList::takeGreedy()
</span><span class="cx"> {
</span><span class="cx">     for (size_t i = m_freeLists.size(); i-- &gt; 0; ) {
</span><del>-        LargeObject largeObject = m_freeLists[i].takeGreedy(m_owner);
</del><ins>+        LargeObject largeObject = m_freeLists[i].takeGreedy(hasPhysical());
</ins><span class="cx">         if (!largeObject)
</span><span class="cx">             continue;
</span><span class="cx"> 
</span><span class="lines">@@ -55,7 +54,7 @@
</span><span class="cx"> LargeObject SegregatedFreeList::take(size_t size)
</span><span class="cx"> {
</span><span class="cx">     for (auto* list = &amp;select(size); list != m_freeLists.end(); ++list) {
</span><del>-        LargeObject largeObject = list-&gt;take(m_owner, size);
</del><ins>+        LargeObject largeObject = list-&gt;take(hasPhysical(), size);
</ins><span class="cx">         if (!largeObject)
</span><span class="cx">             continue;
</span><span class="cx"> 
</span><span class="lines">@@ -67,7 +66,7 @@
</span><span class="cx"> LargeObject SegregatedFreeList::take(size_t alignment, size_t size, size_t unalignedSize)
</span><span class="cx"> {
</span><span class="cx">     for (auto* list = &amp;select(size); list != m_freeLists.end(); ++list) {
</span><del>-        LargeObject largeObject = list-&gt;take(m_owner, alignment, size, unalignedSize);
</del><ins>+        LargeObject largeObject = list-&gt;take(hasPhysical(), alignment, size, unalignedSize);
</ins><span class="cx">         if (!largeObject)
</span><span class="cx">             continue;
</span><span class="cx"> 
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit212SourcebmallocbmallocSegregatedFreeListh"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/SegregatedFreeList.h (197065 => 197066)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/SegregatedFreeList.h        2016-02-25 08:37:49 UTC (rev 197065)
+++ releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/SegregatedFreeList.h        2016-02-25 09:14:31 UTC (rev 197066)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2014, 2015 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2014-2016 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -33,7 +33,7 @@
</span><span class="cx"> 
</span><span class="cx"> class SegregatedFreeList {
</span><span class="cx"> public:
</span><del>-    SegregatedFreeList(Owner);
</del><ins>+    SegregatedFreeList(VMState::HasPhysical);
</ins><span class="cx"> 
</span><span class="cx">     void insert(const LargeObject&amp;);
</span><span class="cx"> 
</span><span class="lines">@@ -56,10 +56,11 @@
</span><span class="cx">     // the returned object from the free list.
</span><span class="cx">     LargeObject takeGreedy();
</span><span class="cx"> 
</span><ins>+    VMState::HasPhysical hasPhysical() const { return m_hasPhysical; }
</ins><span class="cx"> private:
</span><span class="cx">     FreeList&amp; select(size_t);
</span><span class="cx"> 
</span><del>-    Owner m_owner;
</del><ins>+    VMState::HasPhysical m_hasPhysical;
</ins><span class="cx">     std::array&lt;FreeList, 15&gt; m_freeLists;
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit212SourcebmallocbmallocVMAllocateh"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/VMAllocate.h (197065 => 197066)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/VMAllocate.h        2016-02-25 08:37:49 UTC (rev 197065)
+++ releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/VMAllocate.h        2016-02-25 09:14:31 UTC (rev 197066)
</span><span class="lines">@@ -183,10 +183,10 @@
</span><span class="cx">     vmDeallocatePhysicalPages(begin, end - begin);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-// Expands requests that are un-page-aligned. NOTE: Allocation must proceed left-to-right.
</del><ins>+// Expands requests that are un-page-aligned.
</ins><span class="cx"> inline void vmAllocatePhysicalPagesSloppy(void* p, size_t size)
</span><span class="cx"> {
</span><del>-    char* begin = roundUpToMultipleOf&lt;vmPageSize&gt;(static_cast&lt;char*&gt;(p));
</del><ins>+    char* begin = roundDownToMultipleOf&lt;vmPageSize&gt;(static_cast&lt;char*&gt;(p));
</ins><span class="cx">     char* end = roundUpToMultipleOf&lt;vmPageSize&gt;(static_cast&lt;char*&gt;(p) + size);
</span><span class="cx"> 
</span><span class="cx">     if (begin &gt;= end)
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit212SourcebmallocbmallocVMHeapcpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/VMHeap.cpp (197065 => 197066)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/VMHeap.cpp        2016-02-25 08:37:49 UTC (rev 197065)
+++ releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/VMHeap.cpp        2016-02-25 09:14:31 UTC (rev 197066)
</span><span class="lines">@@ -33,7 +33,7 @@
</span><span class="cx"> namespace bmalloc {
</span><span class="cx"> 
</span><span class="cx"> VMHeap::VMHeap()
</span><del>-    : m_largeObjects(Owner::VMHeap)
</del><ins>+    : m_largeObjects(VMState::HasPhysical::False)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit212SourcebmallocbmallocVMHeaph"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/VMHeap.h (197065 => 197066)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/VMHeap.h        2016-02-25 08:37:49 UTC (rev 197065)
+++ releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/VMHeap.h        2016-02-25 09:14:31 UTC (rev 197066)
</span><span class="lines">@@ -34,6 +34,7 @@
</span><span class="cx"> #include &quot;Range.h&quot;
</span><span class="cx"> #include &quot;SegregatedFreeList.h&quot;
</span><span class="cx"> #include &quot;SmallChunk.h&quot;
</span><ins>+#include &quot;VMState.h&quot;
</ins><span class="cx"> #include &quot;Vector.h&quot;
</span><span class="cx"> #if BOS(DARWIN)
</span><span class="cx"> #include &quot;Zone.h&quot;
</span><span class="lines">@@ -53,14 +54,13 @@
</span><span class="cx">     SmallPage* allocateSmallPage();
</span><span class="cx">     MediumPage* allocateMediumPage();
</span><span class="cx">     LargeObject allocateLargeObject(size_t);
</span><del>-    LargeObject allocateLargeObject(size_t alignment, size_t, size_t unalignedSize);
</del><ins>+    LargeObject allocateLargeObject(size_t, size_t, size_t);
</ins><span class="cx"> 
</span><span class="cx">     void deallocateSmallPage(std::unique_lock&lt;StaticMutex&gt;&amp;, SmallPage*);
</span><span class="cx">     void deallocateMediumPage(std::unique_lock&lt;StaticMutex&gt;&amp;, MediumPage*);
</span><span class="cx">     void deallocateLargeObject(std::unique_lock&lt;StaticMutex&gt;&amp;, LargeObject);
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    LargeObject allocateLargeObject(LargeObject&amp;, size_t);
</del><span class="cx">     void grow();
</span><span class="cx"> 
</span><span class="cx">     Vector&lt;SmallPage*&gt; m_smallPages;
</span><span class="lines">@@ -91,30 +91,6 @@
</span><span class="cx">     return page;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline LargeObject VMHeap::allocateLargeObject(LargeObject&amp; largeObject, size_t size)
-{
-    BASSERT(largeObject.isFree());
-
-    LargeObject nextLargeObject;
-
-    if (largeObject.size() - size &gt; largeMin) {
-        std::pair&lt;LargeObject, LargeObject&gt; split = largeObject.split(size);
-        largeObject = split.first;
-        nextLargeObject = split.second;
-    }
-
-    vmAllocatePhysicalPagesSloppy(largeObject.begin(), largeObject.size());
-    largeObject.setOwner(Owner::Heap);
-
-    // Be sure to set the owner for the object we return before inserting the leftover back
-    // into the free list. The free list asserts that we never insert an object that could
-    // have merged with its neighbor.
-    if (nextLargeObject)
-        m_largeObjects.insert(nextLargeObject);
-
-    return largeObject.begin();
-}
-
</del><span class="cx"> inline LargeObject VMHeap::allocateLargeObject(size_t size)
</span><span class="cx"> {
</span><span class="cx">     LargeObject largeObject = m_largeObjects.take(size);
</span><span class="lines">@@ -124,7 +100,7 @@
</span><span class="cx">         BASSERT(largeObject);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    return allocateLargeObject(largeObject, size);
</del><ins>+    return largeObject;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> inline LargeObject VMHeap::allocateLargeObject(size_t alignment, size_t size, size_t unalignedSize)
</span><span class="lines">@@ -136,10 +112,7 @@
</span><span class="cx">         BASSERT(largeObject);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    size_t alignmentMask = alignment - 1;
-    if (test(largeObject.begin(), alignmentMask))
-        return allocateLargeObject(largeObject, unalignedSize);
-    return allocateLargeObject(largeObject, size);
</del><ins>+    return largeObject;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> inline void VMHeap::deallocateSmallPage(std::unique_lock&lt;StaticMutex&gt;&amp; lock, SmallPage* page)
</span><span class="lines">@@ -162,13 +135,9 @@
</span><span class="cx"> 
</span><span class="cx"> inline void VMHeap::deallocateLargeObject(std::unique_lock&lt;StaticMutex&gt;&amp; lock, LargeObject largeObject)
</span><span class="cx"> {
</span><del>-    largeObject.setOwner(Owner::VMHeap);
-
</del><span class="cx">     // Multiple threads might scavenge concurrently, meaning that new merging opportunities
</span><span class="cx">     // become visible after we reacquire the lock. Therefore we loop.
</span><span class="cx">     do {
</span><del>-        // If we couldn't merge with our neighbors before because they were in the
-        // VM heap, we can merge with them now.
</del><span class="cx">         largeObject = largeObject.merge();
</span><span class="cx"> 
</span><span class="cx">         // Temporarily mark this object as allocated to prevent clients from merging
</span><span class="lines">@@ -182,6 +151,7 @@
</span><span class="cx">         largeObject.setFree(true);
</span><span class="cx">     } while (largeObject.prevCanMerge() || largeObject.nextCanMerge());
</span><span class="cx"> 
</span><ins>+    largeObject.setVMState(VMState::Virtual);
</ins><span class="cx">     m_largeObjects.insert(largeObject);
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit212SourcebmallocbmallocVMStatehfromrev197065releasesWebKitGTKwebkit212SourcebmallocbmallocOwnerh"></a>
<div class="copfile"><h4>Copied: releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/VMState.h (from rev 197065, releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/Owner.h) (0 => 197066)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/VMState.h                                (rev 0)
+++ releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc/VMState.h        2016-02-25 09:14:31 UTC (rev 197066)
</span><span class="lines">@@ -0,0 +1,79 @@
</span><ins>+/*
+ * Copyright (C) 2015-2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#ifndef VMState_h
+#define VMState_h
+
+namespace bmalloc {
+
+class VMState {
+public:
+    enum class HasPhysical : bool {
+        False = false,
+        True = true
+    };
+
+    enum State : unsigned {
+        Invalid = 0x0,
+        Physical = 0x1,
+        Virtual = 0x2,
+        Mixed = 0x3
+    };
+
+    VMState(State vmState)
+        : m_state(vmState)
+    {
+    }
+
+    explicit VMState(unsigned vmState)
+        : m_state(static_cast&lt;State&gt;(vmState))
+    {
+    }
+
+    inline bool hasPhysical()
+    {
+        return !!(m_state &amp; VMState::Physical);
+    }
+
+    inline bool hasVirtual()
+    {
+        return !!(m_state &amp; VMState::Virtual);
+    }
+
+    inline void merge(VMState otherVMState)
+    {
+        m_state = static_cast&lt;State&gt;(m_state | otherVMState.m_state);
+    }
+
+    bool operator==(VMState other) const { return m_state == other.m_state; }
+    explicit operator unsigned() const { return m_state; }
+
+private:
+    State m_state;
+};
+
+} // namespace bmalloc
+
+#endif // VMState_h
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit212Sourcebmallocbmallocxcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc.xcodeproj/project.pbxproj (197065 => 197066)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc.xcodeproj/project.pbxproj        2016-02-25 08:37:49 UTC (rev 197065)
+++ releases/WebKitGTK/webkit-2.12/Source/bmalloc/bmalloc.xcodeproj/project.pbxproj        2016-02-25 09:14:31 UTC (rev 197066)
</span><span class="lines">@@ -26,7 +26,7 @@
</span><span class="cx">                 14C6216F1A9A9A6200E72293 /* LargeObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 14C6216E1A9A9A6200E72293 /* LargeObject.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 14C919C918FCC59F0028DB43 /* BPlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = 14C919C818FCC59F0028DB43 /* BPlatform.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 14CC394C18EA8858004AFE34 /* libbmalloc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 14F271BE18EA3963008C152F /* libbmalloc.a */; };
</span><del>-                14D2CD9B1AA12CFB00770440 /* Owner.h in Headers */ = {isa = PBXBuildFile; fileRef = 14D2CD9A1AA12CFB00770440 /* Owner.h */; settings = {ATTRIBUTES = (Private, ); }; };
</del><ins>+                14D2CD9B1AA12CFB00770440 /* VMState.h in Headers */ = {isa = PBXBuildFile; fileRef = 14D2CD9A1AA12CFB00770440 /* VMState.h */; settings = {ATTRIBUTES = (Private, ); }; };
</ins><span class="cx">                 14DD788C18F48CAE00950702 /* LargeChunk.h in Headers */ = {isa = PBXBuildFile; fileRef = 147AAA8818CD17CE002201E4 /* LargeChunk.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 14DD788D18F48CC600950702 /* BeginTag.h in Headers */ = {isa = PBXBuildFile; fileRef = 1417F64518B54A700076FA3F /* BeginTag.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 14DD788E18F48CCD00950702 /* BoundaryTag.h in Headers */ = {isa = PBXBuildFile; fileRef = 1485655E18A43AF900ED6942 /* BoundaryTag.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -139,7 +139,7 @@
</span><span class="cx">                 14C6216E1A9A9A6200E72293 /* LargeObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LargeObject.h; path = bmalloc/LargeObject.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 14C919C818FCC59F0028DB43 /* BPlatform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BPlatform.h; path = bmalloc/BPlatform.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 14CC394418EA8743004AFE34 /* libmbmalloc.dylib */ = {isa = PBXFileReference; explicitFileType = &quot;compiled.mach-o.dylib&quot;; includeInIndex = 0; path = libmbmalloc.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
</span><del>-                14D2CD9A1AA12CFB00770440 /* Owner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Owner.h; path = bmalloc/Owner.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><ins>+                14D2CD9A1AA12CFB00770440 /* VMState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VMState.h; path = bmalloc/VMState.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 14D9DB4517F2447100EAAB79 /* FixedVector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = FixedVector.h; path = bmalloc/FixedVector.h; sourceTree = &quot;&lt;group&gt;&quot;; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
</span><span class="cx">                 14DA32071885F9E6007269E0 /* Line.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = Line.h; path = bmalloc/Line.h; sourceTree = &quot;&lt;group&gt;&quot;; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
</span><span class="cx">                 14DA320C18875B09007269E0 /* Heap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Heap.h; path = bmalloc/Heap.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -226,9 +226,9 @@
</span><span class="cx">                                 143EF9AE1A9FABF6004F5C77 /* FreeList.h */,
</span><span class="cx">                                 147AAA8818CD17CE002201E4 /* LargeChunk.h */,
</span><span class="cx">                                 14C6216E1A9A9A6200E72293 /* LargeObject.h */,
</span><del>-                                14D2CD9A1AA12CFB00770440 /* Owner.h */,
</del><span class="cx">                                 146BEE2118C845AE0002D5A2 /* SegregatedFreeList.cpp */,
</span><span class="cx">                                 146BEE1E18C841C50002D5A2 /* SegregatedFreeList.h */,
</span><ins>+                                14D2CD9A1AA12CFB00770440 /* VMState.h */,
</ins><span class="cx">                         );
</span><span class="cx">                         name = &quot;heap: large | xlarge&quot;;
</span><span class="cx">                         sourceTree = &quot;&lt;group&gt;&quot;;
</span><span class="lines">@@ -356,7 +356,7 @@
</span><span class="cx">                                 14DD788E18F48CCD00950702 /* BoundaryTag.h in Headers */,
</span><span class="cx">                                 14DD78C818F48D7500950702 /* FixedVector.h in Headers */,
</span><span class="cx">                                 14DD78B718F48D6B00950702 /* MediumLine.h in Headers */,
</span><del>-                                14D2CD9B1AA12CFB00770440 /* Owner.h in Headers */,
</del><ins>+                                14D2CD9B1AA12CFB00770440 /* VMState.h in Headers */,
</ins><span class="cx">                                 14DD78B618F48D6B00950702 /* MediumChunk.h in Headers */,
</span><span class="cx">                                 14DD78BC18F48D6B00950702 /* SmallLine.h in Headers */,
</span><span class="cx">                                 14DD789818F48D4A00950702 /* Allocator.h in Headers */,
</span></span></pre>
</div>
</div>

</body>
</html>