Index: gpu/command_buffer/tests/gl_manager.cc |
diff --git a/gpu/command_buffer/tests/gl_manager.cc b/gpu/command_buffer/tests/gl_manager.cc |
index b12fcadcf90b6145f03e5d76ff1af2289125cd72..9f01173e18b9608551014d77d7aa3d001a796fdd 100644 |
--- a/gpu/command_buffer/tests/gl_manager.cc |
+++ b/gpu/command_buffer/tests/gl_manager.cc |
@@ -29,6 +29,7 @@ |
#include "gpu/command_buffer/service/command_buffer_service.h" |
#include "gpu/command_buffer/service/command_executor.h" |
#include "gpu/command_buffer/service/context_group.h" |
+#include "gpu/command_buffer/service/fence_manager.h" |
#include "gpu/command_buffer/service/gl_context_virtual.h" |
#include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
#include "gpu/command_buffer/service/image_manager.h" |
@@ -39,8 +40,11 @@ |
#include "gpu/command_buffer/service/transfer_buffer_manager.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "ui/gfx/buffer_format_util.h" |
+#include "ui/gfx/gpu_fence.h" |
#include "ui/gfx/gpu_memory_buffer.h" |
+#include "ui/gfx/shared_event.h" |
#include "ui/gl/gl_context.h" |
+#include "ui/gl/gl_fence_shared_event.h" |
#include "ui/gl/gl_image_ref_counted_memory.h" |
#include "ui/gl/gl_share_group.h" |
#include "ui/gl/gl_surface.h" |
@@ -169,6 +173,36 @@ class IOSurfaceGpuMemoryBuffer : public gfx::GpuMemoryBuffer { |
}; |
#endif // defined(OS_MACOSX) |
+class GpuFenceImpl : public gfx::GpuFence { |
+ public: |
+ GpuFenceImpl() {} |
+ explicit GpuFenceImpl(const gfx::GpuFenceHandle& handle) |
+ : shared_event_(handle.shared_event_handle) {} |
+ ~GpuFenceImpl() override {} |
+ |
+ static GpuFenceImpl* FromClientFence(ClientFence fence) { |
+ return reinterpret_cast<GpuFenceImpl*>(fence); |
+ } |
+ |
+ // Overridden from gfx::GpuFence: |
+ bool IsSignaled() override { return shared_event_.IsSignaled(); } |
+ bool Wait(const base::TimeDelta& max_time) override { |
+ return shared_event_.Wait(max_time); |
+ } |
+ void Reset() override { shared_event_.Reset(); } |
+ gfx::GpuFenceHandle GetHandle() const override { |
+ gfx::GpuFenceHandle handle; |
+ handle.shared_event_handle = shared_event_.GetHandle(); |
+ return handle; |
+ } |
+ ClientFence AsClientFence() override { |
+ return reinterpret_cast<ClientFence>(this); |
+ } |
+ |
+ private: |
+ gfx::SharedEvent shared_event_; |
+}; |
+ |
} // namespace |
int GLManager::use_count_; |
@@ -236,6 +270,10 @@ std::unique_ptr<gfx::GpuMemoryBuffer> GLManager::CreateGpuMemoryBuffer( |
new GpuMemoryBufferImpl(bytes.get(), size, format)); |
} |
+std::unique_ptr<gfx::GpuFence> GLManager::CreateGpuFence() { |
+ return base::WrapUnique<gfx::GpuFence>(new GpuFenceImpl); |
+} |
+ |
void GLManager::Initialize(const GLManager::Options& options) { |
InitializeWithCommandLine(options, *base::CommandLine::ForCurrentProcess()); |
} |
@@ -641,4 +679,25 @@ bool GLManager::CanWaitUnverifiedSyncToken(const gpu::SyncToken* sync_token) { |
return false; |
} |
+int32_t GLManager::CreateFence(ClientFence fence) { |
+ GpuFenceImpl* gpu_fence = GpuFenceImpl::FromClientFence(fence); |
+ |
+ gfx::GpuFenceHandle handle = gpu_fence->GetHandle(); |
+ std::unique_ptr<gl::GLFenceSharedEvent> gl_fence(new gl::GLFenceSharedEvent( |
+ gfx::SharedEvent::DuplicateHandle(handle.shared_event_handle))); |
+ |
+ static int32_t next_id = 1; |
+ int32_t new_id = next_id++; |
+ gpu::gles2::FenceManager* fence_manager = decoder_->GetFenceManager(); |
+ DCHECK(fence_manager); |
+ fence_manager->AddFence(std::move(gl_fence), new_id); |
+ return new_id; |
+} |
+ |
+void GLManager::DestroyFence(int32_t id) { |
+ gpu::gles2::FenceManager* fence_manager = decoder_->GetFenceManager(); |
+ DCHECK(fence_manager); |
+ fence_manager->RemoveFence(id); |
+} |
+ |
} // namespace gpu |