From b72b8a9a19d5b660e83c1be3dc419a1b6ef382d7 Mon Sep 17 00:00:00 2001 From: GeorgH93 Date: Sun, 17 Jan 2021 22:07:08 +0100 Subject: [PATCH] Add simple block profiler --- openVulkanoCpp/Base/BlockProfiler.hpp | 31 +++++++++++++++++++++++++++ openVulkanoCpp/Base/Logger.cpp | 2 ++ openVulkanoCpp/Base/Logger.hpp | 1 + openVulkanoCpp/Base/Timer.hpp | 10 ++++----- 4 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 openVulkanoCpp/Base/BlockProfiler.hpp diff --git a/openVulkanoCpp/Base/BlockProfiler.hpp b/openVulkanoCpp/Base/BlockProfiler.hpp new file mode 100644 index 0000000..386d415 --- /dev/null +++ b/openVulkanoCpp/Base/BlockProfiler.hpp @@ -0,0 +1,31 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ + +#pragma once + +#include "Logger.hpp" + +namespace openVulkanoCpp +{ + class BlockProfiler final + { + std::chrono::time_point start; + const std::string name; + + public: + BlockProfiler(const std::string& name) : name(name) + { + start = std::chrono::high_resolution_clock::now(); + } + + ~BlockProfiler() + { + const std::chrono::time_point done = std::chrono::high_resolution_clock::now(); + const auto time = std::chrono::duration_cast(done - start); + Logger::PERF->info("Block {} took {:.3f} ms", name, time.count() / 1000.0); + } + }; +} diff --git a/openVulkanoCpp/Base/Logger.cpp b/openVulkanoCpp/Base/Logger.cpp index 94ddef7..db5f323 100644 --- a/openVulkanoCpp/Base/Logger.cpp +++ b/openVulkanoCpp/Base/Logger.cpp @@ -33,6 +33,7 @@ namespace openVulkanoCpp Logger::Ptr Logger::INPUT = nullptr; Logger::Ptr Logger::FILESYS = nullptr; Logger::Ptr Logger::AR = nullptr; + Logger::Ptr Logger::PERF = nullptr; void Logger::SetupLogger(const std::string& logFolder, const std::string& logFile) { @@ -66,6 +67,7 @@ namespace openVulkanoCpp INPUT = CreateLogger("input"); FILESYS = CreateLogger("filesys"); AR = CreateLogger("ar"); + PERF = CreateLogger("perf"); spdlog::flush_every(std::chrono::seconds(5)); diff --git a/openVulkanoCpp/Base/Logger.hpp b/openVulkanoCpp/Base/Logger.hpp index d0e2887..41a015c 100644 --- a/openVulkanoCpp/Base/Logger.hpp +++ b/openVulkanoCpp/Base/Logger.hpp @@ -31,6 +31,7 @@ namespace openVulkanoCpp static Ptr INPUT; static Ptr FILESYS; static Ptr AR; + static Ptr PERF; static void SetupLogger(const std::string& logFolder = "logs", const std::string& logFile = "openVulkano.log"); diff --git a/openVulkanoCpp/Base/Timer.hpp b/openVulkanoCpp/Base/Timer.hpp index 24c4cb0..2c2a1fb 100644 --- a/openVulkanoCpp/Base/Timer.hpp +++ b/openVulkanoCpp/Base/Timer.hpp @@ -71,19 +71,19 @@ namespace openVulkanoCpp totalSeconds += tickSeconds; } - int64_t GetTickNanoseconds() const { return tickNanoseconds; } + [[nodiscard]] int64_t GetTickNanoseconds() const { return tickNanoseconds; } - int64_t GetTickMilliseconds() const { return tickMilliseconds; } + [[nodiscard]] int64_t GetTickMilliseconds() const { return tickMilliseconds; } - double GetTickSeconds() const { return tickSeconds; } + [[nodiscard]] double GetTickSeconds() const { return tickSeconds; } - uint64_t GetTotalNanoseconds() const { return totalNanoseconds; } + [[nodiscard]] uint64_t GetTotalNanoseconds() const { return totalNanoseconds; } /** * \brief Gets the total amount of seconds past since the timer has been started. This will drift over time! * \return The summed total runtime of the timer. */ - double GetTotalSeconds() const { return totalSeconds; } + [[nodiscard]] double GetTotalSeconds() const { return totalSeconds; } /** * \brief Will recalculate the past time from the total nanoseconds and return it. This is more precise but also slower.