X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=common%2Ftrace_profiler.cpp;h=6fc00395cd1d3de808d8ae999f05f9540f10a86a;hb=6d92327e88d2bb4c03a1b84663e50497f99fc24f;hp=fd684ede7bf16d623b7b54b9f80e67477aaf8bc8;hpb=f91056b5782d48d526f19dacd5a988003fc6f11e;p=apitrace diff --git a/common/trace_profiler.cpp b/common/trace_profiler.cpp index fd684ed..6fc0039 100644 --- a/common/trace_profiler.cpp +++ b/common/trace_profiler.cpp @@ -28,7 +28,12 @@ namespace trace { Profiler::Profiler() - : baseTime(0) + : lastProgram(0), + baseGpuTime(0), + baseCpuTime(0), + cpuTimes(false), + gpuTimes(true), + pixelsDrawn(false) { } @@ -36,41 +41,115 @@ Profiler::~Profiler() { } -void Profiler::addCall(unsigned no, const char *name, uint64_t gpu_start, uint64_t gpu_duration) +void Profiler::setup(bool cpuTimes_, bool gpuTimes_, bool pixelsDrawn_) { - if (baseTime == 0) - baseTime = gpu_start; - - std::cout << "call " - << no << " " - << (gpu_start - baseTime) << " " - << gpu_duration << " " - << name << std::endl; + cpuTimes = cpuTimes_; + gpuTimes = gpuTimes_; + pixelsDrawn = pixelsDrawn_; + + std::cout << "# frame begin " << std::endl; + std::cout << "# frame end " << std::endl; + std::cout << "# call " << std::endl; + std::cout << "# use shader program " << std::endl; } -void Profiler::addFrameStart(unsigned no, uint64_t timestamp) +void Profiler::addCall(unsigned no, + const char *name, + unsigned program, + uint64_t pixels, + uint64_t gpuStart, uint64_t gpuDuration, + uint64_t cpuStart, uint64_t cpuDuration) { - if (baseTime == 0) - baseTime = timestamp; + if (baseGpuTime == 0) + baseGpuTime = gpuStart; + + if (baseCpuTime == 0) + baseCpuTime = cpuStart; + + if (program != lastProgram) { + std::cout << "use shader program " << program << std::endl; + lastProgram = program; + } + + std::cout << "call " << no; + + if (gpuTimes) { + std::cout << " " + << (gpuStart - baseGpuTime) << " " + << gpuDuration; + } else { + std::cout << " _ _"; + } + + if (cpuTimes) { + std::cout << " " + << (cpuStart - baseCpuTime) << " " + << cpuDuration; + } else { + std::cout << " _ _"; + } + + if (pixelsDrawn) { + std::cout << " " << pixels; + } else { + std::cout << " _"; + } + + std::cout << " " << name << std::endl; +} + +void Profiler::addFrameStart(unsigned no, uint64_t gpuStart, uint64_t cpuStart) +{ + if (baseGpuTime == 0) + baseGpuTime = gpuStart; + + if (baseCpuTime == 0) + baseCpuTime = cpuStart; lastFrame.no = no; - lastFrame.start = timestamp - baseTime; + lastFrame.gpuStart = gpuStart - baseGpuTime; + + std::cout << "frame begin " << lastFrame.no; + + if (gpuTimes) { + std::cout << " " << lastFrame.gpuStart; + } else { + std::cout << " _"; + } + + if (gpuTimes) { + std::cout << " " << lastFrame.cpuStart; + } else { + std::cout << " _"; + } - std::cout << "frame begin " - << lastFrame.no << " " - << lastFrame.start << std::endl; + std::cout << std::endl; } -void Profiler::addFrameEnd(uint64_t timestamp) +void Profiler::addFrameEnd(uint64_t gpuEnd, uint64_t cpuEnd) { - if (baseTime == 0) - baseTime = timestamp; + if (baseGpuTime == 0) + baseGpuTime = gpuEnd; + + if (baseCpuTime == 0) + baseCpuTime = cpuEnd; + + lastFrame.gpuEnd = gpuEnd - baseGpuTime; + + std::cout << "frame end " << lastFrame.no; + + if (gpuTimes) { + std::cout << " " << lastFrame.gpuEnd << " " << (lastFrame.gpuEnd - lastFrame.gpuStart); + } else { + std::cout << " _ _"; + } - lastFrame.end = timestamp - baseTime; + if (cpuTimes) { + std::cout << " " << lastFrame.cpuEnd << " " << (lastFrame.cpuEnd - lastFrame.cpuStart); + } else { + std::cout << " _ _"; + } - std::cout << "frame end " - << lastFrame.no << " " - << lastFrame.end << " " - << (lastFrame.end - lastFrame.start) << std::endl; + std::cout << std::endl; } }