<!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>[176290] trunk/Source</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/176290">176290</a></dd>
<dt>Author</dt> <dd>ggaren@apple.com</dd>
<dt>Date</dt> <dd>2014-11-18 15:06:00 -0800 (Tue, 18 Nov 2014)</dd>
</dl>
<h3>Log Message</h3>
<pre>Removed the custom allocator for ListHashSet nodes
https://bugs.webkit.org/show_bug.cgi?id=138841
Reviewed by Andreas Kling.
Source/WebCore:
Uses of ListHashSet no longer need to declare an inline capacity,
since that was only used to specify the capacity of the custom allocator.
* dom/DOMNamedFlowCollection.h:
* dom/DocumentEventQueue.h:
* dom/DocumentStyleSheetCollection.h:
* dom/NamedFlowCollection.h:
* html/FormController.h:
* rendering/FloatingObjects.h:
* rendering/RenderBlock.h:
Source/WebKit2:
Uses of ListHashSet no longer need to declare an inline capacity,
since that was only used to specify the capacity of the custom allocator.
* UIProcess/Plugins/PluginInfoStore.cpp:
(WebKit::PluginInfoStore::loadPluginsIfNecessary):
Source/WTF:
bmalloc is fast, so we don't need a custom allocator.
The MallocBench test for linked list node allocation (list_allocate) is
4.09X faster in bmalloc than TCMalloc. Also, I wrote a stress test to
add/remove link elements, which modify a ListHashSet on insertion and
removal, and it was 1% faster / in the noise with bmalloc enabled.
* wtf/ListHashSet.h:
(WTF::ListHashSetNode::ListHashSetNode):
(WTF::ListHashSetTranslator::translate):
(WTF::U>::ListHashSet):
(WTF::=):
(WTF::U>::swap):
(WTF::U>::~ListHashSet):
(WTF::U>::size):
(WTF::U>::capacity):
(WTF::U>::isEmpty):
(WTF::U>::first):
(WTF::U>::removeFirst):
(WTF::U>::takeFirst):
(WTF::U>::last):
(WTF::U>::removeLast):
(WTF::U>::takeLast):
(WTF::U>::contains):
(WTF::U>::remove):
(WTF::U>::clear):
(WTF::U>::unlink):
(WTF::U>::unlinkAndDelete):
(WTF::U>::appendNode):
(WTF::U>::prependNode):
(WTF::U>::insertNodeBefore):
(WTF::U>::deleteAllNodes):
(WTF::ListHashSetNodeAllocator::ListHashSetNodeAllocator): Deleted.
(WTF::ListHashSetNodeAllocator::allocate): Deleted.
(WTF::ListHashSetNodeAllocator::deallocate): Deleted.
(WTF::ListHashSetNodeAllocator::pool): Deleted.
(WTF::ListHashSetNodeAllocator::pastPool): Deleted.
(WTF::ListHashSetNodeAllocator::inPool): Deleted.
(WTF::ListHashSetNode::operator new): Deleted.
(WTF::ListHashSetNode::destroy): Deleted.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWTFChangeLog">trunk/Source/WTF/ChangeLog</a></li>
<li><a href="#trunkSourceWTFwtfListHashSeth">trunk/Source/WTF/wtf/ListHashSet.h</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoredomDOMNamedFlowCollectionh">trunk/Source/WebCore/dom/DOMNamedFlowCollection.h</a></li>
<li><a href="#trunkSourceWebCoredomDocumentEventQueueh">trunk/Source/WebCore/dom/DocumentEventQueue.h</a></li>
<li><a href="#trunkSourceWebCoredomDocumentStyleSheetCollectionh">trunk/Source/WebCore/dom/DocumentStyleSheetCollection.h</a></li>
<li><a href="#trunkSourceWebCoredomNamedFlowCollectionh">trunk/Source/WebCore/dom/NamedFlowCollection.h</a></li>
<li><a href="#trunkSourceWebCorehtmlFormControllerh">trunk/Source/WebCore/html/FormController.h</a></li>
<li><a href="#trunkSourceWebCorerenderingFloatingObjectsh">trunk/Source/WebCore/rendering/FloatingObjects.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBlockh">trunk/Source/WebCore/rendering/RenderBlock.h</a></li>
<li><a href="#trunkSourceWebKitWebKitvcxprojWebKitExportGeneratorWebKitExportsdefin">trunk/Source/WebKit/WebKit.vcxproj/WebKitExportGenerator/WebKitExports.def.in</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2UIProcessPluginsPluginInfoStorecpp">trunk/Source/WebKit2/UIProcess/Plugins/PluginInfoStore.cpp</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWTFChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/ChangeLog (176289 => 176290)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/ChangeLog        2014-11-18 22:57:43 UTC (rev 176289)
+++ trunk/Source/WTF/ChangeLog        2014-11-18 23:06:00 UTC (rev 176290)
</span><span class="lines">@@ -1,3 +1,51 @@
</span><ins>+2014-11-18 Geoffrey Garen <ggaren@apple.com>
+
+ Removed the custom allocator for ListHashSet nodes
+ https://bugs.webkit.org/show_bug.cgi?id=138841
+
+ Reviewed by Andreas Kling.
+
+ bmalloc is fast, so we don't need a custom allocator.
+
+ The MallocBench test for linked list node allocation (list_allocate) is
+ 4.09X faster in bmalloc than TCMalloc. Also, I wrote a stress test to
+ add/remove link elements, which modify a ListHashSet on insertion and
+ removal, and it was 1% faster / in the noise with bmalloc enabled.
+
+ * wtf/ListHashSet.h:
+ (WTF::ListHashSetNode::ListHashSetNode):
+ (WTF::ListHashSetTranslator::translate):
+ (WTF::U>::ListHashSet):
+ (WTF::=):
+ (WTF::U>::swap):
+ (WTF::U>::~ListHashSet):
+ (WTF::U>::size):
+ (WTF::U>::capacity):
+ (WTF::U>::isEmpty):
+ (WTF::U>::first):
+ (WTF::U>::removeFirst):
+ (WTF::U>::takeFirst):
+ (WTF::U>::last):
+ (WTF::U>::removeLast):
+ (WTF::U>::takeLast):
+ (WTF::U>::contains):
+ (WTF::U>::remove):
+ (WTF::U>::clear):
+ (WTF::U>::unlink):
+ (WTF::U>::unlinkAndDelete):
+ (WTF::U>::appendNode):
+ (WTF::U>::prependNode):
+ (WTF::U>::insertNodeBefore):
+ (WTF::U>::deleteAllNodes):
+ (WTF::ListHashSetNodeAllocator::ListHashSetNodeAllocator): Deleted.
+ (WTF::ListHashSetNodeAllocator::allocate): Deleted.
+ (WTF::ListHashSetNodeAllocator::deallocate): Deleted.
+ (WTF::ListHashSetNodeAllocator::pool): Deleted.
+ (WTF::ListHashSetNodeAllocator::pastPool): Deleted.
+ (WTF::ListHashSetNodeAllocator::inPool): Deleted.
+ (WTF::ListHashSetNode::operator new): Deleted.
+ (WTF::ListHashSetNode::destroy): Deleted.
+
</ins><span class="cx"> 2014-11-18 Chris Dumez <cdumez@apple.com>
</span><span class="cx">
</span><span class="cx"> Update the Vector API to deal with unsigned types instead of size_t
</span></span></pre></div>
<a id="trunkSourceWTFwtfListHashSeth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/ListHashSet.h (176289 => 176290)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/ListHashSet.h        2014-11-18 22:57:43 UTC (rev 176289)
+++ trunk/Source/WTF/wtf/ListHashSet.h        2014-11-18 23:06:00 UTC (rev 176290)
</span><span class="lines">@@ -38,22 +38,20 @@
</span><span class="cx"> // guaranteed safe against mutation of the ListHashSet, except for
</span><span class="cx"> // removal of the item currently pointed to by a given iterator.
</span><span class="cx">
</span><del>-template<typename Value, size_t inlineCapacity, typename HashFunctions> class ListHashSet;
</del><ins>+template<typename Value, typename HashFunctions> class ListHashSet;
</ins><span class="cx">
</span><del>-template<typename ValueArg, size_t inlineCapacity, typename HashArg> class ListHashSetIterator;
-template<typename ValueArg, size_t inlineCapacity, typename HashArg> class ListHashSetConstIterator;
</del><ins>+template<typename ValueArg, typename HashArg> class ListHashSetIterator;
+template<typename ValueArg, typename HashArg> class ListHashSetConstIterator;
</ins><span class="cx">
</span><del>-template<typename ValueArg, size_t inlineCapacity> struct ListHashSetNode;
-template<typename ValueArg, size_t inlineCapacity> class ListHashSetNodeAllocator;
</del><ins>+template<typename ValueArg> struct ListHashSetNode;
</ins><span class="cx">
</span><span class="cx"> template<typename HashArg> struct ListHashSetNodeHashFunctions;
</span><span class="cx"> template<typename HashArg> struct ListHashSetTranslator;
</span><span class="cx">
</span><del>-template<typename ValueArg, size_t inlineCapacity = 256, typename HashArg = typename DefaultHash<ValueArg>::Hash> class ListHashSet {
</del><ins>+template<typename ValueArg, typename HashArg = typename DefaultHash<ValueArg>::Hash> class ListHashSet {
</ins><span class="cx"> WTF_MAKE_FAST_ALLOCATED;
</span><span class="cx"> private:
</span><del>- typedef ListHashSetNode<ValueArg, inlineCapacity> Node;
- typedef ListHashSetNodeAllocator<ValueArg, inlineCapacity> NodeAllocator;
</del><ins>+ typedef ListHashSetNode<ValueArg> Node;
</ins><span class="cx">
</span><span class="cx"> typedef HashTraits<Node*> NodeTraits;
</span><span class="cx"> typedef ListHashSetNodeHashFunctions<HashArg> NodeHash;
</span><span class="lines">@@ -64,9 +62,9 @@
</span><span class="cx"> public:
</span><span class="cx"> typedef ValueArg ValueType;
</span><span class="cx">
</span><del>- typedef ListHashSetIterator<ValueType, inlineCapacity, HashArg> iterator;
- typedef ListHashSetConstIterator<ValueType, inlineCapacity, HashArg> const_iterator;
- friend class ListHashSetConstIterator<ValueType, inlineCapacity, HashArg>;
</del><ins>+ typedef ListHashSetIterator<ValueType, HashArg> iterator;
+ typedef ListHashSetConstIterator<ValueType, HashArg> const_iterator;
+ friend class ListHashSetConstIterator<ValueType, HashArg>;
</ins><span class="cx">
</span><span class="cx"> typedef std::reverse_iterator<iterator> reverse_iterator;
</span><span class="cx"> typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
</span><span class="lines">@@ -155,111 +153,22 @@
</span><span class="cx"> HashTable<Node*, Node*, IdentityExtractor, NodeHash, NodeTraits, NodeTraits> m_impl;
</span><span class="cx"> Node* m_head;
</span><span class="cx"> Node* m_tail;
</span><del>- std::unique_ptr<NodeAllocator> m_allocator;
</del><span class="cx"> };
</span><span class="cx">
</span><del>-template<typename ValueArg, size_t inlineCapacity> class ListHashSetNodeAllocator {
</del><ins>+template<typename ValueArg> struct ListHashSetNode {
</ins><span class="cx"> WTF_MAKE_FAST_ALLOCATED;
</span><del>-
</del><span class="cx"> public:
</span><del>- typedef ListHashSetNode<ValueArg, inlineCapacity> Node;
- typedef ListHashSetNodeAllocator<ValueArg, inlineCapacity> NodeAllocator;
-
- ListHashSetNodeAllocator()
- : m_freeList(pool())
- , m_isDoneWithInitialFreeList(false)
- {
- memset(m_pool.pool, 0, sizeof(m_pool.pool));
- }
-
- Node* allocate()
- {
- Node* result = m_freeList;
-
- if (!result)
- return static_cast<Node*>(fastMalloc(sizeof(Node)));
-
- ASSERT(!result->m_isAllocated);
-
- Node* next = result->m_next;
- ASSERT(!next || !next->m_isAllocated);
- if (!next && !m_isDoneWithInitialFreeList) {
- next = result + 1;
- if (next == pastPool()) {
- m_isDoneWithInitialFreeList = true;
- next = 0;
- } else {
- ASSERT(inPool(next));
- ASSERT(!next->m_isAllocated);
- }
- }
- m_freeList = next;
-
- return result;
- }
-
- void deallocate(Node* node)
- {
- if (inPool(node)) {
-#ifndef NDEBUG
- node->m_isAllocated = false;
-#endif
- node->m_next = m_freeList;
- m_freeList = node;
- return;
- }
-
- fastFree(node);
- }
-
-private:
- Node* pool() { return reinterpret_cast_ptr<Node*>(m_pool.pool); }
- Node* pastPool() { return pool() + m_poolSize; }
- bool inPool(Node* node)
- {
- return node >= pool() && node < pastPool();
- }
-
- Node* m_freeList;
- bool m_isDoneWithInitialFreeList;
- static const size_t m_poolSize = inlineCapacity;
- union {
- char pool[sizeof(Node) * m_poolSize];
- double forAlignment;
- } m_pool;
-};
-
-template<typename ValueArg, size_t inlineCapacity> struct ListHashSetNode {
- typedef ListHashSetNodeAllocator<ValueArg, inlineCapacity> NodeAllocator;
-
</del><span class="cx"> template<typename T>
</span><span class="cx"> ListHashSetNode(T&& value)
</span><span class="cx"> : m_value(std::forward<T>(value))
</span><span class="cx"> , m_prev(0)
</span><span class="cx"> , m_next(0)
</span><del>-#ifndef NDEBUG
- , m_isAllocated(true)
-#endif
</del><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><del>- void* operator new(size_t, NodeAllocator* allocator)
- {
- return allocator->allocate();
- }
- void destroy(NodeAllocator* allocator)
- {
- this->~ListHashSetNode();
- allocator->deallocate(this);
- }
-
</del><span class="cx"> ValueArg m_value;
</span><span class="cx"> ListHashSetNode* m_prev;
</span><span class="cx"> ListHashSetNode* m_next;
</span><del>-
-#ifndef NDEBUG
- bool m_isAllocated;
-#endif
</del><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> template<typename HashArg> struct ListHashSetNodeHashFunctions {
</span><span class="lines">@@ -268,15 +177,15 @@
</span><span class="cx"> static const bool safeToCompareToEmptyOrDeleted = false;
</span><span class="cx"> };
</span><span class="cx">
</span><del>-template<typename ValueArg, size_t inlineCapacity, typename HashArg> class ListHashSetIterator {
</del><ins>+template<typename ValueArg, typename HashArg> class ListHashSetIterator {
</ins><span class="cx"> private:
</span><del>- typedef ListHashSet<ValueArg, inlineCapacity, HashArg> ListHashSetType;
- typedef ListHashSetIterator<ValueArg, inlineCapacity, HashArg> iterator;
- typedef ListHashSetConstIterator<ValueArg, inlineCapacity, HashArg> const_iterator;
- typedef ListHashSetNode<ValueArg, inlineCapacity> Node;
</del><ins>+ typedef ListHashSet<ValueArg, HashArg> ListHashSetType;
+ typedef ListHashSetIterator<ValueArg, HashArg> iterator;
+ typedef ListHashSetConstIterator<ValueArg, HashArg> const_iterator;
+ typedef ListHashSetNode<ValueArg> Node;
</ins><span class="cx"> typedef ValueArg ValueType;
</span><span class="cx">
</span><del>- friend class ListHashSet<ValueArg, inlineCapacity, HashArg>;
</del><ins>+ friend class ListHashSet<ValueArg, HashArg>;
</ins><span class="cx">
</span><span class="cx"> ListHashSetIterator(const ListHashSetType* set, Node* position) : m_iterator(set, position) { }
</span><span class="cx">
</span><span class="lines">@@ -315,16 +224,16 @@
</span><span class="cx"> const_iterator m_iterator;
</span><span class="cx"> };
</span><span class="cx">
</span><del>-template<typename ValueArg, size_t inlineCapacity, typename HashArg> class ListHashSetConstIterator {
</del><ins>+template<typename ValueArg, typename HashArg> class ListHashSetConstIterator {
</ins><span class="cx"> private:
</span><del>- typedef ListHashSet<ValueArg, inlineCapacity, HashArg> ListHashSetType;
- typedef ListHashSetIterator<ValueArg, inlineCapacity, HashArg> iterator;
- typedef ListHashSetConstIterator<ValueArg, inlineCapacity, HashArg> const_iterator;
- typedef ListHashSetNode<ValueArg, inlineCapacity> Node;
</del><ins>+ typedef ListHashSet<ValueArg, HashArg> ListHashSetType;
+ typedef ListHashSetIterator<ValueArg, HashArg> iterator;
+ typedef ListHashSetConstIterator<ValueArg, HashArg> const_iterator;
+ typedef ListHashSetNode<ValueArg> Node;
</ins><span class="cx"> typedef ValueArg ValueType;
</span><span class="cx">
</span><del>- friend class ListHashSet<ValueArg, inlineCapacity, HashArg>;
- friend class ListHashSetIterator<ValueArg, inlineCapacity, HashArg>;
</del><ins>+ friend class ListHashSet<ValueArg, HashArg>;
+ friend class ListHashSetIterator<ValueArg, HashArg>;
</ins><span class="cx">
</span><span class="cx"> ListHashSetConstIterator(const ListHashSetType* set, Node* position)
</span><span class="cx"> : m_set(set)
</span><span class="lines">@@ -393,86 +302,83 @@
</span><span class="cx"> struct ListHashSetTranslator {
</span><span class="cx"> template<typename T> static unsigned hash(const T& key) { return HashFunctions::hash(key); }
</span><span class="cx"> template<typename T, typename U> static bool equal(const T& a, const U& b) { return HashFunctions::equal(a->m_value, b); }
</span><del>- template<typename T, typename U, typename V> static void translate(T*& location, U&& key, const V& allocator)
</del><ins>+ template<typename T, typename U, typename V> static void translate(T*& location, U&& key, V&&)
</ins><span class="cx"> {
</span><del>- location = new (allocator) T(std::forward<U>(key));
</del><ins>+ location = new T(std::forward<U>(key));
</ins><span class="cx"> }
</span><span class="cx"> };
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-inline ListHashSet<T, inlineCapacity, U>::ListHashSet()
</del><ins>+template<typename T, typename U>
+inline ListHashSet<T, U>::ListHashSet()
</ins><span class="cx"> : m_head(0)
</span><span class="cx"> , m_tail(0)
</span><del>- , m_allocator(std::make_unique<NodeAllocator>())
</del><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-inline ListHashSet<T, inlineCapacity, U>::ListHashSet(const ListHashSet& other)
</del><ins>+template<typename T, typename U>
+inline ListHashSet<T, U>::ListHashSet(const ListHashSet& other)
</ins><span class="cx"> : m_head(0)
</span><span class="cx"> , m_tail(0)
</span><del>- , m_allocator(std::make_unique<NodeAllocator>())
</del><span class="cx"> {
</span><span class="cx"> for (auto it = other.begin(), end = other.end(); it != end; ++it)
</span><span class="cx"> add(*it);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-inline ListHashSet<T, inlineCapacity, U>& ListHashSet<T, inlineCapacity, U>::operator=(const ListHashSet& other)
</del><ins>+template<typename T, typename U>
+inline ListHashSet<T, U>& ListHashSet<T, U>::operator=(const ListHashSet& other)
</ins><span class="cx"> {
</span><span class="cx"> ListHashSet tmp(other);
</span><span class="cx"> swap(tmp);
</span><span class="cx"> return *this;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-inline void ListHashSet<T, inlineCapacity, U>::swap(ListHashSet& other)
</del><ins>+template<typename T, typename U>
+inline void ListHashSet<T, U>::swap(ListHashSet& other)
</ins><span class="cx"> {
</span><span class="cx"> m_impl.swap(other.m_impl);
</span><span class="cx"> std::swap(m_head, other.m_head);
</span><span class="cx"> std::swap(m_tail, other.m_tail);
</span><del>- m_allocator.swap(other.m_allocator);
</del><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-inline ListHashSet<T, inlineCapacity, U>::~ListHashSet()
</del><ins>+template<typename T, typename U>
+inline ListHashSet<T, U>::~ListHashSet()
</ins><span class="cx"> {
</span><span class="cx"> deleteAllNodes();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-inline int ListHashSet<T, inlineCapacity, U>::size() const
</del><ins>+template<typename T, typename U>
+inline int ListHashSet<T, U>::size() const
</ins><span class="cx"> {
</span><span class="cx"> return m_impl.size();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-inline int ListHashSet<T, inlineCapacity, U>::capacity() const
</del><ins>+template<typename T, typename U>
+inline int ListHashSet<T, U>::capacity() const
</ins><span class="cx"> {
</span><span class="cx"> return m_impl.capacity();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-inline bool ListHashSet<T, inlineCapacity, U>::isEmpty() const
</del><ins>+template<typename T, typename U>
+inline bool ListHashSet<T, U>::isEmpty() const
</ins><span class="cx"> {
</span><span class="cx"> return m_impl.isEmpty();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-inline T& ListHashSet<T, inlineCapacity, U>::first()
</del><ins>+template<typename T, typename U>
+inline T& ListHashSet<T, U>::first()
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(!isEmpty());
</span><span class="cx"> return m_head->m_value;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-inline void ListHashSet<T, inlineCapacity, U>::removeFirst()
</del><ins>+template<typename T, typename U>
+inline void ListHashSet<T, U>::removeFirst()
</ins><span class="cx"> {
</span><span class="cx"> takeFirst();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-inline T ListHashSet<T, inlineCapacity, U>::takeFirst()
</del><ins>+template<typename T, typename U>
+inline T ListHashSet<T, U>::takeFirst()
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(!isEmpty());
</span><span class="cx"> auto it = m_impl.find(m_head);
</span><span class="lines">@@ -484,35 +390,35 @@
</span><span class="cx"> return result;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-inline const T& ListHashSet<T, inlineCapacity, U>::first() const
</del><ins>+template<typename T, typename U>
+inline const T& ListHashSet<T, U>::first() const
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(!isEmpty());
</span><span class="cx"> return m_head->m_value;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-inline T& ListHashSet<T, inlineCapacity, U>::last()
</del><ins>+template<typename T, typename U>
+inline T& ListHashSet<T, U>::last()
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(!isEmpty());
</span><span class="cx"> return m_tail->m_value;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-inline const T& ListHashSet<T, inlineCapacity, U>::last() const
</del><ins>+template<typename T, typename U>
+inline const T& ListHashSet<T, U>::last() const
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(!isEmpty());
</span><span class="cx"> return m_tail->m_value;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-inline void ListHashSet<T, inlineCapacity, U>::removeLast()
</del><ins>+template<typename T, typename U>
+inline void ListHashSet<T, U>::removeLast()
</ins><span class="cx"> {
</span><span class="cx"> takeLast();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-inline T ListHashSet<T, inlineCapacity, U>::takeLast()
</del><ins>+template<typename T, typename U>
+inline T ListHashSet<T, U>::takeLast()
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(!isEmpty());
</span><span class="cx"> auto it = m_impl.find(m_tail);
</span><span class="lines">@@ -524,8 +430,8 @@
</span><span class="cx"> return result;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-inline auto ListHashSet<T, inlineCapacity, U>::find(const ValueType& value) -> iterator
</del><ins>+template<typename T, typename U>
+inline auto ListHashSet<T, U>::find(const ValueType& value) -> iterator
</ins><span class="cx"> {
</span><span class="cx"> auto it = m_impl.template find<BaseTranslator>(value);
</span><span class="cx"> if (it == m_impl.end())
</span><span class="lines">@@ -533,8 +439,8 @@
</span><span class="cx"> return makeIterator(*it);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-inline auto ListHashSet<T, inlineCapacity, U>::find(const ValueType& value) const -> const_iterator
</del><ins>+template<typename T, typename U>
+inline auto ListHashSet<T, U>::find(const ValueType& value) const -> const_iterator
</ins><span class="cx"> {
</span><span class="cx"> auto it = m_impl.template find<BaseTranslator>(value);
</span><span class="cx"> if (it == m_impl.end())
</span><span class="lines">@@ -548,9 +454,9 @@
</span><span class="cx"> template<typename T, typename U> static bool equal(const T& a, const U& b) { return Translator::equal(a->m_value, b); }
</span><span class="cx"> };
</span><span class="cx">
</span><del>-template<typename ValueType, size_t inlineCapacity, typename U>
</del><ins>+template<typename ValueType, typename U>
</ins><span class="cx"> template<typename T, typename HashTranslator>
</span><del>-inline auto ListHashSet<ValueType, inlineCapacity, U>::find(const T& value) -> iterator
</del><ins>+inline auto ListHashSet<ValueType, U>::find(const T& value) -> iterator
</ins><span class="cx"> {
</span><span class="cx"> auto it = m_impl.template find<ListHashSetTranslatorAdapter<HashTranslator>>(value);
</span><span class="cx"> if (it == m_impl.end())
</span><span class="lines">@@ -558,9 +464,9 @@
</span><span class="cx"> return makeIterator(*it);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename ValueType, size_t inlineCapacity, typename U>
</del><ins>+template<typename ValueType, typename U>
</ins><span class="cx"> template<typename T, typename HashTranslator>
</span><del>-inline auto ListHashSet<ValueType, inlineCapacity, U>::find(const T& value) const -> const_iterator
</del><ins>+inline auto ListHashSet<ValueType, U>::find(const T& value) const -> const_iterator
</ins><span class="cx"> {
</span><span class="cx"> auto it = m_impl.template find<ListHashSetTranslatorAdapter<HashTranslator>>(value);
</span><span class="cx"> if (it == m_impl.end())
</span><span class="lines">@@ -568,41 +474,41 @@
</span><span class="cx"> return makeConstIterator(*it);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename ValueType, size_t inlineCapacity, typename U>
</del><ins>+template<typename ValueType, typename U>
</ins><span class="cx"> template<typename T, typename HashTranslator>
</span><del>-inline bool ListHashSet<ValueType, inlineCapacity, U>::contains(const T& value) const
</del><ins>+inline bool ListHashSet<ValueType, U>::contains(const T& value) const
</ins><span class="cx"> {
</span><span class="cx"> return m_impl.template contains<ListHashSetTranslatorAdapter<HashTranslator>>(value);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-inline bool ListHashSet<T, inlineCapacity, U>::contains(const ValueType& value) const
</del><ins>+template<typename T, typename U>
+inline bool ListHashSet<T, U>::contains(const ValueType& value) const
</ins><span class="cx"> {
</span><span class="cx"> return m_impl.template contains<BaseTranslator>(value);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-auto ListHashSet<T, inlineCapacity, U>::add(const ValueType& value) -> AddResult
</del><ins>+template<typename T, typename U>
+auto ListHashSet<T, U>::add(const ValueType& value) -> AddResult
</ins><span class="cx"> {
</span><del>- auto result = m_impl.template add<BaseTranslator>(value, m_allocator.get());
</del><ins>+ auto result = m_impl.template add<BaseTranslator>(value, nullptr);
</ins><span class="cx"> if (result.isNewEntry)
</span><span class="cx"> appendNode(*result.iterator);
</span><span class="cx"> return AddResult(makeIterator(*result.iterator), result.isNewEntry);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-auto ListHashSet<T, inlineCapacity, U>::add(ValueType&& value) -> AddResult
</del><ins>+template<typename T, typename U>
+auto ListHashSet<T, U>::add(ValueType&& value) -> AddResult
</ins><span class="cx"> {
</span><del>- auto result = m_impl.template add<BaseTranslator>(WTF::move(value), m_allocator.get());
</del><ins>+ auto result = m_impl.template add<BaseTranslator>(WTF::move(value), nullptr);
</ins><span class="cx"> if (result.isNewEntry)
</span><span class="cx"> appendNode(*result.iterator);
</span><span class="cx"> return AddResult(makeIterator(*result.iterator), result.isNewEntry);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-auto ListHashSet<T, inlineCapacity, U>::appendOrMoveToLast(const ValueType& value) -> AddResult
</del><ins>+template<typename T, typename U>
+auto ListHashSet<T, U>::appendOrMoveToLast(const ValueType& value) -> AddResult
</ins><span class="cx"> {
</span><del>- auto result = m_impl.template add<BaseTranslator>(value, m_allocator.get());
</del><ins>+ auto result = m_impl.template add<BaseTranslator>(value, nullptr);
</ins><span class="cx"> Node* node = *result.iterator;
</span><span class="cx"> if (!result.isNewEntry)
</span><span class="cx"> unlink(node);
</span><span class="lines">@@ -611,10 +517,10 @@
</span><span class="cx"> return AddResult(makeIterator(*result.iterator), result.isNewEntry);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-auto ListHashSet<T, inlineCapacity, U>::appendOrMoveToLast(ValueType&& value) -> AddResult
</del><ins>+template<typename T, typename U>
+auto ListHashSet<T, U>::appendOrMoveToLast(ValueType&& value) -> AddResult
</ins><span class="cx"> {
</span><del>- auto result = m_impl.template add<BaseTranslator>(WTF::move(value), m_allocator.get());
</del><ins>+ auto result = m_impl.template add<BaseTranslator>(WTF::move(value), nullptr);
</ins><span class="cx"> Node* node = *result.iterator;
</span><span class="cx"> if (!result.isNewEntry)
</span><span class="cx"> unlink(node);
</span><span class="lines">@@ -623,10 +529,10 @@
</span><span class="cx"> return AddResult(makeIterator(*result.iterator), result.isNewEntry);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-auto ListHashSet<T, inlineCapacity, U>::prependOrMoveToFirst(const ValueType& value) -> AddResult
</del><ins>+template<typename T, typename U>
+auto ListHashSet<T, U>::prependOrMoveToFirst(const ValueType& value) -> AddResult
</ins><span class="cx"> {
</span><del>- auto result = m_impl.template add<BaseTranslator>(value, m_allocator.get());
</del><ins>+ auto result = m_impl.template add<BaseTranslator>(value, nullptr);
</ins><span class="cx"> Node* node = *result.iterator;
</span><span class="cx"> if (!result.isNewEntry)
</span><span class="cx"> unlink(node);
</span><span class="lines">@@ -635,10 +541,10 @@
</span><span class="cx"> return AddResult(makeIterator(*result.iterator), result.isNewEntry);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-auto ListHashSet<T, inlineCapacity, U>::prependOrMoveToFirst(ValueType&& value) -> AddResult
</del><ins>+template<typename T, typename U>
+auto ListHashSet<T, U>::prependOrMoveToFirst(ValueType&& value) -> AddResult
</ins><span class="cx"> {
</span><del>- auto result = m_impl.template add<BaseTranslator>(WTF::move(value), m_allocator.get());
</del><ins>+ auto result = m_impl.template add<BaseTranslator>(WTF::move(value), nullptr);
</ins><span class="cx"> Node* node = *result.iterator;
</span><span class="cx"> if (!result.isNewEntry)
</span><span class="cx"> unlink(node);
</span><span class="lines">@@ -647,38 +553,38 @@
</span><span class="cx"> return AddResult(makeIterator(*result.iterator), result.isNewEntry);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-auto ListHashSet<T, inlineCapacity, U>::insertBefore(const ValueType& beforeValue, const ValueType& newValue) -> AddResult
</del><ins>+template<typename T, typename U>
+auto ListHashSet<T, U>::insertBefore(const ValueType& beforeValue, const ValueType& newValue) -> AddResult
</ins><span class="cx"> {
</span><span class="cx"> return insertBefore(find(beforeValue), newValue);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-auto ListHashSet<T, inlineCapacity, U>::insertBefore(const ValueType& beforeValue, ValueType&& newValue) -> AddResult
</del><ins>+template<typename T, typename U>
+auto ListHashSet<T, U>::insertBefore(const ValueType& beforeValue, ValueType&& newValue) -> AddResult
</ins><span class="cx"> {
</span><span class="cx"> return insertBefore(find(beforeValue), WTF::move(newValue));
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-auto ListHashSet<T, inlineCapacity, U>::insertBefore(iterator it, const ValueType& newValue) -> AddResult
</del><ins>+template<typename T, typename U>
+auto ListHashSet<T, U>::insertBefore(iterator it, const ValueType& newValue) -> AddResult
</ins><span class="cx"> {
</span><del>- auto result = m_impl.template add<BaseTranslator>(newValue, m_allocator.get());
</del><ins>+ auto result = m_impl.template add<BaseTranslator>(newValue, nullptr);
</ins><span class="cx"> if (result.isNewEntry)
</span><span class="cx"> insertNodeBefore(it.node(), *result.iterator);
</span><span class="cx"> return AddResult(makeIterator(*result.iterator), result.isNewEntry);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-auto ListHashSet<T, inlineCapacity, U>::insertBefore(iterator it, ValueType&& newValue) -> AddResult
</del><ins>+template<typename T, typename U>
+auto ListHashSet<T, U>::insertBefore(iterator it, ValueType&& newValue) -> AddResult
</ins><span class="cx"> {
</span><del>- auto result = m_impl.template add<BaseTranslator>(WTF::move(newValue), m_allocator.get());
</del><ins>+ auto result = m_impl.template add<BaseTranslator>(WTF::move(newValue), nullptr);
</ins><span class="cx"> if (result.isNewEntry)
</span><span class="cx"> insertNodeBefore(it.node(), *result.iterator);
</span><span class="cx"> return AddResult(makeIterator(*result.iterator), result.isNewEntry);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-inline bool ListHashSet<T, inlineCapacity, U>::remove(iterator it)
</del><ins>+template<typename T, typename U>
+inline bool ListHashSet<T, U>::remove(iterator it)
</ins><span class="cx"> {
</span><span class="cx"> if (it == end())
</span><span class="cx"> return false;
</span><span class="lines">@@ -687,14 +593,14 @@
</span><span class="cx"> return true;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-inline bool ListHashSet<T, inlineCapacity, U>::remove(const ValueType& value)
</del><ins>+template<typename T, typename U>
+inline bool ListHashSet<T, U>::remove(const ValueType& value)
</ins><span class="cx"> {
</span><span class="cx"> return remove(find(value));
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-inline void ListHashSet<T, inlineCapacity, U>::clear()
</del><ins>+template<typename T, typename U>
+inline void ListHashSet<T, U>::clear()
</ins><span class="cx"> {
</span><span class="cx"> deleteAllNodes();
</span><span class="cx"> m_impl.clear();
</span><span class="lines">@@ -702,8 +608,8 @@
</span><span class="cx"> m_tail = 0;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-void ListHashSet<T, inlineCapacity, U>::unlink(Node* node)
</del><ins>+template<typename T, typename U>
+void ListHashSet<T, U>::unlink(Node* node)
</ins><span class="cx"> {
</span><span class="cx"> if (!node->m_prev) {
</span><span class="cx"> ASSERT(node == m_head);
</span><span class="lines">@@ -722,15 +628,15 @@
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-void ListHashSet<T, inlineCapacity, U>::unlinkAndDelete(Node* node)
</del><ins>+template<typename T, typename U>
+void ListHashSet<T, U>::unlinkAndDelete(Node* node)
</ins><span class="cx"> {
</span><span class="cx"> unlink(node);
</span><del>- node->destroy(m_allocator.get());
</del><ins>+ delete node;
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-void ListHashSet<T, inlineCapacity, U>::appendNode(Node* node)
</del><ins>+template<typename T, typename U>
+void ListHashSet<T, U>::appendNode(Node* node)
</ins><span class="cx"> {
</span><span class="cx"> node->m_prev = m_tail;
</span><span class="cx"> node->m_next = 0;
</span><span class="lines">@@ -746,8 +652,8 @@
</span><span class="cx"> m_tail = node;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-void ListHashSet<T, inlineCapacity, U>::prependNode(Node* node)
</del><ins>+template<typename T, typename U>
+void ListHashSet<T, U>::prependNode(Node* node)
</ins><span class="cx"> {
</span><span class="cx"> node->m_prev = 0;
</span><span class="cx"> node->m_next = m_head;
</span><span class="lines">@@ -760,8 +666,8 @@
</span><span class="cx"> m_head = node;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-void ListHashSet<T, inlineCapacity, U>::insertNodeBefore(Node* beforeNode, Node* newNode)
</del><ins>+template<typename T, typename U>
+void ListHashSet<T, U>::insertNodeBefore(Node* beforeNode, Node* newNode)
</ins><span class="cx"> {
</span><span class="cx"> if (!beforeNode)
</span><span class="cx"> return appendNode(newNode);
</span><span class="lines">@@ -776,24 +682,24 @@
</span><span class="cx"> m_head = newNode;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-void ListHashSet<T, inlineCapacity, U>::deleteAllNodes()
</del><ins>+template<typename T, typename U>
+void ListHashSet<T, U>::deleteAllNodes()
</ins><span class="cx"> {
</span><span class="cx"> if (!m_head)
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> for (Node* node = m_head, *next = m_head->m_next; node; node = next, next = node ? node->m_next : 0)
</span><del>- node->destroy(m_allocator.get());
</del><ins>+ delete node;
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-inline auto ListHashSet<T, inlineCapacity, U>::makeIterator(Node* position) -> iterator
</del><ins>+template<typename T, typename U>
+inline auto ListHashSet<T, U>::makeIterator(Node* position) -> iterator
</ins><span class="cx"> {
</span><span class="cx"> return iterator(this, position);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-template<typename T, size_t inlineCapacity, typename U>
-inline auto ListHashSet<T, inlineCapacity, U>::makeConstIterator(Node* position) const -> const_iterator
</del><ins>+template<typename T, typename U>
+inline auto ListHashSet<T, U>::makeConstIterator(Node* position) const -> const_iterator
</ins><span class="cx"> {
</span><span class="cx"> return const_iterator(this, position);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (176289 => 176290)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-11-18 22:57:43 UTC (rev 176289)
+++ trunk/Source/WebCore/ChangeLog        2014-11-18 23:06:00 UTC (rev 176290)
</span><span class="lines">@@ -1,3 +1,21 @@
</span><ins>+2014-11-18 Geoffrey Garen <ggaren@apple.com>
+
+ Removed the custom allocator for ListHashSet nodes
+ https://bugs.webkit.org/show_bug.cgi?id=138841
+
+ Reviewed by Andreas Kling.
+
+ Uses of ListHashSet no longer need to declare an inline capacity,
+ since that was only used to specify the capacity of the custom allocator.
+
+ * dom/DOMNamedFlowCollection.h:
+ * dom/DocumentEventQueue.h:
+ * dom/DocumentStyleSheetCollection.h:
+ * dom/NamedFlowCollection.h:
+ * html/FormController.h:
+ * rendering/FloatingObjects.h:
+ * rendering/RenderBlock.h:
+
</ins><span class="cx"> 2014-11-18 David Hyatt <hyatt@apple.com>
</span><span class="cx">
</span><span class="cx"> REGRESSION(r152313): Inline-block element doesn't wrap properly
</span></span></pre></div>
<a id="trunkSourceWebCoredomDOMNamedFlowCollectionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/DOMNamedFlowCollection.h (176289 => 176290)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/DOMNamedFlowCollection.h        2014-11-18 22:57:43 UTC (rev 176289)
+++ trunk/Source/WebCore/dom/DOMNamedFlowCollection.h        2014-11-18 23:06:00 UTC (rev 176290)
</span><span class="lines">@@ -57,7 +57,7 @@
</span><span class="cx"> struct DOMNamedFlowHashFunctions;
</span><span class="cx"> struct DOMNamedFlowHashTranslator;
</span><span class="cx">
</span><del>- typedef ListHashSet<RefPtr<WebKitNamedFlow>, 1, DOMNamedFlowHashFunctions> DOMNamedFlowSet;
</del><ins>+ typedef ListHashSet<RefPtr<WebKitNamedFlow>, DOMNamedFlowHashFunctions> DOMNamedFlowSet;
</ins><span class="cx"> explicit DOMNamedFlowCollection(const Vector<WebKitNamedFlow*>&);
</span><span class="cx"> DOMNamedFlowSet m_namedFlows;
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoredomDocumentEventQueueh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/DocumentEventQueue.h (176289 => 176290)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/DocumentEventQueue.h        2014-11-18 22:57:43 UTC (rev 176289)
+++ trunk/Source/WebCore/dom/DocumentEventQueue.h        2014-11-18 23:06:00 UTC (rev 176290)
</span><span class="lines">@@ -58,7 +58,7 @@
</span><span class="cx">
</span><span class="cx"> Document& m_document;
</span><span class="cx"> std::unique_ptr<Timer> m_pendingEventTimer;
</span><del>- ListHashSet<RefPtr<Event>, 16> m_queuedEvents;
</del><ins>+ ListHashSet<RefPtr<Event>> m_queuedEvents;
</ins><span class="cx"> HashSet<Node*> m_nodesWithQueuedScrollEvents;
</span><span class="cx"> bool m_isClosed;
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoredomDocumentStyleSheetCollectionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/DocumentStyleSheetCollection.h (176289 => 176290)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/DocumentStyleSheetCollection.h        2014-11-18 22:57:43 UTC (rev 176289)
+++ trunk/Source/WebCore/dom/DocumentStyleSheetCollection.h        2014-11-18 23:06:00 UTC (rev 176290)
</span><span class="lines">@@ -152,7 +152,7 @@
</span><span class="cx"> bool m_hadActiveLoadingStylesheet;
</span><span class="cx"> UpdateFlag m_pendingUpdateType;
</span><span class="cx">
</span><del>- typedef ListHashSet<Node*, 32> StyleSheetCandidateListHashSet;
</del><ins>+ typedef ListHashSet<Node*> StyleSheetCandidateListHashSet;
</ins><span class="cx"> StyleSheetCandidateListHashSet m_styleSheetCandidateNodes;
</span><span class="cx">
</span><span class="cx"> String m_preferredStylesheetSetName;
</span></span></pre></div>
<a id="trunkSourceWebCoredomNamedFlowCollectionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/NamedFlowCollection.h (176289 => 176290)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/NamedFlowCollection.h        2014-11-18 22:57:43 UTC (rev 176289)
+++ trunk/Source/WebCore/dom/NamedFlowCollection.h        2014-11-18 23:06:00 UTC (rev 176290)
</span><span class="lines">@@ -63,7 +63,7 @@
</span><span class="cx"> struct NamedFlowHashFunctions;
</span><span class="cx"> struct NamedFlowHashTranslator;
</span><span class="cx">
</span><del>- typedef ListHashSet<WebKitNamedFlow*, 1, NamedFlowHashFunctions> NamedFlowSet;
</del><ins>+ typedef ListHashSet<WebKitNamedFlow*, NamedFlowHashFunctions> NamedFlowSet;
</ins><span class="cx">
</span><span class="cx"> explicit NamedFlowCollection(Document*);
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlFormControllerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/FormController.h (176289 => 176290)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/FormController.h        2014-11-18 22:57:43 UTC (rev 176289)
+++ trunk/Source/WebCore/html/FormController.h        2014-11-18 23:06:00 UTC (rev 176290)
</span><span class="lines">@@ -95,7 +95,7 @@
</span><span class="cx"> WEBCORE_EXPORT static Vector<String> getReferencedFilePaths(const Vector<String>& stateVector);
</span><span class="cx">
</span><span class="cx"> private:
</span><del>- typedef ListHashSet<RefPtr<HTMLFormControlElementWithState>, 64> FormElementListHashSet;
</del><ins>+ typedef ListHashSet<RefPtr<HTMLFormControlElementWithState>> FormElementListHashSet;
</ins><span class="cx"> typedef HashMap<RefPtr<AtomicStringImpl>, std::unique_ptr<SavedFormState>> SavedFormStateMap;
</span><span class="cx">
</span><span class="cx"> static std::unique_ptr<SavedFormStateMap> createSavedFormStateMap(const FormElementListHashSet&);
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingFloatingObjectsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/FloatingObjects.h (176289 => 176290)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/FloatingObjects.h        2014-11-18 22:57:43 UTC (rev 176289)
+++ trunk/Source/WebCore/rendering/FloatingObjects.h        2014-11-18 23:06:00 UTC (rev 176290)
</span><span class="lines">@@ -111,7 +111,7 @@
</span><span class="cx"> static bool equal(const std::unique_ptr<FloatingObject>& a, const FloatingObject& b) { return &a->renderer() == &b.renderer(); }
</span><span class="cx"> };
</span><span class="cx">
</span><del>-typedef ListHashSet<std::unique_ptr<FloatingObject>, 4, FloatingObjectHashFunctions> FloatingObjectSet;
</del><ins>+typedef ListHashSet<std::unique_ptr<FloatingObject>, FloatingObjectHashFunctions> FloatingObjectSet;
</ins><span class="cx">
</span><span class="cx"> typedef PODInterval<LayoutUnit, FloatingObject*> FloatingObjectInterval;
</span><span class="cx"> typedef PODIntervalTree<LayoutUnit, FloatingObject*> FloatingObjectTree;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBlockh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBlock.h (176289 => 176290)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBlock.h        2014-11-18 22:57:43 UTC (rev 176289)
+++ trunk/Source/WebCore/rendering/RenderBlock.h        2014-11-18 23:06:00 UTC (rev 176290)
</span><span class="lines">@@ -40,7 +40,7 @@
</span><span class="cx"> struct BidiRun;
</span><span class="cx"> struct PaintInfo;
</span><span class="cx">
</span><del>-typedef WTF::ListHashSet<RenderBox*, 16> TrackedRendererListHashSet;
</del><ins>+typedef WTF::ListHashSet<RenderBox*> TrackedRendererListHashSet;
</ins><span class="cx"> typedef WTF::HashMap<const RenderBlock*, std::unique_ptr<TrackedRendererListHashSet>> TrackedDescendantsMap;
</span><span class="cx"> typedef WTF::HashMap<const RenderBox*, std::unique_ptr<HashSet<RenderBlock*>>> TrackedContainerMap;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebKitWebKitvcxprojWebKitExportGeneratorWebKitExportsdefin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/WebKit.vcxproj/WebKitExportGenerator/WebKitExports.def.in (176289 => 176290)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/WebKit.vcxproj/WebKitExportGenerator/WebKitExports.def.in        2014-11-18 22:57:43 UTC (rev 176289)
+++ trunk/Source/WebKit/WebKit.vcxproj/WebKitExportGenerator/WebKitExports.def.in        2014-11-18 23:06:00 UTC (rev 176290)
</span><span class="lines">@@ -259,7 +259,7 @@
</span><span class="cx"> symbolWithPointer(?pageNumberForElement@PrintContext@WebCore@@SAHPAVElement@2@ABVFloatSize@2@@Z, ?pageNumberForElement@PrintContext@WebCore@@SAHPEAVElement@2@AEBVFloatSize@2@@Z)
</span><span class="cx"> symbolWithPointer(?paintControlTints@FrameView@WebCore@@AAEXXZ, ?paintControlTints@FrameView@WebCore@@AEAAXXZ)
</span><span class="cx"> symbolWithPointer(?rangeFromLocationAndLength@TextIterator@WebCore@@SA?AV?$PassRefPtr@VRange@WebCore@@@WTF@@PAVContainerNode@2@HH_N@Z, ?rangeFromLocationAndLength@TextIterator@WebCore@@SA?AV?$PassRefPtr@VRange@WebCore@@@WTF@@PEAVContainerNode@2@HH_N@Z)
</span><del>- symbolWithPointer(?rectBasedTestResult@HitTestResult@WebCore@@QBEABV?$ListHashSet@V?$RefPtr@VNode@WebCore@@@WTF@@$0BAA@U?$PtrHash@V?$RefPtr@VNode@WebCore@@@WTF@@@2@@WTF@@XZ, ?rectBasedTestResult@HitTestResult@WebCore@@QEBAAEBV?$ListHashSet@V?$RefPtr@VNode@WebCore@@@WTF@@$0BAA@U?$PtrHash@V?$RefPtr@VNode@WebCore@@@WTF@@@2@@WTF@@XZ)
</del><ins>+ symbolWithPointer(?rectBasedTestResult@HitTestResult@WebCore@@QBEABV?$ListHashSet@V?$RefPtr@VNode@WebCore@@@WTF@@U?$PtrHash@V?$RefPtr@VNode@WebCore@@@WTF@@@2@@WTF@@XZ, )
</ins><span class="cx"> symbolWithPointer(?rectForPoint@HitTestLocation@WebCore@@SA?AVIntRect@2@ABVLayoutPoint@2@IIII@Z, ?rectForPoint@HitTestLocation@WebCore@@SA?AVIntRect@2@AEBVLayoutPoint@2@IIII@Z)
</span><span class="cx"> symbolWithPointer(?reload@FrameLoader@WebCore@@QAEX_N@Z, ?reload@FrameLoader@WebCore@@QEAAX_N@Z)
</span><span class="cx"> symbolWithPointer(?remove@String@WTF@@QAEXIH@Z, ?remove@String@WTF@@QEAAXIH@Z)
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (176289 => 176290)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2014-11-18 22:57:43 UTC (rev 176289)
+++ trunk/Source/WebKit2/ChangeLog        2014-11-18 23:06:00 UTC (rev 176290)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2014-11-18 Geoffrey Garen <ggaren@apple.com>
+
+ Removed the custom allocator for ListHashSet nodes
+ https://bugs.webkit.org/show_bug.cgi?id=138841
+
+ Reviewed by Andreas Kling.
+
+ Uses of ListHashSet no longer need to declare an inline capacity,
+ since that was only used to specify the capacity of the custom allocator.
+
+ * UIProcess/Plugins/PluginInfoStore.cpp:
+ (WebKit::PluginInfoStore::loadPluginsIfNecessary):
+
</ins><span class="cx"> 2014-11-18 Eric Carlson <eric.carlson@apple.com>
</span><span class="cx">
</span><span class="cx"> Unreviewed build fix after r176283.
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessPluginsPluginInfoStorecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Plugins/PluginInfoStore.cpp (176289 => 176290)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Plugins/PluginInfoStore.cpp        2014-11-18 22:57:43 UTC (rev 176289)
+++ trunk/Source/WebKit2/UIProcess/Plugins/PluginInfoStore.cpp        2014-11-18 23:06:00 UTC (rev 176290)
</span><span class="lines">@@ -68,7 +68,7 @@
</span><span class="cx"> if (m_pluginListIsUpToDate)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- ListHashSet<String, 32> uniquePluginPaths;
</del><ins>+ ListHashSet<String> uniquePluginPaths;
</ins><span class="cx">
</span><span class="cx"> // First, load plug-ins from the additional plug-ins directories specified.
</span><span class="cx"> for (size_t i = 0; i < m_additionalPluginsDirectories.size(); ++i)
</span></span></pre>
</div>
</div>
</body>
</html>