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 Persistent_h | 5 #ifndef Persistent_h |
6 #define Persistent_h | 6 #define Persistent_h |
7 | 7 |
8 #include "platform/heap/Heap.h" | 8 #include "platform/heap/Heap.h" |
9 #include "platform/heap/Member.h" | 9 #include "platform/heap/Member.h" |
10 #include "platform/heap/PersistentNode.h" | 10 #include "platform/heap/PersistentNode.h" |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
102 return m_raw == reinterpret_cast<T*>(-1); | 102 return m_raw == reinterpret_cast<T*>(-1); |
103 } | 103 } |
104 | 104 |
105 T* release() { | 105 T* release() { |
106 T* result = m_raw; | 106 T* result = m_raw; |
107 assign(nullptr); | 107 assign(nullptr); |
108 return result; | 108 return result; |
109 } | 109 } |
110 | 110 |
111 void clear() { assign(nullptr); } | 111 void clear() { assign(nullptr); } |
112 T& operator*() const { return *m_raw; } | 112 T& operator*() const { |
| 113 checkPointer(); |
| 114 return *m_raw; |
| 115 } |
113 explicit operator bool() const { return m_raw; } | 116 explicit operator bool() const { return m_raw; } |
114 operator T*() const { return m_raw; } | 117 operator T*() const { |
| 118 checkPointer(); |
| 119 return m_raw; |
| 120 } |
115 T* operator->() const { return *this; } | 121 T* operator->() const { return *this; } |
116 T* get() const { return m_raw; } | 122 |
| 123 T* get() const { |
| 124 checkPointer(); |
| 125 return m_raw; |
| 126 } |
117 | 127 |
118 template <typename U> | 128 template <typename U> |
119 PersistentBase& operator=(U* other) { | 129 PersistentBase& operator=(U* other) { |
120 assign(other); | 130 assign(other); |
121 return *this; | 131 return *this; |
122 } | 132 } |
123 | 133 |
124 PersistentBase& operator=(std::nullptr_t) { | 134 PersistentBase& operator=(std::nullptr_t) { |
125 assign(nullptr); | 135 assign(nullptr); |
126 return *this; | 136 return *this; |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 if (!m_persistentNode) | 246 if (!m_persistentNode) |
237 return; | 247 return; |
238 ThreadState* state = ThreadStateFor<ThreadingTrait<T>::Affinity>::state(); | 248 ThreadState* state = ThreadStateFor<ThreadingTrait<T>::Affinity>::state(); |
239 ASSERT(state->checkThread()); | 249 ASSERT(state->checkThread()); |
240 // Persistent handle must be created and destructed in the same thread. | 250 // Persistent handle must be created and destructed in the same thread. |
241 ASSERT(m_state == state); | 251 ASSERT(m_state == state); |
242 state->freePersistentNode(m_persistentNode); | 252 state->freePersistentNode(m_persistentNode); |
243 m_persistentNode = nullptr; | 253 m_persistentNode = nullptr; |
244 } | 254 } |
245 | 255 |
246 void checkPointer() { | 256 void checkPointer() const { |
247 #if DCHECK_IS_ON() | 257 #if DCHECK_IS_ON() |
248 if (!m_raw || isHashTableDeletedValue()) | 258 if (!m_raw || isHashTableDeletedValue()) |
249 return; | 259 return; |
250 | 260 |
251 if (crossThreadnessConfiguration != CrossThreadPersistentConfiguration) { | 261 if (crossThreadnessConfiguration != CrossThreadPersistentConfiguration) { |
252 ThreadState* current = ThreadState::current(); | 262 ThreadState* current = ThreadState::current(); |
253 DCHECK(current); | 263 DCHECK(current); |
254 // m_creationThreadState may be null when this is used in a heap | 264 // m_creationThreadState may be null when this is used in a heap |
255 // collection which initialized the Persistent with memset and the | 265 // collection which initialized the Persistent with memset and the |
256 // constructor wasn't called. | 266 // constructor wasn't called. |
(...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
793 static blink::CrossThreadPersistent<T> Unwrap( | 803 static blink::CrossThreadPersistent<T> Unwrap( |
794 const blink::CrossThreadWeakPersistent<T>& wrapped) { | 804 const blink::CrossThreadWeakPersistent<T>& wrapped) { |
795 blink::CrossThreadPersistentRegion::LockScope persistentLock( | 805 blink::CrossThreadPersistentRegion::LockScope persistentLock( |
796 blink::ProcessHeap::crossThreadPersistentRegion()); | 806 blink::ProcessHeap::crossThreadPersistentRegion()); |
797 return blink::CrossThreadPersistent<T>(wrapped.get()); | 807 return blink::CrossThreadPersistent<T>(wrapped.get()); |
798 } | 808 } |
799 }; | 809 }; |
800 } | 810 } |
801 | 811 |
802 #endif // Persistent_h | 812 #endif // Persistent_h |
OLD | NEW |