/** * @file Test.h * @brief 测试基类与计时工具定义。 */ #pragma once #include #include #include #include #include "Id.h" #define TEST_ENTITY_COMPONENTS 0 #define TEST_WINDOW_COMPONENTS 0 #define TEST_RENDERER 1 class Test { public: virtual bool initialize() = 0; virtual void run() = 0; virtual bool shutdown() = 0; }; #if _WIN64 #include class time_it { public: using clock = std::chrono::high_resolution_clock; using time_stamp = std::chrono::steady_clock::time_point; constexpr float dt_avg() const { return _dt_avg * 1e-3f; } void begin() { _start = clock::now(); } void end() { auto dt = clock::now() - _start; _msg_avg += ((float)std::chrono::duration_cast(dt).count() - _msg_avg) / (float)_counter; ++_counter; _dt_avg = _msg_avg; if (std::chrono::duration_cast(clock::now() - _seconds).count() >= 1) { OutputDebugStringA("Avg. frame (ms): "); OutputDebugStringA(std::to_string(_msg_avg).c_str()); OutputDebugStringA((" " + std::to_string(_counter)).c_str()); OutputDebugStringA(" fps"); OutputDebugStringA("\n"); _msg_avg = 0.f; _counter = 1; _seconds = clock::now(); } } private: float _dt_avg{ 16.7f }; float _msg_avg{ 0.f }; int _counter{ 1 }; time_stamp _start; time_stamp _seconds{ clock::now() }; }; #endif