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

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

Issue 2481263002: Introduce Display Compositor mojo interface. Use InProcessContextProvider. (Closed)
Patch Set: Speculative fix for android build issue 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/gpu/gpu_service_internal.cc
diff --git a/services/ui/gpu/gpu_service_internal.cc b/services/ui/gpu/gpu_service_internal.cc
index adfc88fdadf0fe1ddc398b1ac342b8b4a2acda81..4dbab58d69b091605cd8ec731261754d805a481b 100644
--- a/services/ui/gpu/gpu_service_internal.cc
+++ b/services/ui/gpu/gpu_service_internal.cc
@@ -4,9 +4,11 @@
#include "services/ui/gpu/gpu_service_internal.h"
+#include "base/bind.h"
#include "base/memory/shared_memory.h"
#include "base/threading/thread_task_runner_handle.h"
#include "build/build_config.h"
+#include "cc/output/in_process_context_provider.h"
#include "gpu/command_buffer/service/gpu_switches.h"
#include "gpu/command_buffer/service/sync_point_manager.h"
#include "gpu/config/gpu_info_collector.h"
@@ -14,6 +16,8 @@
#include "gpu/config/gpu_util.h"
#include "gpu/ipc/common/gpu_memory_buffer_support.h"
#include "gpu/ipc/common/memory_stats.h"
+#include "gpu/ipc/gpu_in_process_thread_service.h"
+#include "gpu/ipc/service/gpu_channel_manager.h"
#include "gpu/ipc/service/gpu_memory_buffer_factory.h"
#include "gpu/ipc/service/gpu_watchdog_thread.h"
#include "ipc/ipc_channel_handle.h"
@@ -22,6 +26,9 @@
#include "media/gpu/ipc/service/gpu_video_decode_accelerator.h"
#include "media/gpu/ipc/service/gpu_video_encode_accelerator.h"
#include "media/gpu/ipc/service/media_gpu_channel_manager.h"
+#include "mojo/public/cpp/bindings/strong_binding.h"
+#include "services/ui/surfaces/display_compositor.h"
+#include "services/ui/surfaces/mus_gpu_memory_buffer_manager.h"
#include "ui/gl/gl_implementation.h"
#include "ui/gl/gl_switches.h"
#include "ui/gl/gpu_switching_manager.h"
@@ -41,10 +48,12 @@ GpuServiceInternal::GpuServiceInternal(
watchdog_thread_(std::move(watchdog_thread)),
gpu_memory_buffer_factory_(gpu_memory_buffer_factory),
gpu_info_(gpu_info),
- binding_(this) {}
+ compositor_thread_("DisplayCompositorThread") {
+ compositor_thread_.Start();
+}
GpuServiceInternal::~GpuServiceInternal() {
- binding_.Close();
+ bindings_.CloseAllBindings();
media_gpu_channel_manager_.reset();
gpu_channel_manager_.reset();
owned_sync_point_manager_.reset();
@@ -57,8 +66,7 @@ GpuServiceInternal::~GpuServiceInternal() {
}
void GpuServiceInternal::Add(mojom::GpuServiceInternalRequest request) {
- binding_.Close();
- binding_.Bind(std::move(request));
+ bindings_.AddBinding(this, std::move(request));
}
void GpuServiceInternal::CreateGpuMemoryBuffer(
@@ -83,6 +91,49 @@ void GpuServiceInternal::DestroyGpuMemoryBuffer(
gpu_channel_manager_->DestroyGpuMemoryBuffer(id, client_id, sync_token);
}
+void GpuServiceInternal::CreateDisplayCompositor(
+ cc::mojom::DisplayCompositorRequest request,
+ cc::mojom::DisplayCompositorClientPtr client) {
+ DCHECK(CalledOnValidThread());
+ DCHECK(!gpu_command_service_);
+ gpu_command_service_ = new gpu::GpuInProcessThreadService(
+ base::ThreadTaskRunnerHandle::Get(), owned_sync_point_manager_.get(),
+ gpu_channel_manager_->mailbox_manager(),
+ gpu_channel_manager_->share_group());
+ mojom::GpuServiceInternalPtr gpu_service_ptr;
+ Add(mojo::GetProxy(&gpu_service_ptr));
+ compositor_thread_.task_runner()->PostTask(
+ FROM_HERE,
+ base::Bind(&GpuServiceInternal::CreateDisplayCompositorOnCompositorThread,
+ base::Unretained(this),
+ base::Passed(gpu_service_ptr.PassInterface()),
+ base::Passed(&request), base::Passed(client.PassInterface())));
+}
+
+void GpuServiceInternal::CreateDisplayCompositorOnCompositorThread(
+ mojom::GpuServiceInternalPtrInfo gpu_service_info,
+ cc::mojom::DisplayCompositorRequest request,
+ cc::mojom::DisplayCompositorClientPtrInfo client_info) {
+ DCHECK(compositor_thread_.task_runner()->BelongsToCurrentThread());
+ mojom::GpuServiceInternalPtr gpu_service_ptr;
+ gpu_service_ptr.Bind(std::move(gpu_service_info));
+
+ cc::mojom::DisplayCompositorClientPtr client_ptr;
+ client_ptr.Bind(std::move(client_info));
+
+ std::unique_ptr<MusGpuMemoryBufferManager> gpu_memory_buffer_manager =
+ base::MakeUnique<MusGpuMemoryBufferManager>(std::move(gpu_service_ptr),
+ 1 /* client_id */);
+ // |gpu_memory_buffer_factory_| is null in tests.
+ gpu::ImageFactory* image_factory =
+ gpu_memory_buffer_factory_ ? gpu_memory_buffer_factory_->AsImageFactory()
+ : nullptr;
+ mojo::MakeStrongBinding(
+ base::MakeUnique<DisplayCompositor>(gpu_command_service_,
+ std::move(gpu_memory_buffer_manager),
+ image_factory, std::move(client_ptr)),
+ std::move(request));
+}
void GpuServiceInternal::DidCreateOffscreenContext(const GURL& active_url) {
NOTIMPLEMENTED();
}
@@ -145,6 +196,7 @@ void GpuServiceInternal::Initialize(const InitializeCallback& callback) {
media_gpu_channel_manager_.reset(
new media::MediaGpuChannelManager(gpu_channel_manager_.get()));
+
callback.Run(gpu_info_);
}

Powered by Google App Engine
This is Rietveld 408576698