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_SWEEPER_THREAD_H_
6#define V8_SWEEPER_THREAD_H_
7
8#include "src/base/atomicops.h"
9#include "src/flags.h"
10#include "src/platform.h"
11#include "src/utils.h"
12
13#include "src/spaces.h"
14
15#include "src/heap.h"
16
17namespace v8 {
18namespace internal {
19
20class SweeperThread : public 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  Semaphore start_sweeping_semaphore_;
38  Semaphore end_sweeping_semaphore_;
39  Semaphore stop_semaphore_;
40  volatile base::AtomicWord stop_thread_;
41};
42
43} }  // namespace v8::internal
44
45#endif  // V8_SWEEPER_THREAD_H_
46