Support explicitly creating & destroying profiler frames

This commit is contained in:
Nikita Lisitsa 2024-07-12 17:58:18 +03:00
parent 54fb90214f
commit 058505e9f0
2 changed files with 17 additions and 0 deletions

View file

@ -16,7 +16,9 @@ namespace psemek::prof
~ profiler(); ~ profiler();
static void start_frame(std::string const & name);
static void push(std::string const & name, std::chrono::duration<double> duration); static void push(std::string const & name, std::chrono::duration<double> duration);
static void end_frame(std::chrono::duration<double> duration);
template <typename Duration> template <typename Duration>
static void push(std::string const & name, Duration duration) static void push(std::string const & name, Duration duration)

View file

@ -191,6 +191,14 @@ namespace psemek::prof
current = current->parent; current = current->parent;
} }
void profiler::start_frame(std::string const & name)
{
get_current();
std::lock_guard lock{*(current->mutex)};
current = current->child(name);
}
void profiler::push(std::string const & name, std::chrono::duration<double> duration) void profiler::push(std::string const & name, std::chrono::duration<double> duration)
{ {
get_current(); get_current();
@ -199,4 +207,11 @@ namespace psemek::prof
current->child(name)->execution_time.push(duration.count()); current->child(name)->execution_time.push(duration.count());
} }
void profiler::end_frame(std::chrono::duration<double> duration)
{
std::lock_guard lock{*(current->mutex)};
current->execution_time.push(duration.count());
current = current->parent;
}
} }