12 #ifndef hifi_gpu_Query_h
13 #define hifi_gpu_Query_h
20 #include <SimpleMovingAverage.h>
30 using Handler = std::function<void(
const Query&)>;
32 Query(
const Handler& returnHandler,
const std::string& name =
"gpu::query");
35 double getGPUElapsedTime()
const;
36 double getBatchElapsedTime()
const;
38 const std::string& getName()
const {
return _name; }
41 const GPUObjectPointer gpuObject {};
42 void triggerReturnHandler(uint64_t queryResult, uint64_t batchElapsedTime);
44 Handler _returnHandler;
46 const std::string _name;
47 uint64_t _queryResult { 0 };
48 uint64_t _usecBatchElapsedTime { 0 };
50 friend class Serializer;
51 friend class Deserializer;
54 typedef std::shared_ptr<Query> QueryPointer;
55 typedef std::vector< QueryPointer > Queries;
63 RangeTimer(
const std::string& name);
64 void begin(gpu::Batch& batch);
65 void end(gpu::Batch& batch);
67 double getGPUAverage()
const;
68 double getBatchAverage()
const;
70 const std::string& name()
const {
return _name; }
74 static const int QUERY_QUEUE_SIZE { 4 };
76 const std::string _name;
77 gpu::Queries _timerQueries;
81 MovingAverage<double, QUERY_QUEUE_SIZE * 2> _movingAverageGPU;
82 MovingAverage<double, QUERY_QUEUE_SIZE * 2> _movingAverageBatch;
84 int rangeIndex(
int index)
const {
return (index % QUERY_QUEUE_SIZE); }
87 using RangeTimerPointer = std::shared_ptr<RangeTimer>;