Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2102)

Unified Diff: gpu/command_buffer/tests/gl_manager.cc

Issue 2383753002: gpu: Add GpuFence framework.
Patch Set: rebase Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698