summaryrefslogtreecommitdiffstats
path: root/Source/cmMakefileProfilingData.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmMakefileProfilingData.h')
-rw-r--r--Source/cmMakefileProfilingData.h30
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;