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

Side by Side Diff: services/ui/gpu/gpu_main.cc

Issue 2539893002: Mus: Implement GpuMain mojo interface (Closed)
Patch Set: Cleanup of naming some more Created 4 years 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "services/ui/gpu/gpu_main.h" 5 #include "services/ui/gpu/gpu_main.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "gpu/ipc/common/gpu_memory_buffer_support.h" 9 #include "gpu/ipc/common/gpu_memory_buffer_support.h"
10 #include "gpu/ipc/gpu_in_process_thread_service.h"
10 #include "gpu/ipc/service/gpu_memory_buffer_factory.h" 11 #include "gpu/ipc/service/gpu_memory_buffer_factory.h"
11 #include "gpu/ipc/service/gpu_watchdog_thread.h" 12 #include "gpu/ipc/service/gpu_watchdog_thread.h"
12 #include "services/ui/gpu/gpu_service_internal.h" 13 #include "services/ui/gpu/gpu_service_internal.h"
13 14
14 namespace { 15 namespace {
15 16
16 #if defined(OS_WIN) 17 #if defined(OS_WIN)
17 std::unique_ptr<base::MessagePump> CreateMessagePumpWin() { 18 std::unique_ptr<base::MessagePump> CreateMessagePumpWin() {
18 base::MessagePumpForGpu::InitFactory(); 19 base::MessagePumpForGpu::InitFactory();
19 return base::MessageLoop::CreateMessagePumpForType( 20 return base::MessageLoop::CreateMessagePumpForType(
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 io_thread_.task_runner(), compositor_thread_.task_runner())); 106 io_thread_.task_runner(), compositor_thread_.task_runner()));
106 } 107 }
107 108
108 void GpuMain::Create(mojom::GpuServiceInternalRequest request) { 109 void GpuMain::Create(mojom::GpuServiceInternalRequest request) {
109 gpu_thread_.task_runner()->PostTask( 110 gpu_thread_.task_runner()->PostTask(
110 FROM_HERE, 111 FROM_HERE,
111 base::Bind(&GpuMain::CreateOnGpuThread, weak_factory_.GetWeakPtr(), 112 base::Bind(&GpuMain::CreateOnGpuThread, weak_factory_.GetWeakPtr(),
112 base::Passed(std::move(request)))); 113 base::Passed(std::move(request))));
113 } 114 }
114 115
116 void GpuMain::Create(cc::mojom::DisplayCompositorFactoryRequest request) {
117 // TODO(fsamuel): This must be called AFTER GpuServiceInternal has been
118 // initialized.
sadrul 2016/11/29 19:46:41 DCHECK()?
Fady Samuel 2016/11/29 20:08:58 GpuMain doesn't know about GpuServiceInternal::Ini
119 gpu_command_service_ = new gpu::GpuInProcessThreadService(
120 gpu_thread_.task_runner(), gpu_service_internal_->sync_point_manager(),
121 gpu_service_internal_->mailbox_manager(),
122 gpu_service_internal_->share_group());
123
124 // |gpu_memory_buffer_factory_| is null in tests.
125 gpu::ImageFactory* image_factory =
126 gpu_memory_buffer_factory_ ? gpu_memory_buffer_factory_->AsImageFactory()
127 : nullptr;
128
129 compositor_thread_.task_runner()->PostTask(
130 FROM_HERE,
131 base::Bind(&GpuMain::InitOnCompositorThread, base::Unretained(this),
132 image_factory, compositor_thread_.task_runner(),
133 base::Passed(std::move(request))));
134 }
135
115 void GpuMain::InitOnGpuThread( 136 void GpuMain::InitOnGpuThread(
116 scoped_refptr<base::SingleThreadTaskRunner> io_runner, 137 scoped_refptr<base::SingleThreadTaskRunner> io_runner,
117 scoped_refptr<base::SingleThreadTaskRunner> compositor_runner) { 138 scoped_refptr<base::SingleThreadTaskRunner> compositor_runner) {
118 gpu_init_.reset(new gpu::GpuInit()); 139 gpu_init_.reset(new gpu::GpuInit());
119 gpu_init_->set_sandbox_helper(this); 140 gpu_init_->set_sandbox_helper(this);
120 bool success = gpu_init_->InitializeAndStartSandbox( 141 bool success = gpu_init_->InitializeAndStartSandbox(
121 *base::CommandLine::ForCurrentProcess()); 142 *base::CommandLine::ForCurrentProcess());
122 if (success) { 143 if (!success)
123 if (gpu::GetNativeGpuMemoryBufferType() != gfx::EMPTY_BUFFER) { 144 return;
124 gpu_memory_buffer_factory_ = 145
125 gpu::GpuMemoryBufferFactory::CreateNativeType(); 146 if (gpu::GetNativeGpuMemoryBufferType() != gfx::EMPTY_BUFFER) {
126 } 147 gpu_memory_buffer_factory_ =
127 gpu_service_internal_.reset(new GpuServiceInternal( 148 gpu::GpuMemoryBufferFactory::CreateNativeType();
128 gpu_init_->gpu_info(), gpu_init_->TakeWatchdogThread(),
129 gpu_memory_buffer_factory_.get(), io_runner, compositor_runner));
130 } 149 }
150
151 gpu_service_internal_ = base::MakeUnique<GpuServiceInternal>(
152 gpu_init_->gpu_info(), gpu_init_->TakeWatchdogThread(),
153 gpu_memory_buffer_factory_.get(), io_runner);
154 }
155
156 void GpuMain::InitOnCompositorThread(
157 gpu::ImageFactory* image_factory,
158 scoped_refptr<base::SingleThreadTaskRunner> compositor_runner,
159 cc::mojom::DisplayCompositorFactoryRequest request) {
160 DCHECK(!display_compositor_factory_);
161 display_compositor_factory_ = base::MakeUnique<DisplayCompositorFactory>(
162 this, gpu_command_service_, compositor_runner, image_factory,
163 std::move(request));
131 } 164 }
132 165
133 void GpuMain::TearDownOnCompositorThread() { 166 void GpuMain::TearDownOnCompositorThread() {
134 if (gpu_service_internal_) 167 display_compositor_factory_.reset();
135 gpu_service_internal_->DestroyDisplayCompositor();
136 } 168 }
137 169
138 void GpuMain::TearDownOnGpuThread() { 170 void GpuMain::TearDownOnGpuThread() {
139 gpu_service_internal_.reset(); 171 gpu_service_internal_.reset();
140 gpu_memory_buffer_factory_.reset(); 172 gpu_memory_buffer_factory_.reset();
141 gpu_init_.reset(); 173 gpu_init_.reset();
142 } 174 }
143 175
144 void GpuMain::CreateOnGpuThread(mojom::GpuServiceInternalRequest request) { 176 void GpuMain::CreateOnGpuThread(mojom::GpuServiceInternalRequest request) {
145 if (gpu_service_internal_) 177 if (gpu_service_internal_)
146 gpu_service_internal_->Add(std::move(request)); 178 gpu_service_internal_->Bind(std::move(request));
147 } 179 }
148 180
149 void GpuMain::PreSandboxStartup() { 181 void GpuMain::PreSandboxStartup() {
150 // TODO(sad): https://crbug.com/645602 182 // TODO(sad): https://crbug.com/645602
151 } 183 }
152 184
153 bool GpuMain::EnsureSandboxInitialized( 185 bool GpuMain::EnsureSandboxInitialized(
154 gpu::GpuWatchdogThread* watchdog_thread) { 186 gpu::GpuWatchdogThread* watchdog_thread) {
155 // TODO(sad): https://crbug.com/645602 187 // TODO(sad): https://crbug.com/645602
156 return true; 188 return true;
157 } 189 }
158 190
191 std::unique_ptr<gpu::GpuMemoryBufferManager>
192 GpuMain::CreateGpuMemoryBufferManager() {
193 if (!gpu_service_internal_)
194 return nullptr;
195
196 if (!gpu_internal_) {
197 mojom::GpuServiceInternalRequest gpu_service_request =
198 mojo::GetProxy(&gpu_internal_);
199
200 Create(std::move(gpu_service_request));
201 }
202
203 return base::MakeUnique<MusGpuMemoryBufferManager>(gpu_internal_.get(),
204 1 /* client_id */);
205 }
206
159 } // namespace ui 207 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698