X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=common%2Ftrace_profiler.hpp;h=78783f5a57653d33a0d0fe99a7fa4aef1b98887d;hb=00fa77c21097e9ef28c5091ec9b05691523aa36c;hp=da60d72e532d210ada7a75bbf318a6aa8bebcf6a;hpb=6d92327e88d2bb4c03a1b84663e50497f99fc24f;p=apitrace diff --git a/common/trace_profiler.hpp b/common/trace_profiler.hpp index da60d72..78783f5 100644 --- a/common/trace_profiler.hpp +++ b/common/trace_profiler.hpp @@ -27,10 +27,43 @@ #define TRACE_PROFILER_H #include +#include #include namespace trace { + +struct Profile { + struct Call { + unsigned no; + int64_t gpuStart; + int64_t gpuDuration; + int64_t cpuStart; + int64_t cpuDuration; + int64_t pixels; + unsigned program; + std::string name; + + typedef std::vector::iterator iterator; + typedef std::vector::const_iterator const_iterator; + }; + + struct Frame { + unsigned no; + int64_t gpuStart; + int64_t gpuDuration; + int64_t cpuStart; + int64_t cpuDuration; + + std::vector calls; + + typedef std::vector::iterator iterator; + typedef std::vector::const_iterator const_iterator; + }; + + std::vector frames; +}; + class Profiler { public: @@ -38,6 +71,7 @@ public: ~Profiler(); void setup(bool cpuTimes_, bool gpuTimes_, bool pixelsDrawn_); + void setBaseTimes(uint64_t gpuStart, uint64_t cpuStart); void addFrameStart(unsigned no, uint64_t gpuStart, uint64_t cpuStart); void addFrameEnd(uint64_t gpuEnd, uint64_t cpuEnd); @@ -49,8 +83,9 @@ public: uint64_t gpuStart, uint64_t gpuDuration, uint64_t cpuStart, uint64_t cpuDuration); + static void parseLine(const char* line, Profile* profile); + private: - unsigned lastProgram; uint64_t baseGpuTime; uint64_t baseCpuTime; @@ -61,9 +96,7 @@ private: struct { unsigned no; uint64_t gpuStart; - uint64_t gpuEnd; uint64_t cpuStart; - uint64_t cpuEnd; } lastFrame; }; }