OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 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 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
227 class PLATFORM_EXPORT ThreadHeap { | 227 class PLATFORM_EXPORT ThreadHeap { |
228 public: | 228 public: |
229 ThreadHeap(); | 229 ThreadHeap(); |
230 ~ThreadHeap(); | 230 ~ThreadHeap(); |
231 | 231 |
232 // Returns true for main thread's heap. | 232 // Returns true for main thread's heap. |
233 // TODO(keishi): Per-thread-heap will return false. | 233 // TODO(keishi): Per-thread-heap will return false. |
234 bool isMainThreadHeap() { return this == ThreadHeap::mainThreadHeap(); } | 234 bool isMainThreadHeap() { return this == ThreadHeap::mainThreadHeap(); } |
235 static ThreadHeap* mainThreadHeap() { return s_mainThreadHeap; } | 235 static ThreadHeap* mainThreadHeap() { return s_mainThreadHeap; } |
236 | 236 |
237 #if ENABLE(ASSERT) | 237 #if DCHECK_IS_ON() |
238 bool isAtSafePoint(); | 238 bool isAtSafePoint(); |
239 BasePage* findPageFromAddress(Address); | 239 BasePage* findPageFromAddress(Address); |
240 #endif | 240 #endif |
241 | 241 |
242 template <typename T> | 242 template <typename T> |
243 static inline bool isHeapObjectAlive(const T* object) { | 243 static inline bool isHeapObjectAlive(const T* object) { |
244 static_assert(sizeof(T), "T must be fully defined"); | 244 static_assert(sizeof(T), "T must be fully defined"); |
245 // The strongification of collections relies on the fact that once a | 245 // The strongification of collections relies on the fact that once a |
246 // collection has been strongified, there is no way that it can contain | 246 // collection has been strongified, there is no way that it can contain |
247 // non-live entries, so no entries will be removed. Since you can't set | 247 // non-live entries, so no entries will be removed. Since you can't set |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
371 | 371 |
372 // Remove an item from the weak callback work list and call the callback | 372 // Remove an item from the weak callback work list and call the callback |
373 // with the visitor and the closure pointer. Returns false when there is | 373 // with the visitor and the closure pointer. Returns false when there is |
374 // nothing more to do. | 374 // nothing more to do. |
375 bool popAndInvokeGlobalWeakCallback(Visitor*); | 375 bool popAndInvokeGlobalWeakCallback(Visitor*); |
376 | 376 |
377 // Register an ephemeron table for fixed-point iteration. | 377 // Register an ephemeron table for fixed-point iteration. |
378 void registerWeakTable(void* containerObject, | 378 void registerWeakTable(void* containerObject, |
379 EphemeronCallback, | 379 EphemeronCallback, |
380 EphemeronCallback); | 380 EphemeronCallback); |
381 #if ENABLE(ASSERT) | 381 #if DCHECK_IS_ON() |
382 bool weakTableRegistered(const void*); | 382 bool weakTableRegistered(const void*); |
383 #endif | 383 #endif |
384 | 384 |
385 // Heap compaction registration methods: | 385 // Heap compaction registration methods: |
386 | 386 |
387 // Register |slot| as containing a reference to a movable heap object. | 387 // Register |slot| as containing a reference to a movable heap object. |
388 // | 388 // |
389 // When compaction moves the object pointed to by |*slot| to |newAddress|, | 389 // When compaction moves the object pointed to by |*slot| to |newAddress|, |
390 // |*slot| must be updated to hold |newAddress| instead. | 390 // |*slot| must be updated to hold |newAddress| instead. |
391 void registerMovingObjectReference(MovableReference*); | 391 void registerMovingObjectReference(MovableReference*); |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
583 index <= BlinkGC::NormalPage4ArenaIndex; | 583 index <= BlinkGC::NormalPage4ArenaIndex; |
584 } | 584 } |
585 | 585 |
586 #define DECLARE_EAGER_FINALIZATION_OPERATOR_NEW() \ | 586 #define DECLARE_EAGER_FINALIZATION_OPERATOR_NEW() \ |
587 public: \ | 587 public: \ |
588 GC_PLUGIN_IGNORE("491488") \ | 588 GC_PLUGIN_IGNORE("491488") \ |
589 void* operator new(size_t size) { return allocateObject(size, true); } | 589 void* operator new(size_t size) { return allocateObject(size, true); } |
590 | 590 |
591 #define IS_EAGERLY_FINALIZED() \ | 591 #define IS_EAGERLY_FINALIZED() \ |
592 (pageFromObject(this)->arena()->arenaIndex() == BlinkGC::EagerSweepArenaIndex) | 592 (pageFromObject(this)->arena()->arenaIndex() == BlinkGC::EagerSweepArenaIndex) |
593 #if ENABLE(ASSERT) | 593 #if DCHECK_IS_ON() |
594 class VerifyEagerFinalization { | 594 class VerifyEagerFinalization { |
595 DISALLOW_NEW(); | 595 DISALLOW_NEW(); |
596 | 596 |
597 public: | 597 public: |
598 ~VerifyEagerFinalization() { | 598 ~VerifyEagerFinalization() { |
599 // If this assert triggers, the class annotated as eagerly | 599 // If this assert triggers, the class annotated as eagerly |
600 // finalized ended up not being allocated on the heap | 600 // finalized ended up not being allocated on the heap |
601 // set aside for eager finalization. The reason is most | 601 // set aside for eager finalization. The reason is most |
602 // likely that the effective 'operator new' overload for | 602 // likely that the effective 'operator new' overload for |
603 // this class' leftmost base is for a class that is not | 603 // this class' leftmost base is for a class that is not |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
696 template <typename T> | 696 template <typename T> |
697 void VisitorHelper<Derived>::handleWeakCell(Visitor* self, void* object) { | 697 void VisitorHelper<Derived>::handleWeakCell(Visitor* self, void* object) { |
698 T** cell = reinterpret_cast<T**>(object); | 698 T** cell = reinterpret_cast<T**>(object); |
699 if (*cell && !ObjectAliveTrait<T>::isHeapObjectAlive(*cell)) | 699 if (*cell && !ObjectAliveTrait<T>::isHeapObjectAlive(*cell)) |
700 *cell = nullptr; | 700 *cell = nullptr; |
701 } | 701 } |
702 | 702 |
703 } // namespace blink | 703 } // namespace blink |
704 | 704 |
705 #endif // Heap_h | 705 #endif // Heap_h |
OLD | NEW |