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);
~SweeperThread()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