xref: /aosp_15_r20/external/libcxxabi/test/support/timer.hpp (revision c05d8e5dc3e10f6ce4317e8bc22cc4a25f55fa94)
1*c05d8e5dSAndroid Build Coastguard Worker //===----------------------------------------------------------------------===////
2*c05d8e5dSAndroid Build Coastguard Worker //
3*c05d8e5dSAndroid Build Coastguard Worker //                     The LLVM Compiler Infrastructure
4*c05d8e5dSAndroid Build Coastguard Worker //
5*c05d8e5dSAndroid Build Coastguard Worker // This file is dual licensed under the MIT and the University of Illinois Open
6*c05d8e5dSAndroid Build Coastguard Worker // Source Licenses. See LICENSE.TXT for details.
7*c05d8e5dSAndroid Build Coastguard Worker //
8*c05d8e5dSAndroid Build Coastguard Worker //===----------------------------------------------------------------------===////
9*c05d8e5dSAndroid Build Coastguard Worker 
10*c05d8e5dSAndroid Build Coastguard Worker #ifndef TIMER_HPP
11*c05d8e5dSAndroid Build Coastguard Worker #define TIMER_HPP
12*c05d8e5dSAndroid Build Coastguard Worker 
13*c05d8e5dSAndroid Build Coastguard Worker // Define LIBCXXABI_NO_TIMER to disable testing with a timer.
14*c05d8e5dSAndroid Build Coastguard Worker #ifndef LIBCXXABI_NO_TIMER
15*c05d8e5dSAndroid Build Coastguard Worker 
16*c05d8e5dSAndroid Build Coastguard Worker #include <chrono>
17*c05d8e5dSAndroid Build Coastguard Worker #include <iostream>
18*c05d8e5dSAndroid Build Coastguard Worker 
19*c05d8e5dSAndroid Build Coastguard Worker class timer
20*c05d8e5dSAndroid Build Coastguard Worker {
21*c05d8e5dSAndroid Build Coastguard Worker     typedef std::chrono::high_resolution_clock Clock;
22*c05d8e5dSAndroid Build Coastguard Worker     typedef Clock::time_point TimePoint;
23*c05d8e5dSAndroid Build Coastguard Worker     typedef std::chrono::microseconds MicroSeconds;
24*c05d8e5dSAndroid Build Coastguard Worker public:
timer()25*c05d8e5dSAndroid Build Coastguard Worker     timer() : m_start(Clock::now()) {}
26*c05d8e5dSAndroid Build Coastguard Worker 
27*c05d8e5dSAndroid Build Coastguard Worker     timer(timer const &) = delete;
28*c05d8e5dSAndroid Build Coastguard Worker     timer & operator=(timer const &) = delete;
29*c05d8e5dSAndroid Build Coastguard Worker 
~timer()30*c05d8e5dSAndroid Build Coastguard Worker     ~timer()
31*c05d8e5dSAndroid Build Coastguard Worker     {
32*c05d8e5dSAndroid Build Coastguard Worker         using std::chrono::duration_cast;
33*c05d8e5dSAndroid Build Coastguard Worker         TimePoint end = Clock::now();
34*c05d8e5dSAndroid Build Coastguard Worker         MicroSeconds us = duration_cast<MicroSeconds>(end - m_start);
35*c05d8e5dSAndroid Build Coastguard Worker         std::cout << us.count() << " microseconds\n";
36*c05d8e5dSAndroid Build Coastguard Worker     }
37*c05d8e5dSAndroid Build Coastguard Worker 
38*c05d8e5dSAndroid Build Coastguard Worker private:
39*c05d8e5dSAndroid Build Coastguard Worker     TimePoint m_start;
40*c05d8e5dSAndroid Build Coastguard Worker };
41*c05d8e5dSAndroid Build Coastguard Worker 
42*c05d8e5dSAndroid Build Coastguard Worker #else /* LIBCXXABI_NO_TIMER */
43*c05d8e5dSAndroid Build Coastguard Worker 
44*c05d8e5dSAndroid Build Coastguard Worker class timer
45*c05d8e5dSAndroid Build Coastguard Worker {
46*c05d8e5dSAndroid Build Coastguard Worker public:
timer()47*c05d8e5dSAndroid Build Coastguard Worker     timer() {}
48*c05d8e5dSAndroid Build Coastguard Worker     timer(timer const &) = delete;
49*c05d8e5dSAndroid Build Coastguard Worker     timer & operator=(timer const &) = delete;
~timer()50*c05d8e5dSAndroid Build Coastguard Worker     ~timer() {}
51*c05d8e5dSAndroid Build Coastguard Worker };
52*c05d8e5dSAndroid Build Coastguard Worker 
53*c05d8e5dSAndroid Build Coastguard Worker #endif /* LIBCXXABI_NO_TIMER */
54*c05d8e5dSAndroid Build Coastguard Worker 
55*c05d8e5dSAndroid Build Coastguard Worker #endif /* TIMER_HPP */
56