| 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 160 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  171     // When garbage collecting we need to know whether or not there |  171     // When garbage collecting we need to know whether or not there | 
|  172     // can be pointers to Blink GC managed objects on the stack for |  172     // can be pointers to Blink GC managed objects on the stack for | 
|  173     // each thread. When threads reach a safe point they record |  173     // each thread. When threads reach a safe point they record | 
|  174     // whether or not they have pointers on the stack. |  174     // whether or not they have pointers on the stack. | 
|  175     enum StackState { |  175     enum StackState { | 
|  176         NoHeapPointersOnStack, |  176         NoHeapPointersOnStack, | 
|  177         HeapPointersOnStack |  177         HeapPointersOnStack | 
|  178     }; |  178     }; | 
|  179  |  179  | 
|  180     enum GCType { |  180     enum GCType { | 
|  181         GCWithSweep, // Sweeping is completed in Heap::collectGarbage(). |  181         // Run a marking task and a sweeping task in Heap::collectGarbage(). | 
|  182         GCWithoutSweep, // Lazy sweeping is scheduled. |  182         GCWithSweep, | 
 |  183         // Run only a marking task in Heap::collectGarbage(). A sweeping task | 
 |  184         // is split into chunks and scheduled lazily. | 
 |  185         GCWithoutSweep, | 
 |  186         // Run a marking task just to take a heap snapshot. A sweeping task | 
 |  187         // doesn't run and the marks are just dropped. | 
 |  188         TakeSnapshot, | 
|  183     }; |  189     }; | 
|  184  |  190  | 
|  185     // See setGCState() for possible state transitions. |  191     // See setGCState() for possible state transitions. | 
|  186     enum GCState { |  192     enum GCState { | 
|  187         NoGCScheduled, |  193         NoGCScheduled, | 
|  188         IdleGCScheduled, |  194         IdleGCScheduled, | 
|  189         PreciseGCScheduled, |  195         PreciseGCScheduled, | 
|  190         FullGCScheduled, |  196         FullGCScheduled, | 
|  191         StoppingOtherThreads, |  197         StoppingOtherThreads, | 
|  192         GCRunning, |  198         GCRunning, | 
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  333     //   has not yet completed its lazy sweeping of the last GC. |  339     //   has not yet completed its lazy sweeping of the last GC. | 
|  334     //   In this case, the next GC just cancels the remaining lazy sweeping. |  340     //   In this case, the next GC just cancels the remaining lazy sweeping. | 
|  335     //   Specifically, preGC() of the next GC calls makeConsistentForGC() |  341     //   Specifically, preGC() of the next GC calls makeConsistentForGC() | 
|  336     //   and it marks all not-yet-swept objets as dead. |  342     //   and it marks all not-yet-swept objets as dead. | 
|  337     void makeConsistentForGC(); |  343     void makeConsistentForGC(); | 
|  338     void preGC(); |  344     void preGC(); | 
|  339     void postGC(GCType); |  345     void postGC(GCType); | 
|  340     void preSweep(); |  346     void preSweep(); | 
|  341     void completeSweep(); |  347     void completeSweep(); | 
|  342     void postSweep(); |  348     void postSweep(); | 
 |  349     // makeConsistentForMutator() drops marks from marked objects and rebuild | 
 |  350     // free lists. This is called after taking a snapshot and before resuming | 
 |  351     // the executions of mutators. | 
 |  352     void makeConsistentForMutator(); | 
|  343  |  353  | 
|  344     // Support for disallowing allocation. Mainly used for sanity |  354     // Support for disallowing allocation. Mainly used for sanity | 
|  345     // checks asserts. |  355     // checks asserts. | 
|  346     bool isAllocationAllowed() const { return !isAtSafePoint() && !m_noAllocatio
     nCount; } |  356     bool isAllocationAllowed() const { return !isAtSafePoint() && !m_noAllocatio
     nCount; } | 
|  347     void enterNoAllocationScope() { m_noAllocationCount++; } |  357     void enterNoAllocationScope() { m_noAllocationCount++; } | 
|  348     void leaveNoAllocationScope() { m_noAllocationCount--; } |  358     void leaveNoAllocationScope() { m_noAllocationCount--; } | 
|  349     bool isGCForbidden() const { return m_gcForbiddenCount; } |  359     bool isGCForbidden() const { return m_gcForbiddenCount; } | 
|  350     void enterGCForbiddenScope() { m_gcForbiddenCount++; } |  360     void enterGCForbiddenScope() { m_gcForbiddenCount++; } | 
|  351     void leaveGCForbiddenScope() { m_gcForbiddenCount--; } |  361     void leaveGCForbiddenScope() { m_gcForbiddenCount--; } | 
|  352     bool sweepForbidden() const { return m_sweepForbidden; } |  362     bool sweepForbidden() const { return m_sweepForbidden; } | 
| (...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  643     // to sweep away any objects that are left on this heap. |  653     // to sweep away any objects that are left on this heap. | 
|  644     // We assert that nothing must remain after this cleanup. |  654     // We assert that nothing must remain after this cleanup. | 
|  645     // If assertion does not hold we crash as we are potentially |  655     // If assertion does not hold we crash as we are potentially | 
|  646     // in the dangling pointer situation. |  656     // in the dangling pointer situation. | 
|  647     void cleanup(); |  657     void cleanup(); | 
|  648     void cleanupPages(); |  658     void cleanupPages(); | 
|  649  |  659  | 
|  650     void unregisterPreFinalizerInternal(void*); |  660     void unregisterPreFinalizerInternal(void*); | 
|  651     void invokePreFinalizers(Visitor&); |  661     void invokePreFinalizers(Visitor&); | 
|  652  |  662  | 
 |  663     void takeSnapshot(); | 
|  653 #if ENABLE(GC_PROFILING) |  664 #if ENABLE(GC_PROFILING) | 
|  654     void snapshotFreeList(); |  665     void snapshotFreeList(); | 
|  655 #endif |  666 #endif | 
|  656     void clearHeapAges(); |  667     void clearHeapAges(); | 
|  657     int heapIndexOfVectorHeapLeastRecentlyExpanded(int beginHeapIndex, int endHe
     apIndex); |  668     int heapIndexOfVectorHeapLeastRecentlyExpanded(int beginHeapIndex, int endHe
     apIndex); | 
|  658  |  669  | 
|  659     friend class SafePointAwareMutexLocker; |  670     friend class SafePointAwareMutexLocker; | 
|  660     friend class SafePointBarrier; |  671     friend class SafePointBarrier; | 
|  661     friend class SafePointScope; |  672     friend class SafePointScope; | 
|  662  |  673  | 
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  735 }; |  746 }; | 
|  736  |  747  | 
|  737 template<> class ThreadStateFor<AnyThread> { |  748 template<> class ThreadStateFor<AnyThread> { | 
|  738 public: |  749 public: | 
|  739     static ThreadState* state() { return ThreadState::current(); } |  750     static ThreadState* state() { return ThreadState::current(); } | 
|  740 }; |  751 }; | 
|  741  |  752  | 
|  742 } // namespace blink |  753 } // namespace blink | 
|  743  |  754  | 
|  744 #endif // ThreadState_h |  755 #endif // ThreadState_h | 
| OLD | NEW |