Commit 273a3896 authored by sadrul's avatar sadrul Committed by Commit bot

mus-gpu: Include GpuPreferences when requesting for GpuService.

The gpu host should set up GpuPreferences correctly and send that
to the gpu process so that GpuService is initialized with the desired
settings. The corresponding chrome-ipc, GpuMsg_Initialize, also
includes the GpuPreferences.

Also includes a build fix for mac.

BUG=643746, 630895

Review-Url: https://codereview.chromium.org/2627993002
Cr-Commit-Position: refs/heads/master@{#442955}
parent 8e0401b9
...@@ -14,6 +14,10 @@ ...@@ -14,6 +14,10 @@
#include "services/ui/common/server_gpu_memory_buffer_manager.h" #include "services/ui/common/server_gpu_memory_buffer_manager.h"
#include "services/ui/gpu/gpu_service.h" #include "services/ui/gpu/gpu_service.h"
#if defined(OS_MACOSX)
#include "base/message_loop/message_pump_mac.h"
#endif
namespace { namespace {
#if defined(USE_X11) #if defined(USE_X11)
...@@ -104,14 +108,15 @@ void GpuMain::OnStart() { ...@@ -104,14 +108,15 @@ void GpuMain::OnStart() {
} }
void GpuMain::CreateGpuService(mojom::GpuServiceRequest request, void GpuMain::CreateGpuService(mojom::GpuServiceRequest request,
mojom::GpuHostPtr gpu_host) { mojom::GpuHostPtr gpu_host,
const gpu::GpuPreferences& preferences) {
// |this| will outlive the gpu thread and so it's safe to use // |this| will outlive the gpu thread and so it's safe to use
// base::Unretained here. // base::Unretained here.
gpu_thread_.task_runner()->PostTask( gpu_thread_.task_runner()->PostTask(
FROM_HERE, FROM_HERE,
base::Bind(&GpuMain::CreateGpuServiceOnGpuThread, base::Unretained(this), base::Bind(&GpuMain::CreateGpuServiceOnGpuThread, base::Unretained(this),
base::Passed(std::move(request)), base::Passed(std::move(request)),
base::Passed(gpu_host.PassInterface()))); base::Passed(gpu_host.PassInterface()), preferences));
} }
void GpuMain::CreateDisplayCompositor( void GpuMain::CreateDisplayCompositor(
...@@ -211,10 +216,11 @@ void GpuMain::TearDownOnGpuThread() { ...@@ -211,10 +216,11 @@ void GpuMain::TearDownOnGpuThread() {
void GpuMain::CreateGpuServiceOnGpuThread( void GpuMain::CreateGpuServiceOnGpuThread(
mojom::GpuServiceRequest request, mojom::GpuServiceRequest request,
mojom::GpuHostPtrInfo gpu_host_info) { mojom::GpuHostPtrInfo gpu_host_info,
const gpu::GpuPreferences& preferences) {
mojom::GpuHostPtr gpu_host; mojom::GpuHostPtr gpu_host;
gpu_host.Bind(std::move(gpu_host_info)); gpu_host.Bind(std::move(gpu_host_info));
gpu_service_->InitializeWithHost(std::move(gpu_host)); gpu_service_->InitializeWithHost(std::move(gpu_host), preferences);
gpu_service_->Bind(std::move(request)); gpu_service_->Bind(std::move(request));
if (pending_display_compositor_request_.is_pending()) { if (pending_display_compositor_request_.is_pending()) {
......
...@@ -28,7 +28,8 @@ class GpuMain : public gpu::GpuSandboxHelper, public mojom::GpuMain { ...@@ -28,7 +28,8 @@ class GpuMain : public gpu::GpuSandboxHelper, public mojom::GpuMain {
// mojom::GpuMain implementation: // mojom::GpuMain implementation:
void CreateGpuService(mojom::GpuServiceRequest request, void CreateGpuService(mojom::GpuServiceRequest request,
mojom::GpuHostPtr gpu_host) override; mojom::GpuHostPtr gpu_host,
const gpu::GpuPreferences& preferences) override;
void CreateDisplayCompositor( void CreateDisplayCompositor(
cc::mojom::DisplayCompositorRequest request, cc::mojom::DisplayCompositorRequest request,
cc::mojom::DisplayCompositorClientPtr client) override; cc::mojom::DisplayCompositorClientPtr client) override;
...@@ -51,7 +52,8 @@ class GpuMain : public gpu::GpuSandboxHelper, public mojom::GpuMain { ...@@ -51,7 +52,8 @@ class GpuMain : public gpu::GpuSandboxHelper, public mojom::GpuMain {
cc::mojom::DisplayCompositorRequest request, cc::mojom::DisplayCompositorRequest request,
cc::mojom::DisplayCompositorClientPtrInfo client_info); cc::mojom::DisplayCompositorClientPtrInfo client_info);
void CreateGpuServiceOnGpuThread(mojom::GpuServiceRequest request, void CreateGpuServiceOnGpuThread(mojom::GpuServiceRequest request,
mojom::GpuHostPtrInfo gpu_host_info); mojom::GpuHostPtrInfo gpu_host_info,
const gpu::GpuPreferences& preferences);
void BindGpuInternalOnGpuThread(mojom::GpuServiceRequest request); void BindGpuInternalOnGpuThread(mojom::GpuServiceRequest request);
void TearDownOnCompositorThread(); void TearDownOnCompositorThread();
......
...@@ -60,10 +60,12 @@ GpuService::~GpuService() { ...@@ -60,10 +60,12 @@ GpuService::~GpuService() {
shutdown_event_.Signal(); shutdown_event_.Signal();
} }
void GpuService::InitializeWithHost(mojom::GpuHostPtr gpu_host) { void GpuService::InitializeWithHost(mojom::GpuHostPtr gpu_host,
const gpu::GpuPreferences& preferences) {
DCHECK(CalledOnValidThread()); DCHECK(CalledOnValidThread());
DCHECK(!gpu_host_); DCHECK(!gpu_host_);
gpu_host_ = std::move(gpu_host); gpu_host_ = std::move(gpu_host);
gpu_preferences_ = preferences;
gpu_info_.video_decode_accelerator_capabilities = gpu_info_.video_decode_accelerator_capabilities =
media::GpuVideoDecodeAccelerator::GetCapabilities(gpu_preferences_); media::GpuVideoDecodeAccelerator::GetCapabilities(gpu_preferences_);
gpu_info_.video_encode_accelerator_supported_profiles = gpu_info_.video_encode_accelerator_supported_profiles =
......
...@@ -19,7 +19,6 @@ ...@@ -19,7 +19,6 @@
#include "gpu/ipc/service/gpu_channel_manager_delegate.h" #include "gpu/ipc/service/gpu_channel_manager_delegate.h"
#include "gpu/ipc/service/gpu_config.h" #include "gpu/ipc/service/gpu_config.h"
#include "gpu/ipc/service/x_util.h" #include "gpu/ipc/service/x_util.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "mojo/public/cpp/bindings/binding_set.h" #include "mojo/public/cpp/bindings/binding_set.h"
#include "services/ui/gpu/interfaces/gpu_host.mojom.h" #include "services/ui/gpu/interfaces/gpu_host.mojom.h"
#include "services/ui/gpu/interfaces/gpu_service.mojom.h" #include "services/ui/gpu/interfaces/gpu_service.mojom.h"
...@@ -53,9 +52,18 @@ class GpuService : public gpu::GpuChannelManagerDelegate, ...@@ -53,9 +52,18 @@ class GpuService : public gpu::GpuChannelManagerDelegate,
~GpuService() override; ~GpuService() override;
void InitializeWithHost(mojom::GpuHostPtr gpu_host); void InitializeWithHost(mojom::GpuHostPtr gpu_host,
const gpu::GpuPreferences& preferences);
void Bind(mojom::GpuServiceRequest request); void Bind(mojom::GpuServiceRequest request);
media::MediaGpuChannelManager* media_gpu_channel_manager() {
return media_gpu_channel_manager_.get();
}
gpu::GpuChannelManager* gpu_channel_manager() {
return gpu_channel_manager_.get();
}
private: private:
friend class GpuMain; friend class GpuMain;
......
...@@ -9,6 +9,8 @@ import "gpu/ipc/common/surface_handle.mojom"; ...@@ -9,6 +9,8 @@ import "gpu/ipc/common/surface_handle.mojom";
import "services/ui/gpu/interfaces/context_lost_reason.mojom"; import "services/ui/gpu/interfaces/context_lost_reason.mojom";
import "url/mojo/url.mojom"; import "url/mojo/url.mojom";
// Communication channel from the gpu process to the gpu host. This interface
// should never have any sync function calls.
interface GpuHost { interface GpuHost {
DidInitialize(gpu.mojom.GpuInfo gpu_info); DidInitialize(gpu.mojom.GpuInfo gpu_info);
DidCreateOffscreenContext(url.mojom.Url url); DidCreateOffscreenContext(url.mojom.Url url);
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
module ui.mojom; module ui.mojom;
import "cc/ipc/display_compositor.mojom"; import "cc/ipc/display_compositor.mojom";
import "gpu/ipc/common/gpu_preferences.mojom";
import "services/ui/gpu/interfaces/gpu_host.mojom"; import "services/ui/gpu/interfaces/gpu_host.mojom";
import "services/ui/gpu/interfaces/gpu_service.mojom"; import "services/ui/gpu/interfaces/gpu_service.mojom";
...@@ -16,5 +17,6 @@ interface GpuMain { ...@@ -16,5 +17,6 @@ interface GpuMain {
cc.mojom.DisplayCompositorClient display_compositor_client); cc.mojom.DisplayCompositorClient display_compositor_client);
CreateGpuService(GpuService& gpu_service, CreateGpuService(GpuService& gpu_service,
GpuHost gpu_host); GpuHost gpu_host,
gpu.mojom.GpuPreferences preferences);
}; };
...@@ -107,8 +107,13 @@ GpuHost::GpuHost(GpuHostDelegate* delegate) ...@@ -107,8 +107,13 @@ GpuHost::GpuHost(GpuHostDelegate* delegate)
// connector->BindInterface("gpu", &gpu_main_); // connector->BindInterface("gpu", &gpu_main_);
gpu_main_impl_ = base::MakeUnique<GpuMain>(MakeRequest(&gpu_main_)); gpu_main_impl_ = base::MakeUnique<GpuMain>(MakeRequest(&gpu_main_));
gpu_main_impl_->OnStart(); gpu_main_impl_->OnStart();
// TODO(sad): Correctly initialize gpu::GpuPreferences (like it is initialized
// in GpuProcessHost::Init()).
gpu::GpuPreferences preferences;
gpu_main_->CreateGpuService(MakeRequest(&gpu_service_), gpu_main_->CreateGpuService(MakeRequest(&gpu_service_),
gpu_host_binding_.CreateInterfacePtrAndBind()); gpu_host_binding_.CreateInterfacePtrAndBind(),
preferences);
gpu_memory_buffer_manager_ = base::MakeUnique<ServerGpuMemoryBufferManager>( gpu_memory_buffer_manager_ = base::MakeUnique<ServerGpuMemoryBufferManager>(
gpu_service_.get(), next_client_id_++); gpu_service_.get(), next_client_id_++);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment