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

Side by Side Diff: third_party/WebKit/Source/platform/heap/HeapAllocator.h

Issue 2592063002: SameThreadCheckedMember<>: verify same-thread usage of heap references. (Closed)
Patch Set: emphasize that the extended Member is for diagnosing/debugging Created 4 years 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 | « no previous file | third_party/WebKit/Source/platform/heap/Member.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 HeapAllocator_h 5 #ifndef HeapAllocator_h
6 #define HeapAllocator_h 6 #define HeapAllocator_h
7 7
8 #include "platform/heap/Heap.h" 8 #include "platform/heap/Heap.h"
9 #include "platform/heap/Persistent.h" 9 #include "platform/heap/Persistent.h"
10 #include "platform/heap/TraceTraits.h" 10 #include "platform/heap/TraceTraits.h"
(...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 template <typename T> 472 template <typename T>
473 struct VectorTraits<blink::Member<T>> : VectorTraitsBase<blink::Member<T>> { 473 struct VectorTraits<blink::Member<T>> : VectorTraitsBase<blink::Member<T>> {
474 STATIC_ONLY(VectorTraits); 474 STATIC_ONLY(VectorTraits);
475 static const bool needsDestruction = false; 475 static const bool needsDestruction = false;
476 static const bool canInitializeWithMemset = true; 476 static const bool canInitializeWithMemset = true;
477 static const bool canClearUnusedSlotsWithMemset = true; 477 static const bool canClearUnusedSlotsWithMemset = true;
478 static const bool canMoveWithMemcpy = true; 478 static const bool canMoveWithMemcpy = true;
479 }; 479 };
480 480
481 template <typename T> 481 template <typename T>
482 struct VectorTraits<blink::SameThreadCheckedMember<T>>
483 : VectorTraitsBase<blink::SameThreadCheckedMember<T>> {
484 STATIC_ONLY(VectorTraits);
485 static const bool needsDestruction = false;
486 static const bool canInitializeWithMemset = true;
487 static const bool canClearUnusedSlotsWithMemset = true;
488 static const bool canMoveWithMemcpy = true;
489 static const bool canSwapUsingCopyOrMove = false;
490 };
491
492 template <typename T>
482 struct VectorTraits<blink::TraceWrapperMember<T>> 493 struct VectorTraits<blink::TraceWrapperMember<T>>
483 : VectorTraitsBase<blink::TraceWrapperMember<T>> { 494 : VectorTraitsBase<blink::TraceWrapperMember<T>> {
484 STATIC_ONLY(VectorTraits); 495 STATIC_ONLY(VectorTraits);
485 static const bool needsDestruction = false; 496 static const bool needsDestruction = false;
486 static const bool canInitializeWithMemset = true; 497 static const bool canInitializeWithMemset = true;
487 static const bool canClearUnusedSlotsWithMemset = true; 498 static const bool canClearUnusedSlotsWithMemset = true;
488 static const bool canMoveWithMemcpy = true; 499 static const bool canMoveWithMemcpy = true;
489 static const bool canSwapUsingCopyOrMove = false; 500 static const bool canSwapUsingCopyOrMove = false;
490 }; 501 };
491 502
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
596 607
597 template <typename U> 608 template <typename U>
598 static void store(const U& value, blink::Member<T>& storage) { 609 static void store(const U& value, blink::Member<T>& storage) {
599 storage = value; 610 storage = value;
600 } 611 }
601 612
602 static PeekOutType peek(const blink::Member<T>& value) { return value; } 613 static PeekOutType peek(const blink::Member<T>& value) { return value; }
603 }; 614 };
604 615
605 template <typename T> 616 template <typename T>
617 struct HashTraits<blink::SameThreadCheckedMember<T>>
618 : SimpleClassHashTraits<blink::SameThreadCheckedMember<T>> {
619 STATIC_ONLY(HashTraits);
620 // FIXME: The distinction between PeekInType and PassInType is there for
621 // the sake of the reference counting handles. When they are gone the two
622 // types can be merged into PassInType.
623 // FIXME: Implement proper const'ness for iterator types. Requires support
624 // in the marking Visitor.
625 using PeekInType = T*;
626 using PassInType = T*;
627 using IteratorGetType = blink::SameThreadCheckedMember<T>*;
628 using IteratorConstGetType = const blink::SameThreadCheckedMember<T>*;
629 using IteratorReferenceType = blink::SameThreadCheckedMember<T>&;
630 using IteratorConstReferenceType = const blink::SameThreadCheckedMember<T>&;
631 static IteratorReferenceType getToReferenceConversion(IteratorGetType x) {
632 return *x;
633 }
634 static IteratorConstReferenceType getToReferenceConstConversion(
635 IteratorConstGetType x) {
636 return *x;
637 }
638
639 using PeekOutType = T*;
640
641 template <typename U>
642 static void store(const U& value,
643 blink::SameThreadCheckedMember<T>& storage) {
644 storage = value;
645 }
646
647 static PeekOutType peek(const blink::SameThreadCheckedMember<T>& value) {
648 return value;
649 }
650
651 static blink::SameThreadCheckedMember<T> emptyValue() {
652 return blink::SameThreadCheckedMember<T>(nullptr, nullptr);
653 }
654 };
655
656 template <typename T>
606 struct HashTraits<blink::TraceWrapperMember<T>> 657 struct HashTraits<blink::TraceWrapperMember<T>>
607 : SimpleClassHashTraits<blink::TraceWrapperMember<T>> { 658 : SimpleClassHashTraits<blink::TraceWrapperMember<T>> {
608 STATIC_ONLY(HashTraits); 659 STATIC_ONLY(HashTraits);
609 // FIXME: The distinction between PeekInType and PassInType is there for 660 // FIXME: The distinction between PeekInType and PassInType is there for
610 // the sake of the reference counting handles. When they are gone the two 661 // the sake of the reference counting handles. When they are gone the two
611 // types can be merged into PassInType. 662 // types can be merged into PassInType.
612 // FIXME: Implement proper const'ness for iterator types. Requires support 663 // FIXME: Implement proper const'ness for iterator types. Requires support
613 // in the marking Visitor. 664 // in the marking Visitor.
614 using PeekInType = T*; 665 using PeekInType = T*;
615 using PassInType = T*; 666 using PassInType = T*;
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
785 const blink::HeapHashCountedSet<Value, HashFunctions, Traits>& set, 836 const blink::HeapHashCountedSet<Value, HashFunctions, Traits>& set,
786 VectorType& vector) { 837 VectorType& vector) {
787 copyToVector(static_cast<const HashCountedSet<Value, HashFunctions, Traits, 838 copyToVector(static_cast<const HashCountedSet<Value, HashFunctions, Traits,
788 blink::HeapAllocator>&>(set), 839 blink::HeapAllocator>&>(set),
789 vector); 840 vector);
790 } 841 }
791 842
792 } // namespace WTF 843 } // namespace WTF
793 844
794 #endif 845 #endif
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Source/platform/heap/Member.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698