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

Unified Diff: services/ui/gpu/gpu_main.cc

Issue 2942283002: viz: Use a simple GpuMemoryBufferManager implementation. (Closed)
Patch Set: Created 3 years, 6 months 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
« no previous file with comments | « services/ui/gpu/gpu_main.h ('k') | services/ui/gpu/gpu_service.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: services/ui/gpu/gpu_main.cc
diff --git a/services/ui/gpu/gpu_main.cc b/services/ui/gpu/gpu_main.cc
index e590b355ac22ca6a93f94c3cd01a345626b7623f..62824bce4ae381a633d72e58e78579eff18f3f21 100644
--- a/services/ui/gpu/gpu_main.cc
+++ b/services/ui/gpu/gpu_main.cc
@@ -13,6 +13,7 @@
#include "components/viz/service/display_compositor/gpu_display_provider.h"
#include "components/viz/service/frame_sinks/mojo_frame_sink_manager.h"
#include "gpu/command_buffer/common/activity_flags.h"
+#include "gpu/ipc/client/gpu_memory_buffer_impl.h"
#include "gpu/ipc/common/gpu_memory_buffer_support.h"
#include "gpu/ipc/gpu_in_process_thread_service.h"
#include "gpu/ipc/service/gpu_memory_buffer_factory.h"
@@ -44,6 +45,57 @@ std::unique_ptr<base::MessagePump> CreateMessagePumpMac() {
}
#endif // defined(OS_MACOSX)
+class InProcessGpuMemoryBufferManager : public gpu::GpuMemoryBufferManager {
Fady Samuel 2017/06/16 22:33:17 Move this to a separate file please
+ public:
+ InProcessGpuMemoryBufferManager(gpu::GpuChannelManager* channel_manager,
+ gpu::GpuMemoryBufferFactory* memory_factory)
+ : client_id_(1),
+ channel_manager_(channel_manager),
+ memory_factory_(memory_factory),
+ weak_factory_(this) {
+ weak_ptr_ = weak_factory_.GetWeakPtr();
+ }
+
+ ~InProcessGpuMemoryBufferManager() override {}
+
+ private:
+ void DestroyGpuMemoryBuffer(gfx::GpuMemoryBufferId id,
+ int client_id,
+ const gpu::SyncToken& sync_token) {
+ channel_manager_->DestroyGpuMemoryBuffer(id, client_id, sync_token);
+ }
+
+ // gpu::GpuMemoryBufferManager:
+ std::unique_ptr<gfx::GpuMemoryBuffer> CreateGpuMemoryBuffer(
+ const gfx::Size& size,
+ gfx::BufferFormat format,
+ gfx::BufferUsage usage,
+ gpu::SurfaceHandle surface_handle) override {
+ gfx::GpuMemoryBufferId id(next_gpu_memory_id_++);
+ gfx::GpuMemoryBufferHandle buffer_handle =
+ memory_factory_->CreateGpuMemoryBuffer(id, size, format, usage,
+ client_id_, surface_handle);
+ return gpu::GpuMemoryBufferImpl::CreateFromHandle(
+ buffer_handle, size, format, usage,
+ base::Bind(&InProcessGpuMemoryBufferManager::DestroyGpuMemoryBuffer,
+ weak_ptr_, id, client_id_));
+ }
+
+ void SetDestructionSyncToken(gfx::GpuMemoryBuffer* buffer,
+ const gpu::SyncToken& sync_token) override {
+ static_cast<gpu::GpuMemoryBufferImpl*>(buffer)->set_destruction_sync_token(
+ sync_token);
+ }
+
+ const int client_id_;
+ int next_gpu_memory_id_ = 1;
+ gpu::GpuChannelManager* channel_manager_;
+ gpu::GpuMemoryBufferFactory* memory_factory_;
+ base::WeakPtr<InProcessGpuMemoryBufferManager> weak_ptr_;
+ base::WeakPtrFactory<InProcessGpuMemoryBufferManager> weak_factory_;
+ DISALLOW_COPY_AND_ASSIGN(InProcessGpuMemoryBufferManager);
+};
+
} // namespace
namespace ui {
@@ -175,35 +227,26 @@ void GpuMain::CreateFrameSinkManagerInternal(
gpu_service_->mailbox_manager(), gpu_service_->share_group());
gpu::ImageFactory* image_factory = gpu_service_->gpu_image_factory();
-
- // If the FrameSinkManager creation was delayed because GpuService had not
- // been created yet, then this is called, in gpu thread, right after
- // GpuService is created.
- mojom::GpuServicePtr gpu_service;
- BindGpuInternalOnGpuThread(mojo::MakeRequest(&gpu_service));
compositor_thread_task_runner_->PostTask(
FROM_HERE, base::Bind(&GpuMain::CreateFrameSinkManagerOnCompositorThread,
base::Unretained(this), image_factory,
- base::Passed(gpu_service.PassInterface()),
base::Passed(std::move(request)),
base::Passed(std::move(client_info))));
}
void GpuMain::CreateFrameSinkManagerOnCompositorThread(
gpu::ImageFactory* image_factory,
- mojom::GpuServicePtrInfo gpu_service_info,
cc::mojom::FrameSinkManagerRequest request,
cc::mojom::FrameSinkManagerClientPtrInfo client_info) {
DCHECK(!frame_sink_manager_);
cc::mojom::FrameSinkManagerClientPtr client;
client.Bind(std::move(client_info));
- gpu_internal_.Bind(std::move(gpu_service_info));
-
display_provider_ = base::MakeUnique<viz::GpuDisplayProvider>(
gpu_command_service_,
- base::MakeUnique<viz::ServerGpuMemoryBufferManager>(gpu_internal_.get(),
- 1 /* client_id */),
+ base::MakeUnique<InProcessGpuMemoryBufferManager>(
+ gpu_service_->gpu_channel_manager(),
+ gpu_service_->gpu_memory_buffer_factory()),
image_factory);
frame_sink_manager_ = base::MakeUnique<viz::MojoFrameSinkManager>(
@@ -215,7 +258,6 @@ void GpuMain::CreateFrameSinkManagerOnCompositorThread(
void GpuMain::TearDownOnCompositorThread() {
frame_sink_manager_.reset();
display_provider_.reset();
- gpu_internal_.reset();
}
void GpuMain::TearDownOnGpuThread() {
@@ -242,10 +284,6 @@ void GpuMain::CreateGpuServiceOnGpuThread(
}
}
-void GpuMain::BindGpuInternalOnGpuThread(mojom::GpuServiceRequest request) {
- gpu_service_->Bind(std::move(request));
-}
-
void GpuMain::PreSandboxStartup() {
// TODO(sad): https://crbug.com/645602
}
« no previous file with comments | « services/ui/gpu/gpu_main.h ('k') | services/ui/gpu/gpu_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698