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