| 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 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 ThreadTerminationGC, // A thread-local GC scheduled before the thread sh
utdown. |
| 191 }; | 191 }; |
| 192 | 192 |
| 193 // See setGCState() for possible state transitions. | 193 // See setGCState() for possible state transitions. |
| 194 enum GCState { | 194 enum GCState { |
| 195 NoGCScheduled, | 195 NoGCScheduled, |
| 196 IdleGCScheduled, | 196 IdleGCScheduled, |
| 197 PreciseGCScheduled, | 197 PreciseGCScheduled, |
| 198 FullGCScheduled, | 198 FullGCScheduled, |
| 199 StoppingOtherThreads, | |
| 200 GCRunning, | 199 GCRunning, |
| 201 EagerSweepScheduled, | 200 EagerSweepScheduled, |
| 202 LazySweepScheduled, | 201 LazySweepScheduled, |
| 203 Sweeping, | 202 Sweeping, |
| 204 SweepingAndIdleGCScheduled, | 203 SweepingAndIdleGCScheduled, |
| 205 SweepingAndPreciseGCScheduled, | 204 SweepingAndPreciseGCScheduled, |
| 206 }; | 205 }; |
| 207 | 206 |
| 208 // The NoAllocationScope class is used in debug mode to catch unwanted | 207 // The NoAllocationScope class is used in debug mode to catch unwanted |
| 209 // allocations. E.g. allocations during GC. | 208 // allocations. E.g. allocations during GC. |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 349 void completeSweep(); | 348 void completeSweep(); |
| 350 void postSweep(); | 349 void postSweep(); |
| 351 | 350 |
| 352 // Support for disallowing allocation. Mainly used for sanity | 351 // Support for disallowing allocation. Mainly used for sanity |
| 353 // checks asserts. | 352 // checks asserts. |
| 354 bool isAllocationAllowed() const { return !isAtSafePoint() && !m_noAllocatio
nCount; } | 353 bool isAllocationAllowed() const { return !isAtSafePoint() && !m_noAllocatio
nCount; } |
| 355 void enterNoAllocationScope() { m_noAllocationCount++; } | 354 void enterNoAllocationScope() { m_noAllocationCount++; } |
| 356 void leaveNoAllocationScope() { m_noAllocationCount--; } | 355 void leaveNoAllocationScope() { m_noAllocationCount--; } |
| 357 bool isGCForbidden() const { return m_gcForbiddenCount; } | 356 bool isGCForbidden() const { return m_gcForbiddenCount; } |
| 358 void enterGCForbiddenScope() { m_gcForbiddenCount++; } | 357 void enterGCForbiddenScope() { m_gcForbiddenCount++; } |
| 359 void leaveGCForbiddenScope() { m_gcForbiddenCount--; } | 358 void leaveGCForbiddenScope() |
| 359 { |
| 360 ASSERT(m_gcForbiddenCount > 0); |
| 361 m_gcForbiddenCount--; |
| 362 } |
| 360 bool sweepForbidden() const { return m_sweepForbidden; } | 363 bool sweepForbidden() const { return m_sweepForbidden; } |
| 361 | 364 |
| 362 void prepareRegionTree(); | 365 void prepareRegionTree(); |
| 363 void flushHeapDoesNotContainCacheIfNeeded(); | 366 void flushHeapDoesNotContainCacheIfNeeded(); |
| 364 | 367 |
| 365 // Safepoint related functionality. | 368 // Safepoint related functionality. |
| 366 // | 369 // |
| 367 // When a thread attempts to perform GC it needs to stop all other threads | 370 // When a thread attempts to perform GC it needs to stop all other threads |
| 368 // that use the heap or at least guarantee that they will not touch any | 371 // that use the heap or at least guarantee that they will not touch any |
| 369 // heap allocated object until GC is complete. | 372 // heap allocated object until GC is complete. |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 556 // constructed. | 559 // constructed. |
| 557 void enterGCForbiddenScopeIfNeeded(GarbageCollectedMixinConstructorMarker* g
cMixinMarker) | 560 void enterGCForbiddenScopeIfNeeded(GarbageCollectedMixinConstructorMarker* g
cMixinMarker) |
| 558 { | 561 { |
| 559 if (!m_gcMixinMarker) { | 562 if (!m_gcMixinMarker) { |
| 560 enterGCForbiddenScope(); | 563 enterGCForbiddenScope(); |
| 561 m_gcMixinMarker = gcMixinMarker; | 564 m_gcMixinMarker = gcMixinMarker; |
| 562 } | 565 } |
| 563 } | 566 } |
| 564 void leaveGCForbiddenScopeIfNeeded(GarbageCollectedMixinConstructorMarker* g
cMixinMarker) | 567 void leaveGCForbiddenScopeIfNeeded(GarbageCollectedMixinConstructorMarker* g
cMixinMarker) |
| 565 { | 568 { |
| 566 ASSERT(m_gcForbiddenCount > 0); | |
| 567 if (m_gcMixinMarker == gcMixinMarker) { | 569 if (m_gcMixinMarker == gcMixinMarker) { |
| 568 leaveGCForbiddenScope(); | 570 leaveGCForbiddenScope(); |
| 569 m_gcMixinMarker = nullptr; | 571 m_gcMixinMarker = nullptr; |
| 570 } | 572 } |
| 571 } | 573 } |
| 572 | 574 |
| 573 // vectorBackingHeap() returns a heap that the vector allocation should use. | 575 // vectorBackingHeap() returns a heap that the vector allocation should use. |
| 574 // We have four vector heaps and want to choose the best heap here. | 576 // We have four vector heaps and want to choose the best heap here. |
| 575 // | 577 // |
| 576 // The goal is to improve the succession rate where expand and | 578 // The goal is to improve the succession rate where expand and |
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 742 }; | 744 }; |
| 743 | 745 |
| 744 template<> class ThreadStateFor<AnyThread> { | 746 template<> class ThreadStateFor<AnyThread> { |
| 745 public: | 747 public: |
| 746 static ThreadState* state() { return ThreadState::current(); } | 748 static ThreadState* state() { return ThreadState::current(); } |
| 747 }; | 749 }; |
| 748 | 750 |
| 749 } // namespace blink | 751 } // namespace blink |
| 750 | 752 |
| 751 #endif // ThreadState_h | 753 #endif // ThreadState_h |
| OLD | NEW |