/* * Copyright (c) Advanced Micro Devices, Inc., or its affiliates. * * SPDX-License-Identifier: MIT */ #include "Timer.h" #ifdef _WIN32 #include #endif #ifdef __linux__ #include #endif CPerfCounter::CPerfCounter() : _clocks(0), _start(0) { #ifdef _WIN32 QueryPerformanceFrequency((LARGE_INTEGER*)&_freq); #endif #ifdef __linux__ _freq = 1000; #endif } CPerfCounter::~CPerfCounter() { // EMPTY! } void CPerfCounter::Start(void) { #ifdef _WIN32 if (_start) { MessageBox(NULL, "Bad Perf Counter Start", "Error", MB_OK); exit(0); } QueryPerformanceCounter((LARGE_INTEGER*)&_start); #endif #ifdef __linux__ struct timeval s; gettimeofday(&s, 0); _start = (i64)s.tv_sec * 1000 + (i64)s.tv_usec / 1000; #endif } void CPerfCounter::Stop(void) { i64 n; #ifdef _WIN32 if (!_start) { MessageBox(NULL, "Bad Perf Counter Stop", "Error", MB_OK); exit(0); } QueryPerformanceCounter((LARGE_INTEGER*)&n); #endif #ifdef __linux__ struct timeval s; gettimeofday(&s, 0); n = (i64)s.tv_sec * 1000 + (i64)s.tv_usec / 1000; #endif n -= _start; _start = 0; _clocks += n; } void CPerfCounter::Reset(void) { #ifdef _WIN32 if (_start) { MessageBox(NULL, "Bad Perf Counter Reset", "Error", MB_OK); exit(0); } #endif _clocks = 0; } double CPerfCounter::GetElapsedTime(void) { #ifdef _WIN32 if (_start) { MessageBox(NULL, "Trying to get time while still running.", "Error", MB_OK); exit(0); } #endif return (double)_clocks / (double)_freq; }