Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(221)

Side by Side Diff: Source/platform/heap/ThreadState.h

Issue 651713002: Oilpan: DOM wrappers don't need to keep persistent handles (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/platform/heap/RunAllTests.cpp ('k') | Source/platform/heap/ThreadState.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 25 matching lines...) Expand all
36 #include "public/platform/WebThread.h" 36 #include "public/platform/WebThread.h"
37 #include "wtf/HashMap.h" 37 #include "wtf/HashMap.h"
38 #include "wtf/HashSet.h" 38 #include "wtf/HashSet.h"
39 #include "wtf/OwnPtr.h" 39 #include "wtf/OwnPtr.h"
40 #include "wtf/PassOwnPtr.h" 40 #include "wtf/PassOwnPtr.h"
41 #include "wtf/ThreadSpecific.h" 41 #include "wtf/ThreadSpecific.h"
42 #include "wtf/Threading.h" 42 #include "wtf/Threading.h"
43 #include "wtf/ThreadingPrimitives.h" 43 #include "wtf/ThreadingPrimitives.h"
44 #include "wtf/Vector.h" 44 #include "wtf/Vector.h"
45 45
46 namespace v8 {
47 class Isolate;
48 };
49
46 namespace blink { 50 namespace blink {
47 51
48 class BaseHeap; 52 class BaseHeap;
49 class BaseHeapPage; 53 class BaseHeapPage;
50 class FinalizedHeapObjectHeader; 54 class FinalizedHeapObjectHeader;
51 struct GCInfo; 55 struct GCInfo;
52 class HeapObjectHeader; 56 class HeapObjectHeader;
53 class PageMemory; 57 class PageMemory;
54 class PersistentNode; 58 class PersistentNode;
55 class WrapperPersistentRegion;
56 class Visitor; 59 class Visitor;
57 class SafePointBarrier; 60 class SafePointBarrier;
58 class SafePointAwareMutexLocker; 61 class SafePointAwareMutexLocker;
59 template<typename Header> class ThreadHeap; 62 template<typename Header> class ThreadHeap;
60 class CallbackStack; 63 class CallbackStack;
61 class PageMemoryRegion; 64 class PageMemoryRegion;
62 65
63 typedef uint8_t* Address; 66 typedef uint8_t* Address;
64 67
65 typedef void (*FinalizationCallback)(void*); 68 typedef void (*FinalizationCallback)(void*);
(...skipping 550 matching lines...) Expand 10 before | Expand all | Expand 10 after
616 // HeapTypeTrait<Type>::index. 619 // HeapTypeTrait<Type>::index.
617 BaseHeap* heap(int index) const { return m_heaps[index]; } 620 BaseHeap* heap(int index) const { return m_heaps[index]; }
618 621
619 // Infrastructure to determine if an address is within one of the 622 // Infrastructure to determine if an address is within one of the
620 // address ranges for the Blink heap. If the address is in the Blink 623 // address ranges for the Blink heap. If the address is in the Blink
621 // heap the containing heap page is returned. 624 // heap the containing heap page is returned.
622 BaseHeapPage* contains(Address address) { return heapPageFromAddress(address ); } 625 BaseHeapPage* contains(Address address) { return heapPageFromAddress(address ); }
623 BaseHeapPage* contains(void* pointer) { return contains(reinterpret_cast<Add ress>(pointer)); } 626 BaseHeapPage* contains(void* pointer) { return contains(reinterpret_cast<Add ress>(pointer)); }
624 BaseHeapPage* contains(const void* pointer) { return contains(const_cast<voi d*>(pointer)); } 627 BaseHeapPage* contains(const void* pointer) { return contains(const_cast<voi d*>(pointer)); }
625 628
626 WrapperPersistentRegion* wrapperRoots() const
627 {
628 ASSERT(m_liveWrapperPersistents);
629 return m_liveWrapperPersistents;
630 }
631 WrapperPersistentRegion* takeWrapperPersistentRegion();
632 void freeWrapperPersistentRegion(WrapperPersistentRegion*);
633
634 // List of persistent roots allocated on the given thread. 629 // List of persistent roots allocated on the given thread.
635 PersistentNode* roots() const { return m_persistents.get(); } 630 PersistentNode* roots() const { return m_persistents.get(); }
636 631
637 // List of global persistent roots not owned by any particular thread. 632 // List of global persistent roots not owned by any particular thread.
638 // globalRootsMutex must be acquired before any modifications. 633 // globalRootsMutex must be acquired before any modifications.
639 static PersistentNode* globalRoots(); 634 static PersistentNode* globalRoots();
640 static Mutex& globalRootsMutex(); 635 static Mutex& globalRootsMutex();
641 636
642 // Visit local thread stack and trace all pointers conservatively. 637 // Visit local thread stack and trace all pointers conservatively.
643 void visitStack(Visitor*); 638 void visitStack(Visitor*);
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
717 ASSERT(&T::invokePreFinalizer); 712 ASSERT(&T::invokePreFinalizer);
718 unregisterPreFinalizerInternal(&target); 713 unregisterPreFinalizerInternal(&target);
719 } 714 }
720 715
721 Mutex& sweepMutex() { return m_sweepMutex; } 716 Mutex& sweepMutex() { return m_sweepMutex; }
722 717
723 Vector<PageMemoryRegion*>& allocatedRegionsSinceLastGC() { return m_allocate dRegionsSinceLastGC; } 718 Vector<PageMemoryRegion*>& allocatedRegionsSinceLastGC() { return m_allocate dRegionsSinceLastGC; }
724 719
725 void shouldFlushHeapDoesNotContainCache() { m_shouldFlushHeapDoesNotContainC ache = true; } 720 void shouldFlushHeapDoesNotContainCache() { m_shouldFlushHeapDoesNotContainC ache = true; }
726 721
722 void registerTraceDOMWrappers(v8::Isolate* isolate, void (*traceDOMWrappers) (v8::Isolate*, Visitor*))
723 {
724 m_isolate = isolate;
725 m_traceDOMWrappers = traceDOMWrappers;
726 }
727
727 private: 728 private:
728 explicit ThreadState(); 729 explicit ThreadState();
729 ~ThreadState(); 730 ~ThreadState();
730 731
731 friend class SafePointBarrier; 732 friend class SafePointBarrier;
732 friend class SafePointAwareMutexLocker; 733 friend class SafePointAwareMutexLocker;
733 734
734 void enterSafePoint(StackState, void*); 735 void enterSafePoint(StackState, void*);
735 NO_SANITIZE_ADDRESS void copyStackUntilSafePointScope(); 736 NO_SANITIZE_ADDRESS void copyStackUntilSafePointScope();
736 void clearSafePointScopeMarker() 737 void clearSafePointScopeMarker()
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
776 // We can't create a static member of type ThreadState here 777 // We can't create a static member of type ThreadState here
777 // because it will introduce global constructor and destructor. 778 // because it will introduce global constructor and destructor.
778 // We would like to manage lifetime of the ThreadState attached 779 // We would like to manage lifetime of the ThreadState attached
779 // to the main thread explicitly instead and still use normal 780 // to the main thread explicitly instead and still use normal
780 // constructor and destructor for the ThreadState class. 781 // constructor and destructor for the ThreadState class.
781 // For this we reserve static storage for the main ThreadState 782 // For this we reserve static storage for the main ThreadState
782 // and lazily construct ThreadState in it using placement new. 783 // and lazily construct ThreadState in it using placement new.
783 static uint8_t s_mainThreadStateStorage[]; 784 static uint8_t s_mainThreadStateStorage[];
784 785
785 ThreadIdentifier m_thread; 786 ThreadIdentifier m_thread;
786 WrapperPersistentRegion* m_liveWrapperPersistents;
787 WrapperPersistentRegion* m_pooledWrapperPersistents;
788 size_t m_pooledWrapperPersistentRegionCount;
789 OwnPtr<PersistentNode> m_persistents; 787 OwnPtr<PersistentNode> m_persistents;
790 StackState m_stackState; 788 StackState m_stackState;
791 intptr_t* m_startOfStack; 789 intptr_t* m_startOfStack;
792 intptr_t* m_endOfStack; 790 intptr_t* m_endOfStack;
793 void* m_safePointScopeMarker; 791 void* m_safePointScopeMarker;
794 Vector<Address> m_safePointStackCopy; 792 Vector<Address> m_safePointStackCopy;
795 bool m_atSafePoint; 793 bool m_atSafePoint;
796 Vector<Interruptor*> m_interruptors; 794 Vector<Interruptor*> m_interruptors;
797 bool m_gcRequested; 795 bool m_gcRequested;
798 bool m_forcePreciseGCForTesting; 796 bool m_forcePreciseGCForTesting;
(...skipping 12 matching lines...) Expand all
811 bool m_lowCollectionRate; 809 bool m_lowCollectionRate;
812 810
813 OwnPtr<blink::WebThread> m_sweeperThread; 811 OwnPtr<blink::WebThread> m_sweeperThread;
814 int m_numberOfSweeperTasks; 812 int m_numberOfSweeperTasks;
815 Mutex m_sweepMutex; 813 Mutex m_sweepMutex;
816 ThreadCondition m_sweepThreadCondition; 814 ThreadCondition m_sweepThreadCondition;
817 815
818 CallbackStack* m_weakCallbackStack; 816 CallbackStack* m_weakCallbackStack;
819 HashMap<void*, bool (*)(void*, Visitor&)> m_preFinalizers; 817 HashMap<void*, bool (*)(void*, Visitor&)> m_preFinalizers;
820 818
819 v8::Isolate* m_isolate;
820 void (*m_traceDOMWrappers)(v8::Isolate*, Visitor*);
821
821 #if defined(ADDRESS_SANITIZER) 822 #if defined(ADDRESS_SANITIZER)
822 void* m_asanFakeStack; 823 void* m_asanFakeStack;
823 #endif 824 #endif
824 825
825 Vector<PageMemoryRegion*> m_allocatedRegionsSinceLastGC; 826 Vector<PageMemoryRegion*> m_allocatedRegionsSinceLastGC;
826 }; 827 };
827 828
828 template<ThreadAffinity affinity> class ThreadStateFor; 829 template<ThreadAffinity affinity> class ThreadStateFor;
829 830
830 template<> class ThreadStateFor<MainThreadOnly> { 831 template<> class ThreadStateFor<MainThreadOnly> {
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
942 // whether the page is part of a terminting thread or 943 // whether the page is part of a terminting thread or
943 // if the page is traced after being terminated (orphaned). 944 // if the page is traced after being terminated (orphaned).
944 uintptr_t m_terminating : 1; 945 uintptr_t m_terminating : 1;
945 uintptr_t m_tracedAfterOrphaned : 1; 946 uintptr_t m_tracedAfterOrphaned : 1;
946 uintptr_t m_promptlyFreedSize : 17; // == blinkPageSizeLog2 947 uintptr_t m_promptlyFreedSize : 17; // == blinkPageSizeLog2
947 }; 948 };
948 949
949 } 950 }
950 951
951 #endif // ThreadState_h 952 #endif // ThreadState_h
OLDNEW
« no previous file with comments | « Source/platform/heap/RunAllTests.cpp ('k') | Source/platform/heap/ThreadState.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698