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

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

Issue 1159773004: Oilpan: Implement a GC to take a heap snapshot (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 6 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/MarkingVisitorImpl.h ('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 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 // When garbage collecting we need to know whether or not there 185 // When garbage collecting we need to know whether or not there
186 // can be pointers to Blink GC managed objects on the stack for 186 // can be pointers to Blink GC managed objects on the stack for
187 // each thread. When threads reach a safe point they record 187 // each thread. When threads reach a safe point they record
188 // whether or not they have pointers on the stack. 188 // whether or not they have pointers on the stack.
189 enum StackState { 189 enum StackState {
190 NoHeapPointersOnStack, 190 NoHeapPointersOnStack,
191 HeapPointersOnStack 191 HeapPointersOnStack
192 }; 192 };
193 193
194 enum GCType { 194 enum GCType {
195 GCWithSweep, // Sweeping is completed in Heap::collectGarbage(). 195 // Both of the marking task and the sweeping task run in
196 GCWithoutSweep, // Lazy sweeping is scheduled. 196 // Heap::collectGarbage().
197 ThreadTerminationGC, // A thread-local GC scheduled before the thread sh utdown. 197 GCWithSweep,
198 // Only the marking task runs in Heap::collectGarbage().
199 // The sweeping task is split into chunks and scheduled lazily.
200 GCWithoutSweep,
201 // Only the marking task runs just to take a heap snapshot.
202 // The sweeping task doesn't run. The marks added in the marking task
203 // are just cleared.
204 TakeSnapshot,
205 // The marking task does not mark objects outside the heap of the GCing
206 // thread.
207 ThreadTerminationGC,
198 }; 208 };
199 209
200 // See setGCState() for possible state transitions. 210 // See setGCState() for possible state transitions.
201 enum GCState { 211 enum GCState {
202 NoGCScheduled, 212 NoGCScheduled,
203 IdleGCScheduled, 213 IdleGCScheduled,
204 PreciseGCScheduled, 214 PreciseGCScheduled,
205 FullGCScheduled, 215 FullGCScheduled,
206 GCRunning, 216 GCRunning,
207 EagerSweepScheduled, 217 EagerSweepScheduled,
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 // has not yet completed its lazy sweeping of the last GC. 357 // has not yet completed its lazy sweeping of the last GC.
348 // In this case, the next GC just cancels the remaining lazy sweeping. 358 // In this case, the next GC just cancels the remaining lazy sweeping.
349 // Specifically, preGC() of the next GC calls makeConsistentForGC() 359 // Specifically, preGC() of the next GC calls makeConsistentForGC()
350 // and it marks all not-yet-swept objets as dead. 360 // and it marks all not-yet-swept objets as dead.
351 void makeConsistentForGC(); 361 void makeConsistentForGC();
352 void preGC(); 362 void preGC();
353 void postGC(GCType); 363 void postGC(GCType);
354 void preSweep(); 364 void preSweep();
355 void completeSweep(); 365 void completeSweep();
356 void postSweep(); 366 void postSweep();
367 // makeConsistentForMutator() drops marks from marked objects and rebuild
368 // free lists. This is called after taking a snapshot and before resuming
369 // the executions of mutators.
370 void makeConsistentForMutator();
357 371
358 // Support for disallowing allocation. Mainly used for sanity 372 // Support for disallowing allocation. Mainly used for sanity
359 // checks asserts. 373 // checks asserts.
360 bool isAllocationAllowed() const { return !isAtSafePoint() && !m_noAllocatio nCount; } 374 bool isAllocationAllowed() const { return !isAtSafePoint() && !m_noAllocatio nCount; }
361 void enterNoAllocationScope() { m_noAllocationCount++; } 375 void enterNoAllocationScope() { m_noAllocationCount++; }
362 void leaveNoAllocationScope() { m_noAllocationCount--; } 376 void leaveNoAllocationScope() { m_noAllocationCount--; }
363 bool isGCForbidden() const { return m_gcForbiddenCount; } 377 bool isGCForbidden() const { return m_gcForbiddenCount; }
364 void enterGCForbiddenScope() { m_gcForbiddenCount++; } 378 void enterGCForbiddenScope() { m_gcForbiddenCount++; }
365 void leaveGCForbiddenScope() 379 void leaveGCForbiddenScope()
366 { 380 {
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
664 // to sweep away any objects that are left on this heap. 678 // to sweep away any objects that are left on this heap.
665 // We assert that nothing must remain after this cleanup. 679 // We assert that nothing must remain after this cleanup.
666 // If assertion does not hold we crash as we are potentially 680 // If assertion does not hold we crash as we are potentially
667 // in the dangling pointer situation. 681 // in the dangling pointer situation.
668 void cleanup(); 682 void cleanup();
669 void cleanupPages(); 683 void cleanupPages();
670 684
671 void unregisterPreFinalizerInternal(void*); 685 void unregisterPreFinalizerInternal(void*);
672 void invokePreFinalizers(); 686 void invokePreFinalizers();
673 687
688 void takeSnapshot();
674 #if ENABLE(GC_PROFILING) 689 #if ENABLE(GC_PROFILING)
675 void snapshotFreeList(); 690 void snapshotFreeList();
676 #endif 691 #endif
677 void clearHeapAges(); 692 void clearHeapAges();
678 int heapIndexOfVectorHeapLeastRecentlyExpanded(int beginHeapIndex, int endHe apIndex); 693 int heapIndexOfVectorHeapLeastRecentlyExpanded(int beginHeapIndex, int endHe apIndex);
679 694
680 friend class SafePointAwareMutexLocker; 695 friend class SafePointAwareMutexLocker;
681 friend class SafePointBarrier; 696 friend class SafePointBarrier;
682 friend class SafePointScope; 697 friend class SafePointScope;
683 698
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
756 }; 771 };
757 772
758 template<> class ThreadStateFor<AnyThread> { 773 template<> class ThreadStateFor<AnyThread> {
759 public: 774 public:
760 static ThreadState* state() { return ThreadState::current(); } 775 static ThreadState* state() { return ThreadState::current(); }
761 }; 776 };
762 777
763 } // namespace blink 778 } // namespace blink
764 779
765 #endif // ThreadState_h 780 #endif // ThreadState_h
OLDNEW
« no previous file with comments | « Source/platform/heap/MarkingVisitorImpl.h ('k') | Source/platform/heap/ThreadState.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698