1*c6aa206bSSiva Chandra Reddy //===-- Timer.cpp --------------------------------------------------------===// 2*c6aa206bSSiva Chandra Reddy // 3*c6aa206bSSiva Chandra Reddy // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*c6aa206bSSiva Chandra Reddy // See https://llvm.org/LICENSE.txt for license information. 5*c6aa206bSSiva Chandra Reddy // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*c6aa206bSSiva Chandra Reddy // 7*c6aa206bSSiva Chandra Reddy //===----------------------------------------------------------------------===// 8*c6aa206bSSiva Chandra Reddy 9*c6aa206bSSiva Chandra Reddy #include "Timer.h" 10*c6aa206bSSiva Chandra Reddy 11*c6aa206bSSiva Chandra Reddy #include <chrono> 12*c6aa206bSSiva Chandra Reddy #include <fstream> 13*c6aa206bSSiva Chandra Reddy 14*c6aa206bSSiva Chandra Reddy namespace __llvm_libc { 15*c6aa206bSSiva Chandra Reddy namespace testing { 16*c6aa206bSSiva Chandra Reddy 17*c6aa206bSSiva Chandra Reddy struct TimerImplementation { 18*c6aa206bSSiva Chandra Reddy std::chrono::high_resolution_clock::time_point Start; 19*c6aa206bSSiva Chandra Reddy std::chrono::high_resolution_clock::time_point End; 20*c6aa206bSSiva Chandra Reddy }; 21*c6aa206bSSiva Chandra Reddy Timer()22*c6aa206bSSiva Chandra ReddyTimer::Timer() : Impl(new TimerImplementation) {} 23*c6aa206bSSiva Chandra Reddy ~Timer()24*c6aa206bSSiva Chandra ReddyTimer::~Timer() { delete reinterpret_cast<TimerImplementation *>(Impl); } 25*c6aa206bSSiva Chandra Reddy start()26*c6aa206bSSiva Chandra Reddyvoid Timer::start() { 27*c6aa206bSSiva Chandra Reddy auto T = reinterpret_cast<TimerImplementation *>(Impl); 28*c6aa206bSSiva Chandra Reddy T->Start = std::chrono::high_resolution_clock::now(); 29*c6aa206bSSiva Chandra Reddy } 30*c6aa206bSSiva Chandra Reddy stop()31*c6aa206bSSiva Chandra Reddyvoid Timer::stop() { 32*c6aa206bSSiva Chandra Reddy auto T = reinterpret_cast<TimerImplementation *>(Impl); 33*c6aa206bSSiva Chandra Reddy T->End = std::chrono::high_resolution_clock::now(); 34*c6aa206bSSiva Chandra Reddy } 35*c6aa206bSSiva Chandra Reddy nanoseconds() const36*c6aa206bSSiva Chandra Reddyuint64_t Timer::nanoseconds() const { 37*c6aa206bSSiva Chandra Reddy auto T = reinterpret_cast<TimerImplementation *>(Impl); 38*c6aa206bSSiva Chandra Reddy return std::chrono::nanoseconds(T->End - T->Start).count(); 39*c6aa206bSSiva Chandra Reddy } 40*c6aa206bSSiva Chandra Reddy 41*c6aa206bSSiva Chandra Reddy } // namespace testing 42*c6aa206bSSiva Chandra Reddy } // namespace __llvm_libc 43