#include <string>
#include <vector>
#include <msp/time/timedelta.h>
+#include <msp/time/timestamp.h>
namespace Msp {
namespace Debug {
profiling data at run time. An example usage could be showing realtime
performance statistics of a game or a simulation.
-See also class ProfilingScope.
+Data can be recorded by creating a ProfilingScope object in the scope to be
+profiled.
Note: This is not thread-safe. To profile multiple threads, create a separate
Profiler for each thread.
class Profiler
{
public:
+ struct CallInfo
+ {
+ Msp::Time::TimeStamp entry_time;
+ Msp::Time::TimeDelta duration;
+ };
+
struct ScopeInfo
{
+ Time::TimeStamp first_call;
unsigned calls;
Time::TimeDelta total_time;
Time::TimeDelta self_time;
Time::TimeDelta avg_time;
- std::vector<Time::TimeDelta> history;
+ float calls_per_sec;
+ std::vector<CallInfo> history;
unsigned hist_pos;
+ bool hist_full;
std::map<std::string, unsigned> called_from;
ScopeInfo();
public:
Profiler();
- /**
- Sets the averaging period for timing data, measured in calls. Previous
- average timings are cleared.
- */
+ /** Sets the averaging period for timing data, measured in calls. Previous
+ average timings are cleared. */
void set_period(unsigned p);
- /**
- Adds a scope without recording any calls to it. Useful if you might need to
- access a scope before it has finished for the first time.
- */
+ /** Adds a scope without recording any calls to it. Useful if you might
+ need to access a scope before it has finished for the first time. */
void add_scope(const std::string &name);
- /**
- Changes the recorded innermost scope pointer and returns the old one. This
- is used by ProfilingScope to track child time and should not be called
- manually.
- */
+ /** Changes the recorded innermost scope pointer and returns the old one.
+ This is used by ProfilingScope to track child time and should not be called
+ manually. */
ProfilingScope *enter(ProfilingScope *ps);
/** Records the data from a ProfilingScope. It is not useful to call this
manually. */
void record(const ProfilingScope &);
- /**
- Returns informations about a scope.
- */
+ /** Returns informations about a scope. */
const ScopeInfo &get_scope(const std::string &) const;
};