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

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

Issue 1160143002: Oilpan: Always enter a GCScope when we run a GC (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/Heap.cpp ('k') | Source/web/WebHeap.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 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 // each thread. When threads reach a safe point they record 180 // each thread. When threads reach a safe point they record
181 // whether or not they have pointers on the stack. 181 // whether or not they have pointers on the stack.
182 enum StackState { 182 enum StackState {
183 NoHeapPointersOnStack, 183 NoHeapPointersOnStack,
184 HeapPointersOnStack 184 HeapPointersOnStack
185 }; 185 };
186 186
187 enum GCType { 187 enum GCType {
188 GCWithSweep, // Sweeping is completed in Heap::collectGarbage(). 188 GCWithSweep, // Sweeping is completed in Heap::collectGarbage().
189 GCWithoutSweep, // Lazy sweeping is scheduled. 189 GCWithoutSweep, // Lazy sweeping is scheduled.
190 ThreadTerminationGC, // A thread-local GC scheduled before the thread sh utdown.
190 }; 191 };
191 192
192 // See setGCState() for possible state transitions. 193 // See setGCState() for possible state transitions.
193 enum GCState { 194 enum GCState {
194 NoGCScheduled, 195 NoGCScheduled,
195 IdleGCScheduled, 196 IdleGCScheduled,
196 PreciseGCScheduled, 197 PreciseGCScheduled,
197 FullGCScheduled, 198 FullGCScheduled,
198 StoppingOtherThreads, 199 StoppingOtherThreads,
199 GCRunning, 200 GCRunning,
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 387
387 // Request all other threads to stop. Must only be called if the current thr ead is at safepoint. 388 // Request all other threads to stop. Must only be called if the current thr ead is at safepoint.
388 static bool stopThreads(); 389 static bool stopThreads();
389 static void resumeThreads(); 390 static void resumeThreads();
390 391
391 // Check if GC is requested by another thread and pause this thread if this is the case. 392 // Check if GC is requested by another thread and pause this thread if this is the case.
392 // Can only be called when current thread is in a consistent state. 393 // Can only be called when current thread is in a consistent state.
393 void safePoint(StackState); 394 void safePoint(StackState);
394 395
395 // Mark current thread as running inside safepoint. 396 // Mark current thread as running inside safepoint.
396 void enterSafePointWithPointers(void* scopeMarker) { enterSafePoint(HeapPoin tersOnStack, scopeMarker); } 397 void enterSafePoint(StackState, void*);
397 void leaveSafePoint(SafePointAwareMutexLocker* = nullptr); 398 void leaveSafePoint(SafePointAwareMutexLocker* = nullptr);
398 bool isAtSafePoint() const { return m_atSafePoint; } 399 bool isAtSafePoint() const { return m_atSafePoint; }
399 400
400 // If attached thread enters long running loop that can call back 401 // If attached thread enters long running loop that can call back
401 // into Blink and leaving and reentering safepoint at every 402 // into Blink and leaving and reentering safepoint at every
402 // transition between this loop and Blink is deemed too expensive 403 // transition between this loop and Blink is deemed too expensive
403 // then instead of marking this loop as a GC safepoint thread 404 // then instead of marking this loop as a GC safepoint thread
404 // can provide an interruptor object which would allow GC 405 // can provide an interruptor object which would allow GC
405 // to temporarily interrupt and pause this long running loop at 406 // to temporarily interrupt and pause this long running loop at
406 // an arbitrary moment creating a safepoint for a GC. 407 // an arbitrary moment creating a safepoint for a GC.
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
615 { 616 {
616 return Vector1HeapIndex <= heapIndex && heapIndex <= Vector4HeapIndex; 617 return Vector1HeapIndex <= heapIndex && heapIndex <= Vector4HeapIndex;
617 } 618 }
618 void allocationPointAdjusted(int heapIndex); 619 void allocationPointAdjusted(int heapIndex);
619 void promptlyFreed(size_t gcInfoIndex); 620 void promptlyFreed(size_t gcInfoIndex);
620 621
621 private: 622 private:
622 ThreadState(); 623 ThreadState();
623 ~ThreadState(); 624 ~ThreadState();
624 625
625 void enterSafePoint(StackState, void*);
626 NO_SANITIZE_ADDRESS void copyStackUntilSafePointScope(); 626 NO_SANITIZE_ADDRESS void copyStackUntilSafePointScope();
627 void clearSafePointScopeMarker() 627 void clearSafePointScopeMarker()
628 { 628 {
629 m_safePointStackCopy.clear(); 629 m_safePointStackCopy.clear();
630 m_safePointScopeMarker = nullptr; 630 m_safePointScopeMarker = nullptr;
631 } 631 }
632 632
633 // shouldSchedule{Precise,Idle}GC and shouldForceConservativeGC 633 // shouldSchedule{Precise,Idle}GC and shouldForceConservativeGC
634 // implement the heuristics that are used to determine when to collect garba ge. 634 // implement the heuristics that are used to determine when to collect garba ge.
635 // If shouldForceConservativeGC returns true, we force the garbage 635 // If shouldForceConservativeGC returns true, we force the garbage
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
742 }; 742 };
743 743
744 template<> class ThreadStateFor<AnyThread> { 744 template<> class ThreadStateFor<AnyThread> {
745 public: 745 public:
746 static ThreadState* state() { return ThreadState::current(); } 746 static ThreadState* state() { return ThreadState::current(); }
747 }; 747 };
748 748
749 } // namespace blink 749 } // namespace blink
750 750
751 #endif // ThreadState_h 751 #endif // ThreadState_h
OLDNEW
« no previous file with comments | « Source/platform/heap/Heap.cpp ('k') | Source/web/WebHeap.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698