41#define DEBUG_DUMP(msg, st, en, rt, chst, chen, chrt, md) \
42 std::cout << msg << std::endl \
43 << "start = " << std::to_string(st) << std::endl \
44 << "end = " << std::to_string(en) << std::endl \
45 << "runtime = " << std::to_string(rt) << std::endl \
46 << "chk_start = " << std::to_string(chst) << std::endl \
47 << "chk_end = " << std::to_string(chen) << std::endl \
48 << "chk_runtime = " << std::to_string(chrt) << std::endl \
49 << "measurement difference = " \
50 << std::to_string(md) << std::endl \
51 << "--------------------------------------" << std::endl
54#define DEBUG_DUMP(msg, st, en, rt, chst, chen, chrt, md) \
59#define MEASURE(v, chkv, thread) \
60 double v = openvpn::cpu_time(thread); \
62 double chkv = static_cast<double>(time(NULL))
64#define CALCULATE(msg, st, en, rt, chst, chen, chrt, md) \
65 double rt = en - st; \
66 double chrt = chen - chst; \
67 double md = std::max(rt, chrt) - std::min(rt, chrt); \
68 DEBUG_DUMP(msg, st, en, rt, chst, chen, chrt, md)
97 std::random_device rd;
98 std::mt19937 gen(rd());
102 for (
unsigned int i = UINT16_MAX * multiplier; i > 0; i--)
104 d +=
static_cast<double>(gen());
113 MEASURE(start, chk_start,
false);
127 ASSERT_LT(measurement_diff, 10);
133 MEASURE(thr_start, chk_thr_start,
true);
135 MEASURE(thr_end, chk_thr_end,
true);
137 CALCULATE(
"Worker thread " << std::to_string(
id),
144 thr_measurement_diff);
161 ASSERT_LT(thr_measurement_diff, 5);
167 std::vector<ThreadPtr> threads;
168 for (uint8_t i = 0; i < num_threads; i++)
171 tp = std::make_shared<std::thread>([
id = i]()
173 threads.push_back(std::move(tp));
176 for (
const auto &t : threads)
183TEST(CPUTime, cpu_time_thread_1)
186 MEASURE(parent_start, chk_parent_start,
false);
188 MEASURE(parent_end, chk_parent_end,
false);
190 CALCULATE(
"Parent thread - 1 child thread",
199 ASSERT_LT(parent_diff, 10);
203TEST(CPUTime, cpu_time_thread_numcores)
206 auto num_cores = std::min(std::thread::hardware_concurrency(), 1u);
209 MEASURE(parent_start, chk_parent_start,
false);
211 MEASURE(parent_end, chk_parent_end,
false);
213 CALCULATE(
"Parent thread - " << std::to_string(num_cores) <<
" child thread",
222 std::cout <<
"Total thread runtime: " << std::to_string(
thread_runtime) << std::endl;
static void worker_thread()
TEST(CPUTime, cpu_time_pid)
static void workload(const uint16_t multiplier)
void run_threads(const uint8_t num_threads)
#define MEASURE(v, chkv, thread)
void update_thread_runtime(double val)
#define CALCULATE(msg, st, en, rt, chst, chen, chrt, md)
std::shared_ptr< std::thread > ThreadPtr