X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fdebug%2Fprofiler.h;h=7a82c5631899699cb42d04773bbf6e4c9ec5b4e9;hp=5ec8f3f1fcafa5dae8ebe4508a5b02abaeb7e1f3;hb=df062ebec635daeb68e6f8ce46f8aa7c0b913164;hpb=27efc167cb10ee03c1d2a6711dd149d1093179c8 diff --git a/source/debug/profiler.h b/source/debug/profiler.h index 5ec8f3f..7a82c56 100644 --- a/source/debug/profiler.h +++ b/source/debug/profiler.h @@ -5,6 +5,7 @@ #include #include #include +#include namespace Msp { namespace Debug { @@ -17,7 +18,8 @@ external profilers, but allows profiling of custom scopes and retrieving the 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. @@ -25,14 +27,23 @@ 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 history; + float calls_per_sec; + std::vector history; unsigned hist_pos; + bool hist_full; std::map called_from; ScopeInfo(); @@ -46,32 +57,24 @@ private: 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; };