diff options
author | Kyle Edwards <kyle.edwards@kitware.com> | 2022-10-25 18:30:25 (GMT) |
---|---|---|
committer | Kyle Edwards <kyle.edwards@kitware.com> | 2022-10-26 21:54:08 (GMT) |
commit | 3d6a8d7eac588e42ae60231409fc763a6bc41e9b (patch) | |
tree | f6ed617d3f41c61caa5a6a4228b5b6f4c4981ded /Source/cmMakefileProfilingData.h | |
parent | fd57ced75a72cd73d2fd01ec0dd9c5cd552f029d (diff) | |
download | CMake-3d6a8d7eac588e42ae60231409fc763a6bc41e9b.zip CMake-3d6a8d7eac588e42ae60231409fc763a6bc41e9b.tar.gz CMake-3d6a8d7eac588e42ae60231409fc763a6bc41e9b.tar.bz2 |
cmMakefileProfilingData: Refactor to use RAII
And add a more generic StartEntry() method.
Diffstat (limited to 'Source/cmMakefileProfilingData.h')
-rw-r--r-- | Source/cmMakefileProfilingData.h | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/Source/cmMakefileProfilingData.h b/Source/cmMakefileProfilingData.h index a86764a..e8d7dfa 100644 --- a/Source/cmMakefileProfilingData.h +++ b/Source/cmMakefileProfilingData.h @@ -3,6 +3,11 @@ #pragma once #include <memory> #include <string> +#include <utility> + +#include <cm/optional> + +#include <cm3p/json/value.h> // IWYU pragma: keep #include "cmsys/FStream.hxx" @@ -19,8 +24,33 @@ public: cmMakefileProfilingData(const std::string&); ~cmMakefileProfilingData() noexcept; void StartEntry(const cmListFileFunction& lff, cmListFileContext const& lfc); + void StartEntry(const std::string& category, const std::string& name, + cm::optional<Json::Value> args = cm::nullopt); void StopEntry(); + class RAII + { + public: + RAII() = delete; + RAII(const RAII&) = delete; + RAII(RAII&&) noexcept; + + template <typename... Args> + RAII(cmMakefileProfilingData& data, Args&&... args) + : Data(&data) + { + this->Data->StartEntry(std::forward<Args>(args)...); + } + + ~RAII(); + + RAII& operator=(const RAII&) = delete; + RAII& operator=(RAII&&) noexcept; + + private: + cmMakefileProfilingData* Data = nullptr; + }; + private: cmsys::ofstream ProfileStream; std::unique_ptr<Json::StreamWriter> JsonWriter; |