synapse-app-sdk
C++ SDK for Synapse Apps
Loading...
Searching...
No Matches
function_profiler.hpp
1#pragma once
2
3#include <atomic>
4#include <chrono>
5#include <shared_mutex>
6#include <string>
7#include <unordered_map>
8#include <vector>
9
10#include <google/protobuf/util/json_util.h>
11#include <spdlog/spdlog.h>
12
13#include "api/performance.pb.h"
14namespace synapse {
15
22 public:
27 explicit FunctionProfiler(const std::string& name);
28
32 void start();
33
37 void stop();
38
43 synapse::FunctionProfile get_profile();
44
45 private:
47 std::string name_;
48
50 std::atomic<uint64_t> call_count_{0};
51
53 std::atomic<uint64_t> min_duration_ns_{std::numeric_limits<uint64_t>::max()};
54
56 std::atomic<uint64_t> max_duration_ns_{0};
57
59 std::atomic<uint64_t> latest_duration_ns_{0};
60
62 std::atomic<uint64_t> total_duration_ns_{0};
63
65 static constexpr size_t kNumSamples = 100;
66
68 std::mutex samples_mutex_;
69
71 std::vector<uint64_t> time_samples_;
72
74 std::chrono::steady_clock::time_point start_time_;
75};
76
83 public:
86
91 void add(const std::string& name);
92
97 void remove(const std::string& name);
98
103 void start(const std::string& name);
104
109 void stop(const std::string& name);
110
116 synapse::FunctionProfile get(const std::string& name);
117
122 std::vector<synapse::FunctionProfile> get_all();
123
128 void print_profile(const std::string& name);
129
130 private:
132 std::shared_mutex profilers_mutex_;
133
135 std::unordered_map<std::string, std::unique_ptr<FunctionProfiler>> profilers_;
136};
137} // namespace synapse
std::vector< synapse::FunctionProfile > get_all()
Get profiles for all functions.
Definition function_profiler.cpp:122
synapse::FunctionProfile get(const std::string &name)
Get the profile for a specific function.
Definition function_profiler.cpp:107
void start(const std::string &name)
Start timing a function.
Definition function_profiler.cpp:83
void stop(const std::string &name)
Stop timing a function.
Definition function_profiler.cpp:95
void add(const std::string &name)
Add a new profiler for the specified function.
Definition function_profiler.cpp:69
FunctionProfilerManager()=default
Default constructor.
void print_profile(const std::string &name)
Print a function's profile information.
Definition function_profiler.cpp:135
void remove(const std::string &name)
Remove a profiler.
Definition function_profiler.cpp:78
void stop()
Stop timing and record the duration.
Definition function_profiler.cpp:9
synapse::FunctionProfile get_profile()
Get the current profile statistics.
Definition function_profiler.cpp:30
FunctionProfiler(const std::string &name)
Constructor for FunctionProfiler.
Definition function_profiler.cpp:5
void start()
Start timing a function call.
Definition function_profiler.cpp:7