|
|
@@ -0,0 +1,42 @@ |
|
|
//===-- Timer.cpp --------------------------------------------------------===// |
|
|
// |
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
|
|
// See https://llvm.org/LICENSE.txt for license information. |
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
|
|
// |
|
|
//===----------------------------------------------------------------------===// |
|
|
|
|
|
#include "Timer.h" |
|
|
|
|
|
#include <chrono> |
|
|
#include <fstream> |
|
|
|
|
|
namespace __llvm_libc { |
|
|
namespace testing { |
|
|
|
|
|
struct TimerImplementation { |
|
|
std::chrono::high_resolution_clock::time_point Start; |
|
|
std::chrono::high_resolution_clock::time_point End; |
|
|
}; |
|
|
|
|
|
Timer::Timer() : Impl(new TimerImplementation) {} |
|
|
|
|
|
Timer::~Timer() { delete reinterpret_cast<TimerImplementation *>(Impl); } |
|
|
|
|
|
void Timer::start() { |
|
|
auto T = reinterpret_cast<TimerImplementation *>(Impl); |
|
|
T->Start = std::chrono::high_resolution_clock::now(); |
|
|
} |
|
|
|
|
|
void Timer::stop() { |
|
|
auto T = reinterpret_cast<TimerImplementation *>(Impl); |
|
|
T->End = std::chrono::high_resolution_clock::now(); |
|
|
} |
|
|
|
|
|
uint64_t Timer::nanoseconds() const { |
|
|
auto T = reinterpret_cast<TimerImplementation *>(Impl); |
|
|
return std::chrono::nanoseconds(T->End - T->Start).count(); |
|
|
} |
|
|
|
|
|
} // namespace testing |
|
|
} // namespace __llvm_libc |