#include <string>
#include <vector>
#include <msp/time/timedelta.h>
+#include <msp/time/timestamp.h>
namespace Msp {
namespace Debug {
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();
*/
ProfilingScope *enter(ProfilingScope *ps);
- /**
- Records a call to a scope. You'll probably want to use a ProfilingScope
- instead of calling this manually.
-
- @param sn Scope name
- @param pn Parent scope name
- @param t Time spent in the scope
- @param ct Time spent in child scopes
- */
- void record(const std::string &sn, const std::string &pn, const Time::TimeDelta &t, const Time::TimeDelta &ct);
+ /** Records the data from a ProfilingScope. It is not useful to call this
+ manually. */
+ void record(const ProfilingScope &);
/**
Returns informations about a scope.
*/
- const ScopeInfo &scope(const std::string &) const;
+ const ScopeInfo &get_scope(const std::string &) const;
};
} // namespace Debug