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

Side by Side 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 unified diff | 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 »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/power_monitor/power_monitor_device_source.h" 10 #include "base/power_monitor/power_monitor_device_source.h"
11 #include "base/single_thread_task_runner.h" 11 #include "base/single_thread_task_runner.h"
12 #include "components/viz/common/server_gpu_memory_buffer_manager.h"
13 #include "components/viz/service/display_compositor/gpu_display_provider.h" 12 #include "components/viz/service/display_compositor/gpu_display_provider.h"
14 #include "components/viz/service/frame_sinks/mojo_frame_sink_manager.h" 13 #include "components/viz/service/frame_sinks/mojo_frame_sink_manager.h"
15 #include "gpu/command_buffer/common/activity_flags.h" 14 #include "gpu/command_buffer/common/activity_flags.h"
16 #include "gpu/ipc/common/gpu_memory_buffer_support.h" 15 #include "gpu/ipc/common/gpu_memory_buffer_support.h"
17 #include "gpu/ipc/gpu_in_process_thread_service.h" 16 #include "gpu/ipc/gpu_in_process_thread_service.h"
18 #include "gpu/ipc/service/gpu_memory_buffer_factory.h" 17 #include "gpu/ipc/service/gpu_memory_buffer_factory.h"
19 #include "gpu/ipc/service/gpu_watchdog_thread.h" 18 #include "gpu/ipc/service/gpu_watchdog_thread.h"
20 #include "services/ui/gpu/gpu_service.h" 19 #include "services/ui/gpu/gpu_service.h"
21 20
22 #if defined(USE_OZONE) 21 #if defined(USE_OZONE)
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 void GpuMain::CreateFrameSinkManagerInternal( 166 void GpuMain::CreateFrameSinkManagerInternal(
168 cc::mojom::FrameSinkManagerRequest request, 167 cc::mojom::FrameSinkManagerRequest request,
169 cc::mojom::FrameSinkManagerClientPtrInfo client_info) { 168 cc::mojom::FrameSinkManagerClientPtrInfo client_info) {
170 DCHECK(!gpu_command_service_); 169 DCHECK(!gpu_command_service_);
171 DCHECK(gpu_service_); 170 DCHECK(gpu_service_);
172 DCHECK(gpu_thread_task_runner_->BelongsToCurrentThread()); 171 DCHECK(gpu_thread_task_runner_->BelongsToCurrentThread());
173 gpu_command_service_ = new gpu::GpuInProcessThreadService( 172 gpu_command_service_ = new gpu::GpuInProcessThreadService(
174 gpu_thread_task_runner_, gpu_service_->sync_point_manager(), 173 gpu_thread_task_runner_, gpu_service_->sync_point_manager(),
175 gpu_service_->mailbox_manager(), gpu_service_->share_group()); 174 gpu_service_->mailbox_manager(), gpu_service_->share_group());
176 175
177 gpu::ImageFactory* image_factory = gpu_service_->gpu_image_factory();
178
179 // If the FrameSinkManager creation was delayed because GpuService had not
180 // been created yet, then this is called, in gpu thread, right after
181 // GpuService is created.
182 mojom::GpuServicePtr gpu_service;
183 BindGpuInternalOnGpuThread(mojo::MakeRequest(&gpu_service));
184 compositor_thread_task_runner_->PostTask( 176 compositor_thread_task_runner_->PostTask(
185 FROM_HERE, base::Bind(&GpuMain::CreateFrameSinkManagerOnCompositorThread, 177 FROM_HERE,
186 base::Unretained(this), image_factory, 178 base::Bind(&GpuMain::CreateFrameSinkManagerOnCompositorThread,
187 base::Passed(gpu_service.PassInterface()), 179 base::Unretained(this), base::Passed(std::move(request)),
188 base::Passed(std::move(request)), 180 base::Passed(std::move(client_info))));
189 base::Passed(std::move(client_info))));
190 } 181 }
191 182
192 void GpuMain::CreateFrameSinkManagerOnCompositorThread( 183 void GpuMain::CreateFrameSinkManagerOnCompositorThread(
193 gpu::ImageFactory* image_factory,
194 mojom::GpuServicePtrInfo gpu_service_info,
195 cc::mojom::FrameSinkManagerRequest request, 184 cc::mojom::FrameSinkManagerRequest request,
196 cc::mojom::FrameSinkManagerClientPtrInfo client_info) { 185 cc::mojom::FrameSinkManagerClientPtrInfo client_info) {
197 DCHECK(!frame_sink_manager_); 186 DCHECK(!frame_sink_manager_);
198 cc::mojom::FrameSinkManagerClientPtr client; 187 cc::mojom::FrameSinkManagerClientPtr client;
199 client.Bind(std::move(client_info)); 188 client.Bind(std::move(client_info));
200 189
201 gpu_internal_.Bind(std::move(gpu_service_info));
202
203 display_provider_ = base::MakeUnique<viz::GpuDisplayProvider>( 190 display_provider_ = base::MakeUnique<viz::GpuDisplayProvider>(
204 gpu_command_service_, 191 gpu_command_service_, gpu_service_->gpu_channel_manager());
205 base::MakeUnique<viz::ServerGpuMemoryBufferManager>(gpu_internal_.get(),
206 1 /* client_id */),
207 image_factory);
208 192
209 frame_sink_manager_ = base::MakeUnique<viz::MojoFrameSinkManager>( 193 frame_sink_manager_ = base::MakeUnique<viz::MojoFrameSinkManager>(
210 true, display_provider_.get()); 194 true, display_provider_.get());
211 frame_sink_manager_->BindPtrAndSetClient(std::move(request), 195 frame_sink_manager_->BindPtrAndSetClient(std::move(request),
212 std::move(client)); 196 std::move(client));
213 } 197 }
214 198
215 void GpuMain::TearDownOnCompositorThread() { 199 void GpuMain::TearDownOnCompositorThread() {
216 frame_sink_manager_.reset(); 200 frame_sink_manager_.reset();
217 display_provider_.reset(); 201 display_provider_.reset();
218 gpu_internal_.reset();
219 } 202 }
220 203
221 void GpuMain::TearDownOnGpuThread() { 204 void GpuMain::TearDownOnGpuThread() {
222 binding_.Close(); 205 binding_.Close();
223 gpu_service_.reset(); 206 gpu_service_.reset();
224 gpu_memory_buffer_factory_.reset(); 207 gpu_memory_buffer_factory_.reset();
225 gpu_init_.reset(); 208 gpu_init_.reset();
226 } 209 }
227 210
228 void GpuMain::CreateGpuServiceOnGpuThread( 211 void GpuMain::CreateGpuServiceOnGpuThread(
229 mojom::GpuServiceRequest request, 212 mojom::GpuServiceRequest request,
230 mojom::GpuHostPtr gpu_host, 213 mojom::GpuHostPtr gpu_host,
231 const gpu::GpuPreferences& preferences, 214 const gpu::GpuPreferences& preferences,
232 gpu::GpuProcessActivityFlags activity_flags) { 215 gpu::GpuProcessActivityFlags activity_flags) {
233 gpu_service_->UpdateGPUInfoFromPreferences(preferences); 216 gpu_service_->UpdateGPUInfoFromPreferences(preferences);
234 gpu_service_->InitializeWithHost(std::move(gpu_host), 217 gpu_service_->InitializeWithHost(std::move(gpu_host),
235 std::move(activity_flags)); 218 std::move(activity_flags));
236 gpu_service_->Bind(std::move(request)); 219 gpu_service_->Bind(std::move(request));
237 220
238 if (pending_frame_sink_manager_request_.is_pending()) { 221 if (pending_frame_sink_manager_request_.is_pending()) {
239 CreateFrameSinkManagerInternal( 222 CreateFrameSinkManagerInternal(
240 std::move(pending_frame_sink_manager_request_), 223 std::move(pending_frame_sink_manager_request_),
241 std::move(pending_frame_sink_manager_client_info_)); 224 std::move(pending_frame_sink_manager_client_info_));
242 } 225 }
243 } 226 }
244 227
245 void GpuMain::BindGpuInternalOnGpuThread(mojom::GpuServiceRequest request) {
246 gpu_service_->Bind(std::move(request));
247 }
248
249 void GpuMain::PreSandboxStartup() { 228 void GpuMain::PreSandboxStartup() {
250 // TODO(sad): https://crbug.com/645602 229 // TODO(sad): https://crbug.com/645602
251 } 230 }
252 231
253 bool GpuMain::EnsureSandboxInitialized( 232 bool GpuMain::EnsureSandboxInitialized(
254 gpu::GpuWatchdogThread* watchdog_thread) { 233 gpu::GpuWatchdogThread* watchdog_thread) {
255 // TODO(sad): https://crbug.com/645602 234 // TODO(sad): https://crbug.com/645602
256 return true; 235 return true;
257 } 236 }
258 237
259 } // namespace ui 238 } // namespace ui
OLDNEW
« 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