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

Side by Side Diff: content/browser/compositor/gpu_process_transport_factory.cc

Issue 1931213002: display_compositor: Move CompositorOverlayCandidateValidator from content. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@DONE_2016.04.28_dc-overlay-candidate-validator
Patch Set: . Created 4 years, 7 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "content/browser/compositor/gpu_process_transport_factory.h" 5 #include "content/browser/compositor/gpu_process_transport_factory.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/location.h" 12 #include "base/location.h"
13 #include "base/metrics/histogram.h" 13 #include "base/metrics/histogram.h"
14 #include "base/single_thread_task_runner.h" 14 #include "base/single_thread_task_runner.h"
15 #include "base/thread_task_runner_handle.h" 15 #include "base/thread_task_runner_handle.h"
16 #include "base/threading/simple_thread.h" 16 #include "base/threading/simple_thread.h"
17 #include "base/threading/thread.h" 17 #include "base/threading/thread.h"
18 #include "build/build_config.h" 18 #include "build/build_config.h"
19 #include "cc/base/histograms.h" 19 #include "cc/base/histograms.h"
20 #include "cc/output/compositor_frame.h" 20 #include "cc/output/compositor_frame.h"
21 #include "cc/output/output_surface.h" 21 #include "cc/output/output_surface.h"
22 #include "cc/output/vulkan_in_process_context_provider.h" 22 #include "cc/output/vulkan_in_process_context_provider.h"
23 #include "cc/raster/single_thread_task_graph_runner.h" 23 #include "cc/raster/single_thread_task_graph_runner.h"
24 #include "cc/raster/task_graph_runner.h" 24 #include "cc/raster/task_graph_runner.h"
25 #include "cc/surfaces/onscreen_display_client.h" 25 #include "cc/surfaces/onscreen_display_client.h"
26 #include "cc/surfaces/surface_display_output_surface.h" 26 #include "cc/surfaces/surface_display_output_surface.h"
27 #include "cc/surfaces/surface_manager.h" 27 #include "cc/surfaces/surface_manager.h"
28 #include "components/display_compositor/compositor_overlay_candidate_validator.h "
28 #include "components/display_compositor/gl_helper.h" 29 #include "components/display_compositor/gl_helper.h"
29 #include "content/browser/compositor/browser_compositor_output_surface.h" 30 #include "content/browser/compositor/browser_compositor_output_surface.h"
30 #include "content/browser/compositor/browser_compositor_overlay_candidate_valida tor.h"
31 #include "content/browser/compositor/gpu_browser_compositor_output_surface.h" 31 #include "content/browser/compositor/gpu_browser_compositor_output_surface.h"
32 #include "content/browser/compositor/gpu_surfaceless_browser_compositor_output_s urface.h" 32 #include "content/browser/compositor/gpu_surfaceless_browser_compositor_output_s urface.h"
33 #include "content/browser/compositor/offscreen_browser_compositor_output_surface .h" 33 #include "content/browser/compositor/offscreen_browser_compositor_output_surface .h"
34 #include "content/browser/compositor/reflector_impl.h" 34 #include "content/browser/compositor/reflector_impl.h"
35 #include "content/browser/compositor/software_browser_compositor_output_surface. h" 35 #include "content/browser/compositor/software_browser_compositor_output_surface. h"
36 #include "content/browser/compositor/software_output_device_mus.h" 36 #include "content/browser/compositor/software_output_device_mus.h"
37 #include "content/browser/gpu/browser_gpu_channel_host_factory.h" 37 #include "content/browser/gpu/browser_gpu_channel_host_factory.h"
38 #include "content/browser/gpu/browser_gpu_memory_buffer_manager.h" 38 #include "content/browser/gpu/browser_gpu_memory_buffer_manager.h"
39 #include "content/browser/gpu/gpu_data_manager_impl.h" 39 #include "content/browser/gpu/gpu_data_manager_impl.h"
40 #include "content/browser/renderer_host/render_widget_host_impl.h" 40 #include "content/browser/renderer_host/render_widget_host_impl.h"
(...skipping 15 matching lines...) Expand all
56 #include "ui/gfx/geometry/size.h" 56 #include "ui/gfx/geometry/size.h"
57 57
58 #if defined(MOJO_RUNNER_CLIENT) 58 #if defined(MOJO_RUNNER_CLIENT)
59 #include "content/common/mojo/mojo_shell_connection_impl.h" 59 #include "content/common/mojo/mojo_shell_connection_impl.h"
60 #endif 60 #endif
61 61
62 #if defined(OS_WIN) 62 #if defined(OS_WIN)
63 #include "content/browser/compositor/software_output_device_win.h" 63 #include "content/browser/compositor/software_output_device_win.h"
64 #include "ui/gfx/win/rendering_window_manager.h" 64 #include "ui/gfx/win/rendering_window_manager.h"
65 #elif defined(USE_OZONE) 65 #elif defined(USE_OZONE)
66 #include "content/browser/compositor/browser_compositor_overlay_candidate_valida tor_ozone.h" 66 #include "components/display_compositor/compositor_overlay_candidate_validator_o zone.h"
67 #include "content/browser/compositor/software_output_device_ozone.h" 67 #include "content/browser/compositor/software_output_device_ozone.h"
68 #include "ui/ozone/public/overlay_candidates_ozone.h" 68 #include "ui/ozone/public/overlay_candidates_ozone.h"
69 #include "ui/ozone/public/overlay_manager_ozone.h" 69 #include "ui/ozone/public/overlay_manager_ozone.h"
70 #include "ui/ozone/public/ozone_platform.h" 70 #include "ui/ozone/public/ozone_platform.h"
71 #include "ui/ozone/public/ozone_switches.h" 71 #include "ui/ozone/public/ozone_switches.h"
72 #elif defined(USE_X11) 72 #elif defined(USE_X11)
73 #include "content/browser/compositor/software_output_device_x11.h" 73 #include "content/browser/compositor/software_output_device_x11.h"
74 #elif defined(OS_MACOSX) 74 #elif defined(OS_MACOSX)
75 #include "content/browser/compositor/browser_compositor_overlay_candidate_valida tor_mac.h" 75 #include "components/display_compositor/compositor_overlay_candidate_validator_m ac.h"
76 #include "content/browser/compositor/software_output_device_mac.h" 76 #include "content/browser/compositor/software_output_device_mac.h"
77 #include "gpu/config/gpu_driver_bug_workaround_type.h" 77 #include "gpu/config/gpu_driver_bug_workaround_type.h"
78 #include "ui/base/cocoa/remote_layer_api.h" 78 #include "ui/base/cocoa/remote_layer_api.h"
79 #include "ui/base/ui_base_switches.h" 79 #include "ui/base/ui_base_switches.h"
80 #elif defined(OS_ANDROID) 80 #elif defined(OS_ANDROID)
81 #include "content/browser/compositor/browser_compositor_overlay_candidate_valida tor_android.h" 81 #include "components/display_compositor/compositor_overlay_candidate_validator_a ndroid.h"
82 #endif 82 #endif
83 #if !defined(GPU_SURFACE_HANDLE_IS_ACCELERATED_WINDOW) 83 #if !defined(GPU_SURFACE_HANDLE_IS_ACCELERATED_WINDOW)
84 #include "content/browser/gpu/gpu_surface_tracker.h" 84 #include "content/browser/gpu/gpu_surface_tracker.h"
85 #endif 85 #endif
86 86
87 #if defined(ENABLE_VULKAN) 87 #if defined(ENABLE_VULKAN)
88 #include "content/browser/compositor/vulkan_browser_compositor_output_surface.h" 88 #include "content/browser/compositor/vulkan_browser_compositor_output_surface.h"
89 #endif 89 #endif
90 90
91 using cc::ContextProvider; 91 using cc::ContextProvider;
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 new SoftwareOutputDeviceX11(compositor)); 200 new SoftwareOutputDeviceX11(compositor));
201 #elif defined(OS_MACOSX) 201 #elif defined(OS_MACOSX)
202 return std::unique_ptr<cc::SoftwareOutputDevice>( 202 return std::unique_ptr<cc::SoftwareOutputDevice>(
203 new SoftwareOutputDeviceMac(compositor)); 203 new SoftwareOutputDeviceMac(compositor));
204 #else 204 #else
205 NOTREACHED(); 205 NOTREACHED();
206 return std::unique_ptr<cc::SoftwareOutputDevice>(); 206 return std::unique_ptr<cc::SoftwareOutputDevice>();
207 #endif 207 #endif
208 } 208 }
209 209
210 std::unique_ptr<BrowserCompositorOverlayCandidateValidator> 210 std::unique_ptr<display_compositor::CompositorOverlayCandidateValidator>
211 CreateOverlayCandidateValidator(gfx::AcceleratedWidget widget) { 211 CreateOverlayCandidateValidator(gfx::AcceleratedWidget widget) {
212 std::unique_ptr<BrowserCompositorOverlayCandidateValidator> validator; 212 std::unique_ptr<display_compositor::CompositorOverlayCandidateValidator>
213 validator;
213 #if defined(USE_OZONE) 214 #if defined(USE_OZONE)
214 std::unique_ptr<ui::OverlayCandidatesOzone> overlay_candidates = 215 std::unique_ptr<ui::OverlayCandidatesOzone> overlay_candidates =
215 ui::OzonePlatform::GetInstance() 216 ui::OzonePlatform::GetInstance()
216 ->GetOverlayManager() 217 ->GetOverlayManager()
217 ->CreateOverlayCandidates(widget); 218 ->CreateOverlayCandidates(widget);
218 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); 219 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
219 if (overlay_candidates && 220 if (overlay_candidates &&
220 (command_line->HasSwitch(switches::kEnableHardwareOverlays) || 221 (command_line->HasSwitch(switches::kEnableHardwareOverlays) ||
221 command_line->HasSwitch(switches::kOzoneTestSingleOverlaySupport))) { 222 command_line->HasSwitch(switches::kOzoneTestSingleOverlaySupport))) {
222 validator.reset(new BrowserCompositorOverlayCandidateValidatorOzone( 223 validator.reset(
223 std::move(overlay_candidates))); 224 new display_compositor::CompositorOverlayCandidateValidatorOzone(
225 std::move(overlay_candidates)));
224 } 226 }
225 #elif defined(OS_MACOSX) 227 #elif defined(OS_MACOSX)
226 // Overlays are only supported through the remote layer API. 228 // Overlays are only supported through the remote layer API.
227 if (ui::RemoteLayerAPISupported()) { 229 if (ui::RemoteLayerAPISupported()) {
228 static bool overlays_disabled_at_command_line = 230 static bool overlays_disabled_at_command_line =
229 IsCALayersDisabledFromCommandLine(); 231 IsCALayersDisabledFromCommandLine();
230 const bool ca_layers_disabled = 232 const bool ca_layers_disabled =
231 overlays_disabled_at_command_line || 233 overlays_disabled_at_command_line ||
232 GpuDataManagerImpl::GetInstance()->IsDriverBugWorkaroundActive( 234 GpuDataManagerImpl::GetInstance()->IsDriverBugWorkaroundActive(
233 gpu::DISABLE_OVERLAY_CA_LAYERS); 235 gpu::DISABLE_OVERLAY_CA_LAYERS);
234 validator.reset( 236 validator.reset(
235 new BrowserCompositorOverlayCandidateValidatorMac(ca_layers_disabled)); 237 new display_compositor::CompositorOverlayCandidateValidatorMac(
238 ca_layers_disabled));
236 } 239 }
237 #elif defined(OS_ANDROID) 240 #elif defined(OS_ANDROID)
238 validator.reset(new BrowserCompositorOverlayCandidateValidatorAndroid()); 241 validator.reset(
242 new display_compositor::CompositorOverlayCandidateValidatorAndroid());
239 #endif 243 #endif
240 244
241 return validator; 245 return validator;
242 } 246 }
243 247
244 static bool ShouldCreateGpuOutputSurface(ui::Compositor* compositor) { 248 static bool ShouldCreateGpuOutputSurface(ui::Compositor* compositor) {
245 #if defined(MOJO_RUNNER_CLIENT) 249 #if defined(MOJO_RUNNER_CLIENT)
246 // Chrome running as a mojo app currently can only use software compositing. 250 // Chrome running as a mojo app currently can only use software compositing.
247 // TODO(rjkroege): http://crbug.com/548451 251 // TODO(rjkroege): http://crbug.com/548451
248 if (IsRunningInMojoShell()) { 252 if (IsRunningInMojoShell()) {
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 surface = base::WrapUnique(new SoftwareBrowserCompositorOutputSurface( 424 surface = base::WrapUnique(new SoftwareBrowserCompositorOutputSurface(
421 CreateSoftwareOutputDevice(compositor.get()), 425 CreateSoftwareOutputDevice(compositor.get()),
422 compositor->vsync_manager(), compositor->task_runner().get())); 426 compositor->vsync_manager(), compositor->task_runner().get()));
423 } else { 427 } else {
424 DCHECK(context_provider); 428 DCHECK(context_provider);
425 const auto& capabilities = context_provider->ContextCapabilities(); 429 const auto& capabilities = context_provider->ContextCapabilities();
426 if (data->surface_handle == gpu::kNullSurfaceHandle) { 430 if (data->surface_handle == gpu::kNullSurfaceHandle) {
427 surface = base::WrapUnique(new OffscreenBrowserCompositorOutputSurface( 431 surface = base::WrapUnique(new OffscreenBrowserCompositorOutputSurface(
428 context_provider, shared_worker_context_provider_, 432 context_provider, shared_worker_context_provider_,
429 compositor->vsync_manager(), compositor->task_runner().get(), 433 compositor->vsync_manager(), compositor->task_runner().get(),
430 std::unique_ptr<BrowserCompositorOverlayCandidateValidator>())); 434 std::unique_ptr<
435 display_compositor::CompositorOverlayCandidateValidator>()));
431 } else if (capabilities.surfaceless) { 436 } else if (capabilities.surfaceless) {
432 GLenum target = GL_TEXTURE_2D; 437 GLenum target = GL_TEXTURE_2D;
433 GLenum format = GL_RGB; 438 GLenum format = GL_RGB;
434 #if defined(OS_MACOSX) 439 #if defined(OS_MACOSX)
435 target = GL_TEXTURE_RECTANGLE_ARB; 440 target = GL_TEXTURE_RECTANGLE_ARB;
436 format = GL_RGBA; 441 format = GL_RGBA;
437 #endif 442 #endif
438 surface = 443 surface =
439 base::WrapUnique(new GpuSurfacelessBrowserCompositorOutputSurface( 444 base::WrapUnique(new GpuSurfacelessBrowserCompositorOutputSurface(
440 context_provider, shared_worker_context_provider_, 445 context_provider, shared_worker_context_provider_,
441 data->surface_handle, compositor->vsync_manager(), 446 data->surface_handle, compositor->vsync_manager(),
442 compositor->task_runner().get(), 447 compositor->task_runner().get(),
443 CreateOverlayCandidateValidator(compositor->widget()), target, 448 CreateOverlayCandidateValidator(compositor->widget()), target,
444 format, BrowserGpuMemoryBufferManager::current())); 449 format, BrowserGpuMemoryBufferManager::current()));
445 } else { 450 } else {
446 std::unique_ptr<BrowserCompositorOverlayCandidateValidator> validator; 451 std::unique_ptr<display_compositor::CompositorOverlayCandidateValidator>
452 validator;
447 #if !defined(OS_MACOSX) 453 #if !defined(OS_MACOSX)
448 // Overlays are only supported on surfaceless output surfaces on Mac. 454 // Overlays are only supported on surfaceless output surfaces on Mac.
449 validator = CreateOverlayCandidateValidator(compositor->widget()); 455 validator = CreateOverlayCandidateValidator(compositor->widget());
450 #endif 456 #endif
451 surface = base::WrapUnique(new GpuBrowserCompositorOutputSurface( 457 surface = base::WrapUnique(new GpuBrowserCompositorOutputSurface(
452 context_provider, shared_worker_context_provider_, 458 context_provider, shared_worker_context_provider_,
453 compositor->vsync_manager(), compositor->task_runner().get(), 459 compositor->vsync_manager(), compositor->task_runner().get(),
454 std::move(validator))); 460 std::move(validator)));
455 } 461 }
456 } 462 }
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
758 shared_vulkan_context_provider_ = 764 shared_vulkan_context_provider_ =
759 cc::VulkanInProcessContextProvider::Create(); 765 cc::VulkanInProcessContextProvider::Create();
760 } 766 }
761 767
762 shared_vulkan_context_provider_initialized_ = true; 768 shared_vulkan_context_provider_initialized_ = true;
763 } 769 }
764 return shared_vulkan_context_provider_; 770 return shared_vulkan_context_provider_;
765 } 771 }
766 772
767 } // namespace content 773 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698