#include <map>
#include <string>
#include <vector>
+#include <msp/core/noncopyable.h>
#include <msp/time/timedelta.h>
#include <msp/time/timestamp.h>
Note: This is not thread-safe. To profile multiple threads, create a separate
Profiler for each thread.
*/
-class Profiler
+class Profiler: private NonCopyable
{
public:
struct CallInfo
struct ScopeInfo
{
Time::TimeStamp first_call;
- unsigned calls;
+ unsigned calls = 0;
Time::TimeDelta total_time;
Time::TimeDelta self_time;
Time::TimeDelta avg_time;
- float calls_per_sec;
+ float calls_per_sec = 0;
std::vector<CallInfo> history;
- unsigned hist_pos;
- bool hist_full;
+ unsigned hist_pos = 0;
+ bool hist_full = false;
std::map<std::string, unsigned> called_from;
-
- ScopeInfo();
};
private:
- unsigned period;
+ unsigned period = 0;
std::map<std::string, ScopeInfo> scopes;
- ProfilingScope *inner;
+ ProfilingScope *inner = 0;
public:
- Profiler();
-
/** Sets the averaging period for timing data, measured in calls. Previous
average timings are cleared. */
void set_period(unsigned p);