| 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 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 | 45 |
| 46 namespace blink { | 46 namespace blink { |
| 47 | 47 |
| 48 class BaseHeap; | 48 class BaseHeap; |
| 49 class BaseHeapPage; | 49 class BaseHeapPage; |
| 50 class FinalizedHeapObjectHeader; | 50 class FinalizedHeapObjectHeader; |
| 51 struct GCInfo; | 51 struct GCInfo; |
| 52 class HeapObjectHeader; | 52 class HeapObjectHeader; |
| 53 class PageMemory; | 53 class PageMemory; |
| 54 class PersistentNode; | 54 class PersistentNode; |
| 55 class WrapperPersistentRegion; | |
| 56 class Visitor; | 55 class Visitor; |
| 57 class SafePointBarrier; | 56 class SafePointBarrier; |
| 58 class SafePointAwareMutexLocker; | 57 class SafePointAwareMutexLocker; |
| 59 template<typename Header> class ThreadHeap; | 58 template<typename Header> class ThreadHeap; |
| 60 class CallbackStack; | 59 class CallbackStack; |
| 61 class PageMemoryRegion; | 60 class PageMemoryRegion; |
| 62 | 61 |
| 63 typedef uint8_t* Address; | 62 typedef uint8_t* Address; |
| 64 | 63 |
| 65 typedef void (*FinalizationCallback)(void*); | 64 typedef void (*FinalizationCallback)(void*); |
| (...skipping 525 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 591 // HeapTypeTrait<Type>::index. | 590 // HeapTypeTrait<Type>::index. |
| 592 BaseHeap* heap(int index) const { return m_heaps[index]; } | 591 BaseHeap* heap(int index) const { return m_heaps[index]; } |
| 593 | 592 |
| 594 // Infrastructure to determine if an address is within one of the | 593 // Infrastructure to determine if an address is within one of the |
| 595 // address ranges for the Blink heap. If the address is in the Blink | 594 // address ranges for the Blink heap. If the address is in the Blink |
| 596 // heap the containing heap page is returned. | 595 // heap the containing heap page is returned. |
| 597 BaseHeapPage* contains(Address address) { return heapPageFromAddress(address
); } | 596 BaseHeapPage* contains(Address address) { return heapPageFromAddress(address
); } |
| 598 BaseHeapPage* contains(void* pointer) { return contains(reinterpret_cast<Add
ress>(pointer)); } | 597 BaseHeapPage* contains(void* pointer) { return contains(reinterpret_cast<Add
ress>(pointer)); } |
| 599 BaseHeapPage* contains(const void* pointer) { return contains(const_cast<voi
d*>(pointer)); } | 598 BaseHeapPage* contains(const void* pointer) { return contains(const_cast<voi
d*>(pointer)); } |
| 600 | 599 |
| 601 WrapperPersistentRegion* wrapperRoots() const | |
| 602 { | |
| 603 ASSERT(m_liveWrapperPersistents); | |
| 604 return m_liveWrapperPersistents; | |
| 605 } | |
| 606 WrapperPersistentRegion* takeWrapperPersistentRegion(); | |
| 607 void freeWrapperPersistentRegion(WrapperPersistentRegion*); | |
| 608 | |
| 609 // List of persistent roots allocated on the given thread. | 600 // List of persistent roots allocated on the given thread. |
| 610 PersistentNode* roots() const { return m_persistents.get(); } | 601 PersistentNode* roots() const { return m_persistents.get(); } |
| 611 | 602 |
| 612 // List of global persistent roots not owned by any particular thread. | 603 // List of global persistent roots not owned by any particular thread. |
| 613 // globalRootsMutex must be acquired before any modifications. | 604 // globalRootsMutex must be acquired before any modifications. |
| 614 static PersistentNode* globalRoots(); | 605 static PersistentNode* globalRoots(); |
| 615 static Mutex& globalRootsMutex(); | 606 static Mutex& globalRootsMutex(); |
| 616 | 607 |
| 617 // Visit local thread stack and trace all pointers conservatively. | 608 // Visit local thread stack and trace all pointers conservatively. |
| 618 void visitStack(Visitor*); | 609 void visitStack(Visitor*); |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 692 ASSERT(&T::invokePreFinalizer); | 683 ASSERT(&T::invokePreFinalizer); |
| 693 unregisterPreFinalizerInternal(&target); | 684 unregisterPreFinalizerInternal(&target); |
| 694 } | 685 } |
| 695 | 686 |
| 696 Mutex& sweepMutex() { return m_sweepMutex; } | 687 Mutex& sweepMutex() { return m_sweepMutex; } |
| 697 | 688 |
| 698 Vector<PageMemoryRegion*>& allocatedRegionsSinceLastGC() { return m_allocate
dRegionsSinceLastGC; } | 689 Vector<PageMemoryRegion*>& allocatedRegionsSinceLastGC() { return m_allocate
dRegionsSinceLastGC; } |
| 699 | 690 |
| 700 void shouldFlushHeapDoesNotContainCache() { m_shouldFlushHeapDoesNotContainC
ache = true; } | 691 void shouldFlushHeapDoesNotContainCache() { m_shouldFlushHeapDoesNotContainC
ache = true; } |
| 701 | 692 |
| 693 void registerTraceDOMWrappers(void (*traceDOMWrappers)(Visitor*)) |
| 694 { |
| 695 m_traceDOMWrappers = traceDOMWrappers; |
| 696 } |
| 697 |
| 702 private: | 698 private: |
| 703 explicit ThreadState(); | 699 explicit ThreadState(); |
| 704 ~ThreadState(); | 700 ~ThreadState(); |
| 705 | 701 |
| 706 friend class SafePointBarrier; | 702 friend class SafePointBarrier; |
| 707 friend class SafePointAwareMutexLocker; | 703 friend class SafePointAwareMutexLocker; |
| 708 | 704 |
| 709 void enterSafePoint(StackState, void*); | 705 void enterSafePoint(StackState, void*); |
| 710 NO_SANITIZE_ADDRESS void copyStackUntilSafePointScope(); | 706 NO_SANITIZE_ADDRESS void copyStackUntilSafePointScope(); |
| 711 void clearSafePointScopeMarker() | 707 void clearSafePointScopeMarker() |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 749 // We can't create a static member of type ThreadState here | 745 // We can't create a static member of type ThreadState here |
| 750 // because it will introduce global constructor and destructor. | 746 // because it will introduce global constructor and destructor. |
| 751 // We would like to manage lifetime of the ThreadState attached | 747 // We would like to manage lifetime of the ThreadState attached |
| 752 // to the main thread explicitly instead and still use normal | 748 // to the main thread explicitly instead and still use normal |
| 753 // constructor and destructor for the ThreadState class. | 749 // constructor and destructor for the ThreadState class. |
| 754 // For this we reserve static storage for the main ThreadState | 750 // For this we reserve static storage for the main ThreadState |
| 755 // and lazily construct ThreadState in it using placement new. | 751 // and lazily construct ThreadState in it using placement new. |
| 756 static uint8_t s_mainThreadStateStorage[]; | 752 static uint8_t s_mainThreadStateStorage[]; |
| 757 | 753 |
| 758 ThreadIdentifier m_thread; | 754 ThreadIdentifier m_thread; |
| 759 WrapperPersistentRegion* m_liveWrapperPersistents; | |
| 760 WrapperPersistentRegion* m_pooledWrapperPersistents; | |
| 761 size_t m_pooledWrapperPersistentRegionCount; | |
| 762 OwnPtr<PersistentNode> m_persistents; | 755 OwnPtr<PersistentNode> m_persistents; |
| 763 StackState m_stackState; | 756 StackState m_stackState; |
| 764 intptr_t* m_startOfStack; | 757 intptr_t* m_startOfStack; |
| 765 intptr_t* m_endOfStack; | 758 intptr_t* m_endOfStack; |
| 766 void* m_safePointScopeMarker; | 759 void* m_safePointScopeMarker; |
| 767 Vector<Address> m_safePointStackCopy; | 760 Vector<Address> m_safePointStackCopy; |
| 768 bool m_atSafePoint; | 761 bool m_atSafePoint; |
| 769 Vector<Interruptor*> m_interruptors; | 762 Vector<Interruptor*> m_interruptors; |
| 770 bool m_gcRequested; | 763 bool m_gcRequested; |
| 771 bool m_forcePreciseGCForTesting; | 764 bool m_forcePreciseGCForTesting; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 784 bool m_lowCollectionRate; | 777 bool m_lowCollectionRate; |
| 785 | 778 |
| 786 OwnPtr<blink::WebThread> m_sweeperThread; | 779 OwnPtr<blink::WebThread> m_sweeperThread; |
| 787 int m_numberOfSweeperTasks; | 780 int m_numberOfSweeperTasks; |
| 788 Mutex m_sweepMutex; | 781 Mutex m_sweepMutex; |
| 789 ThreadCondition m_sweepThreadCondition; | 782 ThreadCondition m_sweepThreadCondition; |
| 790 | 783 |
| 791 CallbackStack* m_weakCallbackStack; | 784 CallbackStack* m_weakCallbackStack; |
| 792 HashMap<void*, bool (*)(void*, Visitor&)> m_preFinalizers; | 785 HashMap<void*, bool (*)(void*, Visitor&)> m_preFinalizers; |
| 793 | 786 |
| 787 void (*m_traceDOMWrappers)(Visitor*); |
| 788 |
| 794 #if defined(ADDRESS_SANITIZER) | 789 #if defined(ADDRESS_SANITIZER) |
| 795 void* m_asanFakeStack; | 790 void* m_asanFakeStack; |
| 796 #endif | 791 #endif |
| 797 | 792 |
| 798 Vector<PageMemoryRegion*> m_allocatedRegionsSinceLastGC; | 793 Vector<PageMemoryRegion*> m_allocatedRegionsSinceLastGC; |
| 799 }; | 794 }; |
| 800 | 795 |
| 801 template<ThreadAffinity affinity> class ThreadStateFor; | 796 template<ThreadAffinity affinity> class ThreadStateFor; |
| 802 | 797 |
| 803 template<> class ThreadStateFor<MainThreadOnly> { | 798 template<> class ThreadStateFor<MainThreadOnly> { |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 915 // whether the page is part of a terminting thread or | 910 // whether the page is part of a terminting thread or |
| 916 // if the page is traced after being terminated (orphaned). | 911 // if the page is traced after being terminated (orphaned). |
| 917 uintptr_t m_terminating : 1; | 912 uintptr_t m_terminating : 1; |
| 918 uintptr_t m_tracedAfterOrphaned : 1; | 913 uintptr_t m_tracedAfterOrphaned : 1; |
| 919 uintptr_t m_promptlyFreedSize : 17; // == blinkPageSizeLog2 | 914 uintptr_t m_promptlyFreedSize : 17; // == blinkPageSizeLog2 |
| 920 }; | 915 }; |
| 921 | 916 |
| 922 } | 917 } |
| 923 | 918 |
| 924 #endif // ThreadState_h | 919 #endif // ThreadState_h |
| OLD | NEW |