#include <string.h>
#include <assert.h>
#include <sstream>
+#include "os_time.hpp"
namespace trace {
Profiler::Profiler()
std::cout << "# call no gpu_start gpu_dura cpu_start cpu_dura pixels program name" << std::endl;
}
+void Profiler::setBaseTimes(int64_t gpuStart, int64_t cpuStart)
+{
+ baseCpuTime = cpuStart;
+ baseGpuTime = gpuStart;
+}
+
+bool Profiler::hasBaseTimes()
+{
+ return baseCpuTime != 0 || baseGpuTime != 0;
+}
+
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)
+ int64_t pixels,
+ int64_t gpuStart, int64_t gpuDuration,
+ int64_t cpuStart, int64_t cpuDuration)
{
- if (baseGpuTime == 0) {
- baseGpuTime = gpuStart;
- }
-
- if (baseCpuTime == 0) {
- baseCpuTime = cpuStart;
- }
-
- if (gpuTimes) {
+ if (gpuTimes && gpuStart) {
gpuStart -= baseGpuTime;
} else {
gpuStart = 0;
gpuDuration = 0;
}
- if (cpuTimes) {
- cpuStart -= baseCpuTime;
+ if (cpuTimes && cpuStart) {
+ double cpuTimeScale = 1.0E9 / os::timeFrequency;
+ cpuStart = (cpuStart - baseCpuTime) * cpuTimeScale;
+ cpuDuration = cpuDuration * cpuTimeScale;
} else {
cpuStart = 0;
cpuDuration = 0;
<< std::endl;
}
-void Profiler::addFrameStart(unsigned no, uint64_t gpuStart, uint64_t cpuStart)
+void Profiler::addFrameStart(unsigned no, int64_t gpuStart, int64_t cpuStart)
{
- if (baseGpuTime == 0) {
- baseGpuTime = gpuStart;
- }
-
- if (baseCpuTime == 0) {
- baseCpuTime = cpuStart;
- }
+ lastFrame.no = no;
+ lastFrame.gpuStart = gpuStart;
+ lastFrame.cpuStart = cpuStart;
if (gpuTimes) {
- lastFrame.gpuStart = gpuStart - baseGpuTime;
+ gpuStart = gpuStart - baseGpuTime;
} else {
- lastFrame.gpuStart = 0;
+ gpuStart = 0;
}
if (cpuTimes) {
- lastFrame.cpuStart = cpuStart - baseCpuTime;
+ double cpuTimeScale = 1.0E9 / os::timeFrequency;
+ cpuStart = (cpuStart - baseCpuTime) * cpuTimeScale;
} else {
- lastFrame.cpuStart = 0;
+ cpuStart = 0;
}
- lastFrame.no = no;
-
std::cout << "frame_begin"
- << " " << lastFrame.no
- << " " << lastFrame.gpuStart
- << " " << lastFrame.cpuStart
+ << " " << no
+ << " " << gpuStart
+ << " " << cpuStart
<< std::endl;
}
-void Profiler::addFrameEnd(uint64_t gpuEnd, uint64_t cpuEnd)
+void Profiler::addFrameEnd(int64_t gpuEnd, int64_t cpuEnd)
{
- uint64_t gpuDuration, cpuDuration;
+ int64_t gpuDuration, cpuDuration;
if (gpuTimes) {
- gpuEnd -= baseGpuTime;
gpuDuration = gpuEnd - lastFrame.gpuStart;
+ gpuEnd = gpuEnd - baseGpuTime;
} else {
gpuEnd = 0;
gpuDuration = 0;
}
if (cpuTimes) {
- cpuEnd -= baseCpuTime;
- cpuDuration = cpuEnd - lastFrame.cpuStart;
+ double cpuTimeScale = 1.0E9 / os::timeFrequency;
+ cpuDuration = (cpuEnd - lastFrame.cpuStart) * cpuTimeScale;
+ cpuEnd = (cpuEnd - baseCpuTime) * cpuTimeScale;
} else {
cpuEnd = 0;
cpuDuration = 0;
>> call.program
>> call.name;
- profile->frames.back().calls.push_back(call);
+ if (call.pixels >= 0) {
+ profile->frames.back().calls.push_back(call);
+ }
} else if (type.compare("frame_begin") == 0) {
Profile::Frame frame;
frame.gpuDuration = 0;