Files
clang-p2996/libc/utils/testutils/Timer.cpp
Siva Chandra Reddy c6aa206b42 [libc] Add differential quality and perf analysis targets for sinf and cosf.
Infrastructure needed for setting up the diff binaries has been added.
 Along the way, an exhaustive test for sinf and cosf have also been added.

Reviewed By: lntue

Differential Revision: https://reviews.llvm.org/D101276
2021-04-26 19:39:33 +00:00

43 lines
1.2 KiB
C++

//===-- 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