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