/* ======================================================================== (C) Copyright 2023 by Molly Rocket, Inc., All Rights Reserved. This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Please see https://computerenhance.com for more information ======================================================================== */ /* ======================================================================== LISTING 73 ======================================================================== */ #include #include #include typedef uint64_t u64; typedef double f64; #include "listing_0070_platform_metrics.cpp" int main(int ArgCount, char **Args) { u64 MillisecondsToWait = 1000; if(ArgCount == 2) { MillisecondsToWait = atol(Args[1]); } u64 OSFreq = GetOSTimerFreq(); printf(" OS Freq: %llu (reported)\n", OSFreq); u64 CPUStart = ReadCPUTimer(); u64 OSStart = ReadOSTimer(); u64 OSEnd = 0; u64 OSElapsed = 0; u64 OSWaitTime = OSFreq * MillisecondsToWait / 1000; while(OSElapsed < OSWaitTime) { OSEnd = ReadOSTimer(); OSElapsed = OSEnd - OSStart; } u64 CPUEnd = ReadCPUTimer(); u64 CPUElapsed = CPUEnd - CPUStart; u64 CPUFreq = 0; if(OSElapsed) { CPUFreq = OSFreq * CPUElapsed / OSElapsed; } printf(" OS Timer: %llu -> %llu = %llu elapsed\n", OSStart, OSEnd, OSElapsed); printf(" OS Seconds: %.4f\n", (f64)OSElapsed/(f64)OSFreq); printf(" CPU Timer: %llu -> %llu = %llu elapsed\n", CPUStart, CPUEnd, CPUElapsed); printf(" CPU Freq: %llu (guessed)\n", CPUFreq); return 0; }