| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2014 Google Inc. All rights reserved. | 2 * Copyright (C) 2014 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 208 private: | 208 private: |
| 209 PersistentAnchor() : PersistentNode(TraceMethodDelegate<PersistentAnchor, &P
ersistentAnchor::trace>::trampoline) | 209 PersistentAnchor() : PersistentNode(TraceMethodDelegate<PersistentAnchor, &P
ersistentAnchor::trace>::trampoline) |
| 210 { | 210 { |
| 211 m_next = this; | 211 m_next = this; |
| 212 m_prev = this; | 212 m_prev = this; |
| 213 } | 213 } |
| 214 | 214 |
| 215 friend class ThreadState; | 215 friend class ThreadState; |
| 216 }; | 216 }; |
| 217 | 217 |
| 218 template<typename T> |
| 219 class CrossThreadPersistent; |
| 220 |
| 218 // Persistent handles are used to store pointers into the | 221 // Persistent handles are used to store pointers into the |
| 219 // managed heap. As long as the Persistent handle is alive | 222 // managed heap. As long as the Persistent handle is alive |
| 220 // the GC will keep the object pointed to alive. Persistent | 223 // the GC will keep the object pointed to alive. Persistent |
| 221 // handles can be stored in objects and they are not scoped. | 224 // handles can be stored in objects and they are not scoped. |
| 222 // Persistent handles must not be used to contain pointers | 225 // Persistent handles must not be used to contain pointers |
| 223 // between objects that are in the managed heap. They are only | 226 // between objects that are in the managed heap. They are only |
| 224 // meant to point to managed heap objects from variables/members | 227 // meant to point to managed heap objects from variables/members |
| 225 // outside the managed heap. | 228 // outside the managed heap. |
| 226 // | 229 // |
| 227 // A Persistent is always a GC root from the point of view of | 230 // A Persistent is always a GC root from the point of view of |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 322 Persistent& operator=(const RawPtr<U>& other) | 325 Persistent& operator=(const RawPtr<U>& other) |
| 323 { | 326 { |
| 324 m_raw = other; | 327 m_raw = other; |
| 325 return *this; | 328 return *this; |
| 326 } | 329 } |
| 327 | 330 |
| 328 T* get() const { return m_raw; } | 331 T* get() const { return m_raw; } |
| 329 | 332 |
| 330 private: | 333 private: |
| 331 T* m_raw; | 334 T* m_raw; |
| 335 |
| 336 friend class CrossThreadPersistent<T>; |
| 332 }; | 337 }; |
| 333 | 338 |
| 334 // Unlike Persistent, we can destruct a CrossThreadPersistent in a thread | 339 // Unlike Persistent, we can destruct a CrossThreadPersistent in a thread |
| 335 // different from the construction thread. | 340 // different from the construction thread. |
| 336 template<typename T> | 341 template<typename T> |
| 337 class CrossThreadPersistent : public Persistent<T, GlobalPersistents> { | 342 class CrossThreadPersistent : public Persistent<T, GlobalPersistents> { |
| 343 WTF_DISALLOW_CONSTRUCTION_FROM_ZERO(CrossThreadPersistent); |
| 344 WTF_DISALLOW_ZERO_ASSIGNMENT(CrossThreadPersistent); |
| 338 public: | 345 public: |
| 339 CrossThreadPersistent(T* raw) : Persistent<T, GlobalPersistents>(raw) { } | 346 CrossThreadPersistent(T* raw) : Persistent<T, GlobalPersistents>(raw) { } |
| 347 |
| 348 using Persistent<T, GlobalPersistents>::operator=; |
| 340 }; | 349 }; |
| 341 | 350 |
| 342 // FIXME: derive affinity based on the collection. | 351 // FIXME: derive affinity based on the collection. |
| 343 template<typename Collection, ThreadAffinity Affinity = AnyThread> | 352 template<typename Collection, ThreadAffinity Affinity = AnyThread> |
| 344 class PersistentHeapCollectionBase | 353 class PersistentHeapCollectionBase |
| 345 : public Collection | 354 : public Collection |
| 346 , public PersistentBase<ThreadLocalPersistents<Affinity>, PersistentHeapColl
ectionBase<Collection, Affinity> > { | 355 , public PersistentBase<ThreadLocalPersistents<Affinity>, PersistentHeapColl
ectionBase<Collection, Affinity> > { |
| 347 // Never allocate these objects with new. Use Persistent<Collection> instead
. | 356 // Never allocate these objects with new. Use Persistent<Collection> instead
. |
| 348 DISALLOW_ALLOCATION(); | 357 DISALLOW_ALLOCATION(); |
| 349 public: | 358 public: |
| (...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 885 }; | 894 }; |
| 886 | 895 |
| 887 template<typename T, typename U> | 896 template<typename T, typename U> |
| 888 struct NeedsTracing<HashMap<T, U> > { | 897 struct NeedsTracing<HashMap<T, U> > { |
| 889 static const bool value = false; | 898 static const bool value = false; |
| 890 }; | 899 }; |
| 891 | 900 |
| 892 } // namespace WTF | 901 } // namespace WTF |
| 893 | 902 |
| 894 #endif | 903 #endif |
| OLD | NEW |