#ifndef UI_GFX_GPU_FENCE_H_
#define UI_GFX_GPU_FENCE_H_
#include "build/build_config.h"
#include "ui/gfx/gfx_export.h"
#include "ui/gfx/gpu_fence_handle.h"
extern "C" typedef struct _ClientGpuFence* ClientGpuFence;
namespace base {
class TimeTicks;
}
namespace gfx {
class GFX_EXPORT GpuFence {
public:
explicit GpuFence(GpuFenceHandle handle);
GpuFence() = delete;
GpuFence(GpuFence&& other);
GpuFence& operator=(GpuFence&& other);
GpuFence(const GpuFence&) = delete;
GpuFence& operator=(const GpuFence&) = delete;
~GpuFence();
const GpuFenceHandle& GetGpuFenceHandle() const;
ClientGpuFence AsClientGpuFence();
static GpuFence* FromClientGpuFence(ClientGpuFence gpu_fence);
void Wait();
enum FenceStatus { kSignaled, kNotSignaled, kInvalid };
static FenceStatus GetStatusChangeTime(int fd, base::TimeTicks* time);
base::TimeTicks GetMaxTimestamp() const;
private:
gfx::GpuFenceHandle fence_handle_;
};
}
#endif