OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 TraceWrapperMember_h | 5 #ifndef TraceWrapperMember_h |
6 #define TraceWrapperMember_h | 6 #define TraceWrapperMember_h |
7 | 7 |
8 #include "bindings/core/v8/ScriptWrappableVisitor.h" | 8 #include "bindings/core/v8/ScriptWrappableVisitor.h" |
9 #include "platform/heap/HeapAllocator.h" | 9 #include "platform/heap/HeapAllocator.h" |
10 | 10 |
11 namespace blink { | 11 namespace blink { |
12 | 12 |
13 class HeapObjectHeader; | 13 class HeapObjectHeader; |
14 template <typename T> | 14 template <typename T> |
15 class Member; | 15 class Member; |
16 | 16 |
17 /** | 17 /** |
18 * TraceWrapperMember is used for Member fields that should participate in | 18 * TraceWrapperMember is used for Member fields that should participate in |
19 * wrapper tracing, i.e., strongly hold a ScriptWrappable alive. All | 19 * wrapper tracing, i.e., strongly hold a ScriptWrappable alive. All |
20 * TraceWrapperMember fields must be traced in the class' traceWrappers method. | 20 * TraceWrapperMember fields must be traced in the class' traceWrappers method. |
21 */ | 21 */ |
22 template <class T> | 22 template <class T> |
23 class TraceWrapperMember : public Member<T> { | 23 class TraceWrapperMember : public Member<T> { |
24 DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); | 24 DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); |
25 | 25 |
26 public: | 26 public: |
27 TraceWrapperMember(void* parent, T* raw) : Member<T>(raw), m_parent(parent) { | 27 TraceWrapperMember(void* parent, T* raw) : Member<T>(raw), m_parent(parent) { |
28 #if DCHECK_IS_ON() | 28 #if DCHECK_IS_ON() |
29 if (m_parent) { | 29 if (m_parent) { |
30 HeapObjectHeader::fromPayload(m_parent)->checkHeader(); | 30 HeapObjectHeader::checkFromPayload(m_parent); |
31 } | 31 } |
32 #endif | 32 #endif |
33 // We don't require a write barrier here as TraceWrapperMember is used for | 33 // We don't require a write barrier here as TraceWrapperMember is used for |
34 // the following scenarios: | 34 // the following scenarios: |
35 // - Initial initialization: The write barrier will not fire as the parent | 35 // - Initial initialization: The write barrier will not fire as the parent |
36 // is initially white. | 36 // is initially white. |
37 // - Wrapping when inserting into a container: The write barrier will fire | 37 // - Wrapping when inserting into a container: The write barrier will fire |
38 // upon establishing the move into the container. | 38 // upon establishing the move into the container. |
39 // - Assignment to a field: The regular assignment operator will fire the | 39 // - Assignment to a field: The regular assignment operator will fire the |
40 // write barrier. | 40 // write barrier. |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
138 b.clear(); | 138 b.clear(); |
139 b.reserveCapacity(temp.size()); | 139 b.reserveCapacity(temp.size()); |
140 for (auto item : temp) { | 140 for (auto item : temp) { |
141 b.push_back(item.get()); | 141 b.push_back(item.get()); |
142 } | 142 } |
143 } | 143 } |
144 | 144 |
145 } // namespace blink | 145 } // namespace blink |
146 | 146 |
147 #endif // TraceWrapperMember_h | 147 #endif // TraceWrapperMember_h |
OLD | NEW |