11 #ifndef hifi_gpu_Query_h
12 #define hifi_gpu_Query_h
19 #include <SimpleMovingAverage.h>
29 using Handler = std::function<void(
const Query&)>;
31 Query(
const Handler& returnHandler,
const std::string& name =
"gpu::query");
34 double getGPUElapsedTime()
const;
35 double getBatchElapsedTime()
const;
37 const std::string& getName()
const {
return _name; }
40 const GPUObjectPointer gpuObject {};
41 void triggerReturnHandler(uint64_t queryResult, uint64_t batchElapsedTime);
43 Handler _returnHandler;
45 const std::string _name;
46 uint64_t _queryResult { 0 };
47 uint64_t _usecBatchElapsedTime { 0 };
49 friend class Serializer;
50 friend class Deserializer;
53 typedef std::shared_ptr<Query> QueryPointer;
54 typedef std::vector< QueryPointer > Queries;
62 RangeTimer(
const std::string& name);
63 void begin(gpu::Batch& batch);
64 void end(gpu::Batch& batch);
66 double getGPUAverage()
const;
67 double getBatchAverage()
const;
71 static const int QUERY_QUEUE_SIZE { 4 };
73 const std::string _name;
74 gpu::Queries _timerQueries;
78 MovingAverage<double, QUERY_QUEUE_SIZE * 2> _movingAverageGPU;
79 MovingAverage<double, QUERY_QUEUE_SIZE * 2> _movingAverageBatch;
81 int rangeIndex(
int index)
const {
return (index % QUERY_QUEUE_SIZE); }
84 using RangeTimerPointer = std::shared_ptr<RangeTimer>;