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

Unified Diff: services/ui/public/cpp/mojo_gpu_memory_buffer_manager.cc

Issue 2448983003: gpu: Refactor memory buffer handling code out of content.
Patch Set: . 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: services/ui/public/cpp/mojo_gpu_memory_buffer_manager.cc
diff --git a/services/ui/public/cpp/mojo_gpu_memory_buffer_manager.cc b/services/ui/public/cpp/mojo_gpu_memory_buffer_manager.cc
index 342670b1f499efa0be663afe2770642a8451ec4b..e8c93e576e00aa8112888e97a8c671cadc53e9be 100644
--- a/services/ui/public/cpp/mojo_gpu_memory_buffer_manager.cc
+++ b/services/ui/public/cpp/mojo_gpu_memory_buffer_manager.cc
@@ -5,11 +5,30 @@
#include "services/ui/public/cpp/mojo_gpu_memory_buffer_manager.h"
#include "base/logging.h"
+#include "base/synchronization/waitable_event.h"
+#include "gpu/ipc/client/gpu_memory_buffer_impl.h"
+#include "mojo/public/cpp/bindings/sync_call_restrictions.h"
+#include "services/service_manager/public/cpp/connector.h"
+#include "services/ui/common/generic_shared_memory_id_generator.h"
#include "services/ui/public/cpp/mojo_gpu_memory_buffer.h"
namespace ui {
-MojoGpuMemoryBufferManager::MojoGpuMemoryBufferManager() {}
+namespace {
+
+#if 1 // !defined(OS_WIN)
+void DeletedGpuMemoryBuffer(gfx::GpuMemoryBufferId id,
+ const gpu::SyncToken& sync_token) {
+ NOTIMPLEMENTED();
+}
+#endif // !defined(OS_WIN)
+
+} // namespace
+
+MojoGpuMemoryBufferManager::MojoGpuMemoryBufferManager(
+ mojom::GpuService* gpu_service)
+ : main_task_runner_(base::ThreadTaskRunnerHandle::Get()),
+ gpu_service_(gpu_service) {}
MojoGpuMemoryBufferManager::~MojoGpuMemoryBufferManager() {}
@@ -19,7 +38,48 @@ MojoGpuMemoryBufferManager::AllocateGpuMemoryBuffer(
gfx::BufferFormat format,
gfx::BufferUsage usage,
gpu::SurfaceHandle surface_handle) {
+#if defined(OS_WIN)
+ // TODO(sad): Because the host needs a valid base::ProcessHandle to this
+ // client.
+ return MojoGpuMemoryBufferImpl::Create(size, format, usage);
+#else
+#if 1
+ DCHECK(!main_task_runner_->BelongsToCurrentThread());
+ base::WaitableEvent event(base::WaitableEvent::ResetPolicy::AUTOMATIC,
+ base::WaitableEvent::InitialState::NOT_SIGNALED);
+ gfx::GpuMemoryBufferHandle handle;
+ gfx::GpuMemoryBufferId id = GetNextGenericSharedMemoryId();
+ main_task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(&MojoGpuMemoryBufferManager::AllocateGpuMemoryBufferOnMain,
+ base::Unretained(this), id, size, format, usage, &handle,
+ &event));
+ event.Wait();
+ std::unique_ptr<gpu::GpuMemoryBufferImpl> buffer =
+ handle.is_null() ? nullptr
+ : gpu::GpuMemoryBufferImpl::CreateFromHandle(
+ handle, size, format, usage,
+ base::Bind(&DeletedGpuMemoryBuffer, handle.id));
+ if (buffer)
+ return buffer;
+// XXX: This needs to happen in the main thread.
+// gpu_service_->DestroyGpuMemoryBuffer(id, gpu::SyncToken());
+#endif
return MojoGpuMemoryBufferImpl::Create(size, format, usage);
+#endif
+}
+
+void MojoGpuMemoryBufferManager::AllocateGpuMemoryBufferOnMain(
+ gfx::GpuMemoryBufferId id,
+ const gfx::Size& size,
+ gfx::BufferFormat format,
+ gfx::BufferUsage usage,
+ gfx::GpuMemoryBufferHandle* handle,
+ base::WaitableEvent* event) {
+ EnsureGpuServiceConnection();
+ mojo::SyncCallRestrictions::ScopedAllowSyncCall allow_sync_call;
+ gpu_service_->CreateGpuMemoryBuffer(id, size, format, usage, handle);
+ event->Signal();
}
std::unique_ptr<gfx::GpuMemoryBuffer>
@@ -43,4 +103,13 @@ void MojoGpuMemoryBufferManager::SetDestructionSyncToken(
NOTIMPLEMENTED();
}
+void MojoGpuMemoryBufferManager::EnsureGpuServiceConnection() {
+#if 0
+ CHECK(base::ThreadTaskRunnerHandle::Get());
+ if (gpu_service_ && !gpu_service_.encountered_error())
+ return;
+ connector_->ConnectToInterface("service:ui", &gpu_service_);
+#endif
+}
+
} // namespace ui
« no previous file with comments | « services/ui/public/cpp/mojo_gpu_memory_buffer_manager.h ('k') | services/ui/public/interfaces/gpu_service.mojom » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698