X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=common%2Ftrace_profiler.hpp;h=e3ae016be7fa654b99e497e64fdc3c7ef914cfb8;hb=HEAD;hp=19a874f9b4fb4199c538d11aff68a161f84f12f3;hpb=addf7f90727a50040d79e6da6d59ffb031074674;p=apitrace diff --git a/common/trace_profiler.hpp b/common/trace_profiler.hpp index 19a874f..e3ae016 100644 --- a/common/trace_profiler.hpp +++ b/common/trace_profiler.hpp @@ -1,6 +1,7 @@ /************************************************************************** * * Copyright 2012 VMware, Inc. + * Copyright 2013 Intel, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy @@ -27,72 +28,117 @@ #define TRACE_PROFILER_H #include +#include #include namespace trace { -class Profiler -{ -public: - struct GpuTime - { - GpuTime() - : start(0), duration(0) - { - } - - GpuTime(uint64_t start_, uint64_t duration_) - : start(start_), duration(duration_) - { - } - - uint64_t start; - uint64_t duration; - }; - struct Call - { - Call() - : no(0) - { - } +struct Profile { + struct Call { + unsigned no; - Call(unsigned no_, const char* name_, uint64_t gpu_start, uint64_t gpu_duration) - : no(no_), name(name_), gpu(gpu_start, gpu_duration) - { - } + unsigned program; + + int64_t gpuStart; + int64_t gpuDuration; + + int64_t cpuStart; + int64_t cpuDuration; + + int64_t vsizeStart; + int64_t vsizeDuration; + int64_t rssStart; + int64_t rssDuration; + + int64_t pixels; - unsigned no; std::string name; + }; + + struct Frame { + unsigned no; + + int64_t gpuStart; + int64_t gpuDuration; - GpuTime gpu; + int64_t cpuStart; + int64_t cpuDuration; + + int64_t vsizeStart; + int64_t vsizeDuration; + int64_t rssStart; + int64_t rssDuration; + + /* Indices to profile->calls array */ + struct { + unsigned begin; + unsigned end; + } calls; }; - struct Frame - { - Frame() - : no(0) - { - } + struct Program { + Program() : gpuTotal(0), cpuTotal(0), pixelTotal(0) {} - Frame(unsigned no_, uint64_t gpu_start, uint64_t gpu_duration) - : no(no_), gpu(gpu_start, gpu_duration) - { - } + uint64_t gpuTotal; + uint64_t cpuTotal; + uint64_t pixelTotal; + int64_t vsizeTotal; + int64_t rssTotal; - unsigned no; - GpuTime gpu; + /* Indices to profile->calls array */ + std::vector calls; }; + std::vector calls; + std::vector frames; + std::vector programs; +}; + +class Profiler +{ public: Profiler(); ~Profiler(); - void addCall(const Call& call); - void addFrame(const Frame& frame); + void setup(bool cpuTimes_, bool gpuTimes_, bool pixelsDrawn_, bool memoryUsage_); + + void addCall(unsigned no, + const char* name, + unsigned program, + int64_t pixels, + int64_t gpuStart, int64_t gpuDuration, + int64_t cpuStart, int64_t cpuDuration, + int64_t vsizeStart, int64_t vsizeDuration, + int64_t rssStart, int64_t rssDuration); + + void addFrameEnd(); + + bool hasBaseTimes(); + + void setBaseCpuTime(int64_t cpuStart); + void setBaseGpuTime(int64_t gpuStart); + void setBaseVsizeUsage(int64_t vsizeStart); + void setBaseRssUsage(int64_t rssStart); + + int64_t getBaseCpuTime(); + int64_t getBaseGpuTime(); + int64_t getBaseVsizeUsage(); + int64_t getBaseRssUsage(); + + static void parseLine(const char* line, Profile* profile); private: - uint64_t baseTime; + int64_t baseGpuTime; + int64_t baseCpuTime; + int64_t minCpuTime; + int64_t baseVsizeUsage; + int64_t baseRssUsage; + + bool cpuTimes; + bool gpuTimes; + bool pixelsDrawn; + bool memoryUsage; }; }