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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/ContiguousContainer.h

Issue 2307623002: [SPv2] Defer decision of raster invalidation after paint for changes z-index, transform, etc. (Closed)
Patch Set: x Created 4 years, 3 months 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef ContiguousContainer_h 5 #ifndef ContiguousContainer_h
6 #define ContiguousContainer_h 6 #define ContiguousContainer_h
7 7
8 #include "platform/PlatformExport.h" 8 #include "platform/PlatformExport.h"
9 #include "wtf/Alignment.h" 9 #include "wtf/Alignment.h"
10 #include "wtf/Allocator.h" 10 #include "wtf/Allocator.h"
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 { 185 {
186 for (auto& element : *this) { 186 for (auto& element : *this) {
187 (void)element; // MSVC incorrectly reports this variable as unused. 187 (void)element; // MSVC incorrectly reports this variable as unused.
188 element.~BaseElementType(); 188 element.~BaseElementType();
189 } 189 }
190 ContiguousContainerBase::clear(); 190 ContiguousContainerBase::clear();
191 } 191 }
192 192
193 void swap(ContiguousContainer& other) { ContiguousContainerBase::swap(other) ; } 193 void swap(ContiguousContainer& other) { ContiguousContainerBase::swap(other) ; }
194 194
195 // Appends a new element using memcpy, then default-constructs a base 195 // Appends a new element using memcpy, then constructs a base element in its place with args.
196 // element in its place. Use with care. 196 // Use with care.
197 BaseElementType& appendByMoving(BaseElementType& item, size_t size) 197 template <typename... Args>
198 BaseElementType& appendByMoving(BaseElementType& item, size_t size, Args&&.. . args)
198 { 199 {
199 ASSERT(size >= sizeof(BaseElementType)); 200 ASSERT(size >= sizeof(BaseElementType));
200 void* newItem = alignedAllocate(size); 201 void* newItem = alignedAllocate(size);
201 memcpy(newItem, static_cast<void*>(&item), size); 202 memcpy(newItem, static_cast<void*>(&item), size);
202 new (&item) BaseElementType; 203 new (&item) BaseElementType(std::forward<Args>(args)...);
203 return *static_cast<BaseElementType*>(newItem); 204 return *static_cast<BaseElementType*>(newItem);
204 } 205 }
205 206
206 private: 207 private:
207 void* alignedAllocate(size_t size) 208 void* alignedAllocate(size_t size)
208 { 209 {
209 void* result = ContiguousContainerBase::allocate(align(size), WTF_HEAP_P ROFILER_TYPE_NAME(BaseElementType)); 210 void* result = ContiguousContainerBase::allocate(align(size), WTF_HEAP_P ROFILER_TYPE_NAME(BaseElementType));
210 DCHECK_EQ(reinterpret_cast<intptr_t>(result) & (alignment - 1), 0u); 211 DCHECK_EQ(reinterpret_cast<intptr_t>(result) & (alignment - 1), 0u);
211 return result; 212 return result;
212 } 213 }
213 214
214 static size_t align(size_t size) 215 static size_t align(size_t size)
215 { 216 {
216 size_t alignedSize = alignment * ((size + alignment - 1) / alignment); 217 size_t alignedSize = alignment * ((size + alignment - 1) / alignment);
217 DCHECK_EQ(alignedSize % alignment, 0u); 218 DCHECK_EQ(alignedSize % alignment, 0u);
218 DCHECK_GE(alignedSize, size); 219 DCHECK_GE(alignedSize, size);
219 DCHECK_LT(alignedSize, size + alignment); 220 DCHECK_LT(alignedSize, size + alignment);
220 return alignedSize; 221 return alignedSize;
221 } 222 }
222 }; 223 };
223 224
224 } // namespace blink 225 } // namespace blink
225 226
226 #endif // ContiguousContainer_h 227 #endif // ContiguousContainer_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698