]> git.cworth.org Git - apitrace/blobdiff - common/trace_profiler.hpp
Use skiplist-based FastCallSet within trace::CallSet
[apitrace] / common / trace_profiler.hpp
index 19a874f9b4fb4199c538d11aff68a161f84f12f3..e3ae016be7fa654b99e497e64fdc3c7ef914cfb8 100644 (file)
@@ -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
 #define TRACE_PROFILER_H
 
 #include <string>
+#include <vector>
 #include <stdint.h>
 
 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<unsigned> calls;
     };
 
+    std::vector<Call> calls;
+    std::vector<Frame> frames;
+    std::vector<Program> 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;
 };
 }