X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=common%2Ftrace_profiler.hpp;h=d8332420c63fc6ce622fd300315d275a85ba0db2;hb=e7cb2b98575d5ff3801bd3527a648e0dbfdebdad;hp=ff07c957d6c48d042e7b3d56ddb3ef9368664844;hpb=9840c201de08419f5d940642974438917a44d849;p=apitrace diff --git a/common/trace_profiler.hpp b/common/trace_profiler.hpp index ff07c95..d833242 100644 --- a/common/trace_profiler.hpp +++ b/common/trace_profiler.hpp @@ -27,29 +27,96 @@ #define TRACE_PROFILER_H #include +#include #include namespace trace { + +struct Profile { + struct Call { + unsigned no; + + unsigned program; + + int64_t gpuStart; + int64_t gpuDuration; + + int64_t cpuStart; + int64_t cpuDuration; + + int64_t pixels; + + std::string name; + }; + + struct Frame { + unsigned no; + + int64_t gpuStart; + int64_t gpuDuration; + + int64_t cpuStart; + int64_t cpuDuration; + + /* Indices to profile->calls array */ + struct { + unsigned begin; + unsigned end; + } calls; + }; + + struct Program { + Program() : gpuTotal(0), cpuTotal(0), pixelTotal(0) {} + + uint64_t gpuTotal; + uint64_t cpuTotal; + uint64_t pixelTotal; + + /* Indices to profile->calls array */ + std::vector calls; + }; + + std::vector calls; + std::vector frames; + std::vector programs; +}; + class Profiler { public: Profiler(); ~Profiler(); - void addCall(unsigned no, const char* name, uint64_t gpu_start, uint64_t gpu_duration, uint64_t samples_passed); + void setup(bool cpuTimes_, bool gpuTimes_, bool pixelsDrawn_); - void addFrameStart(unsigned no, uint64_t timestamp); - void addFrameEnd(uint64_t timestamp); + void addCall(unsigned no, + const char* name, + unsigned program, + int64_t pixels, + int64_t gpuStart, int64_t gpuDuration, + int64_t cpuStart, int64_t cpuDuration); + + void addFrameEnd(); + + bool hasBaseTimes(); + + void setBaseCpuTime(int64_t cpuStart); + void setBaseGpuTime(int64_t gpuStart); + + int64_t getBaseCpuTime(); + int64_t getBaseGpuTime(); + + static void parseLine(const char* line, Profile* profile); private: - uint64_t baseTime; + int64_t baseGpuTime; + int64_t baseCpuTime; + int64_t minCpuTime; - struct { - unsigned no; - uint64_t start; - uint64_t end; - } lastFrame; + bool cpuTimes; + bool gpuTimes; + bool pixelsDrawn; }; }