/*** Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: DebugBenchmark.hpp Date: 2021-6-10 Author: Reece ***/ #pragma once #include namespace Aurora::Time { #if ((defined(AU_FORCE_BENCHMARK) || defined(DEBUG) || defined(STAGING)) && (!defined(AU_FORCE_NOBENCHMARK))) class DebugBenchmark { public: DebugBenchmark(AuString message) : message_(message) {} ~DebugBenchmark() { Finish(); } void Finish() { if (AuExchange(finished_, true)) return; auto time = timer_.End(); Aurora::Logging::LogDbg("[Benchmark] {} took {}", message_, ConvertNSToTimescale(time)); } private: TimerHighRes timer_; bool finished_ {}; AuString message_; }; #else class DebugBenchmark { public: template DebugBenchmark(T... args) {} void Finish() {} }; #endif } #define SysBenchmark(...) Aurora::Time::DebugBenchmark _(__VA_ARGS__);