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