| 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
|
|
|