Home | History | Annotate | Download | only in heap
      1 // Copyright 2012 the V8 project authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef V8_HEAP_SWEEPER_THREAD_H_
      6 #define V8_HEAP_SWEEPER_THREAD_H_
      7 
      8 #include "src/base/atomicops.h"
      9 #include "src/base/platform/platform.h"
     10 #include "src/flags.h"
     11 #include "src/utils.h"
     12 
     13 #include "src/heap/spaces.h"
     14 
     15 #include "src/heap/heap.h"
     16 
     17 namespace v8 {
     18 namespace internal {
     19 
     20 class SweeperThread : public base::Thread {
     21  public:
     22   explicit SweeperThread(Isolate* isolate);
     23   ~SweeperThread() {}
     24 
     25   void Run();
     26   void Stop();
     27   void StartSweeping();
     28   void WaitForSweeperThread();
     29   bool SweepingCompleted();
     30 
     31   static int NumberOfThreads(int max_available);
     32 
     33  private:
     34   Isolate* isolate_;
     35   Heap* heap_;
     36   MarkCompactCollector* collector_;
     37   base::Semaphore start_sweeping_semaphore_;
     38   base::Semaphore end_sweeping_semaphore_;
     39   base::Semaphore stop_semaphore_;
     40   volatile base::AtomicWord stop_thread_;
     41 };
     42 }
     43 }  // namespace v8::internal
     44 
     45 #endif  // V8_HEAP_SWEEPER_THREAD_H_
     46