blob: fc6bdda05b54f03429a069b956ca1440e889a0de [file] [log] [blame]
Ben Murdochb8a8cc12014-11-26 15:28:44 +00001// 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
17namespace v8 {
18namespace internal {
19
20class 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_