Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(91)

Side by Side Diff: third_party/WebKit/Source/wtf/Vector.h

Issue 1410223006: Zero-initialize persistent heap vector inline backing buffers. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: for unit test, handle ANNOTATE_CONTIGUOUS_CONTAINER's non-support of inline buffers Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/WebKit/Source/platform/heap/HeapTest.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
3 * 3 *
4 * This library is free software; you can redistribute it and/or 4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public 5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either 6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version. 7 * version 2 of the License, or (at your option) any later version.
8 * 8 *
9 * This library is distributed in the hope that it will be useful, 9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 } else { 144 } else {
145 T* dstEnd = dst + (srcEnd - src); 145 T* dstEnd = dst + (srcEnd - src);
146 while (src != srcEnd) { 146 while (src != srcEnd) {
147 --srcEnd; 147 --srcEnd;
148 --dstEnd; 148 --dstEnd;
149 new (NotNull, dstEnd) T(*srcEnd); 149 new (NotNull, dstEnd) T(*srcEnd);
150 srcEnd->~T(); 150 srcEnd->~T();
151 } 151 }
152 } 152 }
153 } 153 }
154 static void swap(T* src, T* srcEnd, T* dst) 154 static void swap(T* src, T* srcEnd, T* dst)
155 { 155 {
156 std::swap_ranges(src, srcEnd, dst); 156 std::swap_ranges(src, srcEnd, dst);
157 } 157 }
158 }; 158 };
159 159
160 template <typename T> 160 template <typename T>
161 struct VectorMover<true, T> { 161 struct VectorMover<true, T> {
162 static void move(const T* src, const T* srcEnd, T* dst) 162 static void move(const T* src, const T* srcEnd, T* dst)
163 { 163 {
164 if (LIKELY(dst && src)) 164 if (LIKELY(dst && src))
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 280
281 static void swap(T* src, T* srcEnd, T* dst) 281 static void swap(T* src, T* srcEnd, T* dst)
282 { 282 {
283 VectorMover<VectorTraits<T>::canMoveWithMemcpy, T>::swap(src, srcEnd, ds t); 283 VectorMover<VectorTraits<T>::canMoveWithMemcpy, T>::swap(src, srcEnd, ds t);
284 } 284 }
285 285
286 static void uninitializedCopy(const T* src, const T* srcEnd, T* dst) 286 static void uninitializedCopy(const T* src, const T* srcEnd, T* dst)
287 { 287 {
288 VectorCopier<VectorTraits<T>::canCopyWithMemcpy, T>::uninitializedCopy(s rc, srcEnd, dst); 288 VectorCopier<VectorTraits<T>::canCopyWithMemcpy, T>::uninitializedCopy(s rc, srcEnd, dst);
289 } 289 }
290 290
291 static void uninitializedFill(T* dst, T* dstEnd, const T& val) 291 static void uninitializedFill(T* dst, T* dstEnd, const T& val)
292 { 292 {
293 VectorFiller<VectorTraits<T>::canFillWithMemset, T>::uninitializedFill(d st, dstEnd, val); 293 VectorFiller<VectorTraits<T>::canFillWithMemset, T>::uninitializedFill(d st, dstEnd, val);
294 } 294 }
295 295
296 static bool compare(const T* a, const T* b, size_t size) 296 static bool compare(const T* a, const T* b, size_t size)
297 { 297 {
298 return VectorComparer<VectorTraits<T>::canCompareWithMemcmp, T>::compare (a, b, size); 298 return VectorComparer<VectorTraits<T>::canCompareWithMemcmp, T>::compare (a, b, size);
299 } 299 }
300 }; 300 };
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after
779 void swap(Vector& other) 779 void swap(Vector& other)
780 { 780 {
781 Base::swapVectorBuffer(other); 781 Base::swapVectorBuffer(other);
782 std::swap(m_size, other.m_size); 782 std::swap(m_size, other.m_size);
783 } 783 }
784 784
785 void reverse(); 785 void reverse();
786 786
787 template <typename VisitorDispatcher> void trace(VisitorDispatcher); 787 template <typename VisitorDispatcher> void trace(VisitorDispatcher);
788 788
789 protected:
790 using Base::checkUnusedSlots;
791 using Base::clearUnusedSlots;
792
789 private: 793 private:
790 void expandCapacity(size_t newMinCapacity); 794 void expandCapacity(size_t newMinCapacity);
791 const T* expandCapacity(size_t newMinCapacity, const T*); 795 const T* expandCapacity(size_t newMinCapacity, const T*);
792 template <typename U> U* expandCapacity(size_t newMinCapacity, U*); 796 template <typename U> U* expandCapacity(size_t newMinCapacity, U*);
793 void shrinkCapacity(size_t newCapacity); 797 void shrinkCapacity(size_t newCapacity);
794 template <typename U> void appendSlowCase(const U&); 798 template <typename U> void appendSlowCase(const U&);
795 799
796 using Base::m_size; 800 using Base::m_size;
797 using Base::buffer; 801 using Base::buffer;
798 using Base::capacity; 802 using Base::capacity;
799 using Base::swapVectorBuffer; 803 using Base::swapVectorBuffer;
800 using Base::allocateBuffer; 804 using Base::allocateBuffer;
801 using Base::allocationSize; 805 using Base::allocationSize;
802 using Base::clearUnusedSlots;
803 using Base::checkUnusedSlots;
804 }; 806 };
805 807
806 template <typename T, size_t inlineCapacity, typename Allocator> 808 template <typename T, size_t inlineCapacity, typename Allocator>
807 Vector<T, inlineCapacity, Allocator>::Vector(const Vector& other) 809 Vector<T, inlineCapacity, Allocator>::Vector(const Vector& other)
808 : Base(other.capacity()) 810 : Base(other.capacity())
809 { 811 {
810 ANNOTATE_NEW_BUFFER(begin(), capacity(), other.size()); 812 ANNOTATE_NEW_BUFFER(begin(), capacity(), other.size());
811 m_size = other.size(); 813 m_size = other.size();
812 TypeOperations::uninitializedCopy(other.begin(), other.end(), begin()); 814 TypeOperations::uninitializedCopy(other.begin(), other.end(), begin());
813 } 815 }
(...skipping 528 matching lines...) Expand 10 before | Expand all | Expand 10 after
1342 struct NeedsTracing<Vector<T, N>> { 1344 struct NeedsTracing<Vector<T, N>> {
1343 static const bool value = false; 1345 static const bool value = false;
1344 }; 1346 };
1345 #endif 1347 #endif
1346 1348
1347 } // namespace WTF 1349 } // namespace WTF
1348 1350
1349 using WTF::Vector; 1351 using WTF::Vector;
1350 1352
1351 #endif // WTF_Vector_h 1353 #endif // WTF_Vector_h
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/platform/heap/HeapTest.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698