blob: 11d4d01635c8fb6566b6e8c9a2d8fd22ce82730d [file] [log] [blame]
#ifndef ANDROID_DVR_GRAPHICS_TIMER_QUERY_H_
#define ANDROID_DVR_GRAPHICS_TIMER_QUERY_H_
#include <GLES3/gl3.h>
namespace android {
namespace dvr {
// Class used to asynchronously query time between draw calls on gpu.
class TimerQuery {
public:
TimerQuery();
~TimerQuery();
// Marks the start of the timer on gpu.
void Begin();
// Marks the end of the timer on gpu.
void End();
// Gets the time that has passed from call to Begin to End.
// Should be called only after the frame has been presented (after the call to
// swapbuffers).
double GetTimeInMS();
private:
// Generates OpenGL query object.
void Init();
// Deletes OpenGL query object.
void Delete();
GLuint query_ = 0;
friend class SyncTimerQuery;
};
// Simplification of TimerQuery that allows to synchronously query time used
// for draw calls on gpu by doing glFlush and stalling cpu.
class SyncTimerQuery {
public:
SyncTimerQuery();
double FlushAndGetTimeInMS(); // Note: This WILL cause a glFlush()
private:
TimerQuery timer_;
};
} // namespace dvr
} // namespace android
#endif // ANDROID_DVR_GRAPHICS_TIMER_QUERY_H_