]> git.cworth.org Git - apitrace/blobdiff - common/trace_profiler.hpp
os: Use CLOCK_MONOTONIC
[apitrace] / common / trace_profiler.hpp
index da60d72e532d210ada7a75bbf318a6aa8bebcf6a..d8332420c63fc6ce622fd300315d275a85ba0db2 100644 (file)
 #define TRACE_PROFILER_H
 
 #include <string>
+#include <vector>
 #include <stdint.h>
 
 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<unsigned> calls;
+    };
+
+    std::vector<Call> calls;
+    std::vector<Frame> frames;
+    std::vector<Program> programs;
+};
+
 class Profiler
 {
 public:
@@ -39,32 +90,33 @@ public:
 
     void setup(bool cpuTimes_, bool gpuTimes_, bool pixelsDrawn_);
 
-    void addFrameStart(unsigned no, uint64_t gpuStart, uint64_t cpuStart);
-    void addFrameEnd(uint64_t gpuEnd, uint64_t cpuEnd);
-
     void 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);
+
+    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:
-    unsigned lastProgram;
-    uint64_t baseGpuTime;
-    uint64_t baseCpuTime;
+    int64_t baseGpuTime;
+    int64_t baseCpuTime;
+    int64_t minCpuTime;
 
     bool cpuTimes;
     bool gpuTimes;
     bool pixelsDrawn;
-
-    struct {
-        unsigned no;
-        uint64_t gpuStart;
-        uint64_t gpuEnd;
-        uint64_t cpuStart;
-        uint64_t cpuEnd;
-    } lastFrame;
 };
 }