| #ifndef BENCHMARK_THREAD_MANAGER_H | |
| #define BENCHMARK_THREAD_MANAGER_H | |
| #include <atomic> | |
| #include "benchmark/benchmark.h" | |
| #include "mutex.h" | |
| namespace benchmark { | |
| namespace internal { | |
| class ThreadManager { | |
| public: | |
| explicit ThreadManager(int num_threads) : start_stop_barrier_(num_threads) {} | |
| Mutex& GetBenchmarkMutex() const RETURN_CAPABILITY(benchmark_mutex_) { | |
| return benchmark_mutex_; | |
| } | |
| bool StartStopBarrier() { return start_stop_barrier_.wait(); } | |
| void NotifyThreadComplete() { start_stop_barrier_.removeThread(); } | |
| struct Result { | |
| IterationCount iterations = 0; | |
| double real_time_used = 0; | |
| double cpu_time_used = 0; | |
| double manual_time_used = 0; | |
| int64_t complexity_n = 0; | |
| std::string report_label_; | |
| std::string skip_message_; | |
| internal::Skipped skipped_ = internal::NotSkipped; | |
| UserCounters counters; | |
| }; | |
| GUARDED_BY(GetBenchmarkMutex()) Result results; | |
| private: | |
| mutable Mutex benchmark_mutex_; | |
| Barrier start_stop_barrier_; | |
| }; | |
| } // namespace internal | |
| } // namespace benchmark | |
| #endif // BENCHMARK_THREAD_MANAGER_H |