diff options
author | crupest <crupest@outlook.com> | 2018-09-10 23:58:34 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2018-09-10 23:58:34 +0800 |
commit | 9250f4d919bc800fe66a50a0874183458e6ebbbe (patch) | |
tree | 1d25285801a6d92cfa8bde6dd0d13433e05d4c04 /CruUI/debug_base.h | |
parent | aa8ba64f4f580552ba14325dd3e04f38a3c9a1de (diff) | |
download | cru-9250f4d919bc800fe66a50a0874183458e6ebbbe.tar.gz cru-9250f4d919bc800fe66a50a0874183458e6ebbbe.tar.bz2 cru-9250f4d919bc800fe66a50a0874183458e6ebbbe.zip |
...
Diffstat (limited to 'CruUI/debug_base.h')
-rw-r--r-- | CruUI/debug_base.h | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/CruUI/debug_base.h b/CruUI/debug_base.h new file mode 100644 index 00000000..f78decbd --- /dev/null +++ b/CruUI/debug_base.h @@ -0,0 +1,45 @@ +#pragma once + + +#include "system_headers.h" +#include <type_traits> +#include <chrono> +#include <fmt/format.h> + +#include "base.h" + +namespace cru::debug +{ +#ifdef CRU_DEBUG + inline void DebugTime(Function<void()>&& action, const wchar_t* const hint_message) + { + const auto before = std::chrono::steady_clock::now(); + action(); + const auto after = std::chrono::steady_clock::now(); + const auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(after - before); + OutputDebugStringW(fmt::format(L"{}: {}ms.\n", hint_message, duration.count()).c_str()); + } + + template<typename TReturn> + TReturn DebugTime(Function<TReturn()>&& action, const wchar_t* const hint_message) + { + const auto before = std::chrono::steady_clock::now(); + auto&& result = action(); + const auto after = std::chrono::steady_clock::now(); + const auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(after - before); + OutputDebugStringW(fmt::format(L"{}: {}ms.\n", hint_message, duration.count()).c_str()); + return std::move(result); + } +#else + inline void DebugTime(Function<void()>&& action, const wchar_t* const hint_message) + { + action(); + } + + template<typename TReturn> + TReturn DebugTime(Function<TReturn()>&& action, const wchar_t* const hint_message) + { + return action(); + } +#endif +} |