]> git.cworth.org Git - apitrace/blobdiff - common/trace_profiler.hpp
Synchronise gpuStart and cpuStart for profiling.
[apitrace] / common / trace_profiler.hpp
index da60d72e532d210ada7a75bbf318a6aa8bebcf6a..78783f5a57653d33a0d0fe99a7fa4aef1b98887d 100644 (file)
 #define TRACE_PROFILER_H
 
 #include <string>
+#include <vector>
 #include <stdint.h>
 
 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<Call>::iterator iterator;
+        typedef std::vector<Call>::const_iterator const_iterator;
+    };
+
+    struct Frame {
+        unsigned no;
+        int64_t gpuStart;
+        int64_t gpuDuration;
+        int64_t cpuStart;
+        int64_t cpuDuration;
+
+        std::vector<Call> calls;
+
+        typedef std::vector<Frame>::iterator iterator;
+        typedef std::vector<Frame>::const_iterator const_iterator;
+    };
+
+    std::vector<Frame> 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;
 };
 }