| OLD | NEW |
| 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" |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 #include "services/service_manager/runner/common/client_util.h" | 52 #include "services/service_manager/runner/common/client_util.h" |
| 53 #include "services/ui/public/cpp/gpu/context_provider_command_buffer.h" | 53 #include "services/ui/public/cpp/gpu/context_provider_command_buffer.h" |
| 54 #include "third_party/khronos/GLES2/gl2.h" | 54 #include "third_party/khronos/GLES2/gl2.h" |
| 55 #include "ui/compositor/compositor.h" | 55 #include "ui/compositor/compositor.h" |
| 56 #include "ui/compositor/compositor_constants.h" | 56 #include "ui/compositor/compositor_constants.h" |
| 57 #include "ui/compositor/compositor_switches.h" | 57 #include "ui/compositor/compositor_switches.h" |
| 58 #include "ui/compositor/layer.h" | 58 #include "ui/compositor/layer.h" |
| 59 #include "ui/display/types/display_snapshot.h" | 59 #include "ui/display/types/display_snapshot.h" |
| 60 #include "ui/gfx/geometry/size.h" | 60 #include "ui/gfx/geometry/size.h" |
| 61 #include "ui/gfx/switches.h" | 61 #include "ui/gfx/switches.h" |
| 62 #include "ui/gl/gl_switches.h" | |
| 63 | 62 |
| 64 #if defined(USE_AURA) | 63 #if defined(USE_AURA) |
| 65 #include "content/public/common/service_manager_connection.h" | 64 #include "content/public/common/service_manager_connection.h" |
| 66 #include "ui/aura/window_tree_host.h" | 65 #include "ui/aura/window_tree_host.h" |
| 67 #endif | 66 #endif |
| 68 | 67 |
| 69 #if defined(OS_WIN) | 68 #if defined(OS_WIN) |
| 70 #include "base/win/windows_version.h" | |
| 71 #include "components/display_compositor/compositor_overlay_candidate_validator_w
in.h" | 69 #include "components/display_compositor/compositor_overlay_candidate_validator_w
in.h" |
| 72 #include "content/browser/compositor/software_output_device_win.h" | 70 #include "content/browser/compositor/software_output_device_win.h" |
| 73 #include "ui/gfx/win/rendering_window_manager.h" | 71 #include "ui/gfx/win/rendering_window_manager.h" |
| 74 #elif defined(USE_OZONE) | 72 #elif defined(USE_OZONE) |
| 75 #include "components/display_compositor/compositor_overlay_candidate_validator_o
zone.h" | 73 #include "components/display_compositor/compositor_overlay_candidate_validator_o
zone.h" |
| 76 #include "content/browser/compositor/software_output_device_ozone.h" | 74 #include "content/browser/compositor/software_output_device_ozone.h" |
| 77 #include "ui/ozone/public/overlay_candidates_ozone.h" | 75 #include "ui/ozone/public/overlay_candidates_ozone.h" |
| 78 #include "ui/ozone/public/overlay_manager_ozone.h" | 76 #include "ui/ozone/public/overlay_manager_ozone.h" |
| 79 #include "ui/ozone/public/ozone_platform.h" | 77 #include "ui/ozone/public/ozone_platform.h" |
| 80 #include "ui/ozone/public/ozone_switches.h" | 78 #include "ui/ozone/public/ozone_switches.h" |
| (...skipping 21 matching lines...) Expand all Loading... |
| 102 using cc::ContextProvider; | 100 using cc::ContextProvider; |
| 103 using gpu::gles2::GLES2Interface; | 101 using gpu::gles2::GLES2Interface; |
| 104 | 102 |
| 105 namespace { | 103 namespace { |
| 106 | 104 |
| 107 const int kNumRetriesBeforeSoftwareFallback = 4; | 105 const int kNumRetriesBeforeSoftwareFallback = 4; |
| 108 // The client_id used here should not conflict with the client_id generated | 106 // The client_id used here should not conflict with the client_id generated |
| 109 // from RenderWidgetHostImpl. | 107 // from RenderWidgetHostImpl. |
| 110 constexpr uint32_t kDefaultClientId = 0u; | 108 constexpr uint32_t kDefaultClientId = 0u; |
| 111 | 109 |
| 112 bool IsGpuVSyncSignalSupported() { | |
| 113 #if defined(OS_WIN) | |
| 114 // TODO(stanisc): http://crbug.com/467617 Limit to Windows 8+ for now because | |
| 115 // of locking issue caused by waiting for VSync on Win7. | |
| 116 return base::win::GetVersion() >= base::win::VERSION_WIN8 && | |
| 117 base::FeatureList::IsEnabled(features::kD3DVsync); | |
| 118 #else | |
| 119 return false; | |
| 120 #endif // defined(OS_WIN) | |
| 121 } | |
| 122 | |
| 123 scoped_refptr<ui::ContextProviderCommandBuffer> CreateContextCommon( | 110 scoped_refptr<ui::ContextProviderCommandBuffer> CreateContextCommon( |
| 124 scoped_refptr<gpu::GpuChannelHost> gpu_channel_host, | 111 scoped_refptr<gpu::GpuChannelHost> gpu_channel_host, |
| 125 gpu::SurfaceHandle surface_handle, | 112 gpu::SurfaceHandle surface_handle, |
| 126 bool need_alpha_channel, | 113 bool need_alpha_channel, |
| 127 bool need_stencil_bits, | 114 bool need_stencil_bits, |
| 128 bool support_locking, | 115 bool support_locking, |
| 129 ui::ContextProviderCommandBuffer* shared_context_provider, | 116 ui::ContextProviderCommandBuffer* shared_context_provider, |
| 130 ui::command_buffer_metrics::ContextType type) { | 117 ui::command_buffer_metrics::ContextType type) { |
| 131 DCHECK( | 118 DCHECK( |
| 132 content::GpuDataManagerImpl::GetInstance()->CanUseGpuBrowserCompositor()); | 119 content::GpuDataManagerImpl::GetInstance()->CanUseGpuBrowserCompositor()); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 173 } | 160 } |
| 174 #endif | 161 #endif |
| 175 | 162 |
| 176 } // namespace | 163 } // namespace |
| 177 | 164 |
| 178 namespace content { | 165 namespace content { |
| 179 | 166 |
| 180 struct GpuProcessTransportFactory::PerCompositorData { | 167 struct GpuProcessTransportFactory::PerCompositorData { |
| 181 gpu::SurfaceHandle surface_handle = gpu::kNullSurfaceHandle; | 168 gpu::SurfaceHandle surface_handle = gpu::kNullSurfaceHandle; |
| 182 BrowserCompositorOutputSurface* display_output_surface = nullptr; | 169 BrowserCompositorOutputSurface* display_output_surface = nullptr; |
| 183 // Either |synthetic_begin_frame_source| or |gpu_vsync_begin_frame_source| is | 170 std::unique_ptr<cc::SyntheticBeginFrameSource> begin_frame_source; |
| 184 // valid but not both at the same time. | |
| 185 std::unique_ptr<cc::SyntheticBeginFrameSource> synthetic_begin_frame_source; | |
| 186 std::unique_ptr<GpuVSyncBeginFrameSource> gpu_vsync_begin_frame_source; | |
| 187 ReflectorImpl* reflector = nullptr; | 171 ReflectorImpl* reflector = nullptr; |
| 188 std::unique_ptr<cc::Display> display; | 172 std::unique_ptr<cc::Display> display; |
| 189 bool output_is_secure = false; | 173 bool output_is_secure = false; |
| 190 }; | 174 }; |
| 191 | 175 |
| 192 GpuProcessTransportFactory::GpuProcessTransportFactory() | 176 GpuProcessTransportFactory::GpuProcessTransportFactory() |
| 193 : frame_sink_id_allocator_(kDefaultClientId), | 177 : frame_sink_id_allocator_(kDefaultClientId), |
| 194 task_graph_runner_(new cc::SingleThreadTaskGraphRunner), | 178 task_graph_runner_(new cc::SingleThreadTaskGraphRunner), |
| 195 callback_factory_(this) { | 179 callback_factory_(this) { |
| 196 cc::SetClientNameForMetrics("Browser"); | 180 cc::SetClientNameForMetrics("Browser"); |
| (...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 462 gpu::GpuChannelEstablishedCallback callback( | 446 gpu::GpuChannelEstablishedCallback callback( |
| 463 base::Bind(&GpuProcessTransportFactory::EstablishedGpuChannel, | 447 base::Bind(&GpuProcessTransportFactory::EstablishedGpuChannel, |
| 464 callback_factory_.GetWeakPtr(), compositor, | 448 callback_factory_.GetWeakPtr(), compositor, |
| 465 create_gpu_output_surface, num_attempts + 1)); | 449 create_gpu_output_surface, num_attempts + 1)); |
| 466 DCHECK(gpu_channel_factory_); | 450 DCHECK(gpu_channel_factory_); |
| 467 gpu_channel_factory_->EstablishGpuChannel(callback); | 451 gpu_channel_factory_->EstablishGpuChannel(callback); |
| 468 return; | 452 return; |
| 469 } | 453 } |
| 470 } | 454 } |
| 471 | 455 |
| 456 std::unique_ptr<cc::SyntheticBeginFrameSource> synthetic_begin_frame_source; |
| 457 if (!compositor->GetRendererSettings().disable_display_vsync) { |
| 458 synthetic_begin_frame_source.reset(new cc::DelayBasedBeginFrameSource( |
| 459 base::MakeUnique<cc::DelayBasedTimeSource>( |
| 460 compositor->task_runner().get()))); |
| 461 } else { |
| 462 synthetic_begin_frame_source.reset(new cc::BackToBackBeginFrameSource( |
| 463 base::MakeUnique<cc::DelayBasedTimeSource>( |
| 464 compositor->task_runner().get()))); |
| 465 } |
| 466 cc::BeginFrameSource* begin_frame_source = synthetic_begin_frame_source.get(); |
| 467 |
| 472 BrowserCompositorOutputSurface::UpdateVSyncParametersCallback vsync_callback = | 468 BrowserCompositorOutputSurface::UpdateVSyncParametersCallback vsync_callback = |
| 473 base::Bind(&ui::Compositor::SetDisplayVSyncParameters, compositor); | 469 base::Bind(&ui::Compositor::SetDisplayVSyncParameters, compositor); |
| 474 cc::BeginFrameSource* begin_frame_source = nullptr; | |
| 475 GpuVSyncControl* gpu_vsync_control = nullptr; | |
| 476 | 470 |
| 477 std::unique_ptr<BrowserCompositorOutputSurface> display_output_surface; | 471 std::unique_ptr<BrowserCompositorOutputSurface> display_output_surface; |
| 478 #if BUILDFLAG(ENABLE_VULKAN) | 472 #if BUILDFLAG(ENABLE_VULKAN) |
| 479 std::unique_ptr<VulkanBrowserCompositorOutputSurface> vulkan_surface; | 473 std::unique_ptr<VulkanBrowserCompositorOutputSurface> vulkan_surface; |
| 480 if (vulkan_context_provider) { | 474 if (vulkan_context_provider) { |
| 481 vulkan_surface.reset(new VulkanBrowserCompositorOutputSurface( | 475 vulkan_surface.reset(new VulkanBrowserCompositorOutputSurface( |
| 482 vulkan_context_provider, vsync_callback)); | 476 vulkan_context_provider, vsync_callback)); |
| 483 if (!vulkan_surface->Initialize(compositor.get()->widget())) { | 477 if (!vulkan_surface->Initialize(compositor.get()->widget())) { |
| 484 vulkan_surface->Destroy(); | 478 vulkan_surface->Destroy(); |
| 485 vulkan_surface.reset(); | 479 vulkan_surface.reset(); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 505 std::unique_ptr< | 499 std::unique_ptr< |
| 506 display_compositor::CompositorOverlayCandidateValidator>()); | 500 display_compositor::CompositorOverlayCandidateValidator>()); |
| 507 } else if (capabilities.surfaceless) { | 501 } else if (capabilities.surfaceless) { |
| 508 #if defined(OS_MACOSX) | 502 #if defined(OS_MACOSX) |
| 509 display_output_surface = base::MakeUnique<GpuOutputSurfaceMac>( | 503 display_output_surface = base::MakeUnique<GpuOutputSurfaceMac>( |
| 510 compositor->widget(), context_provider, data->surface_handle, | 504 compositor->widget(), context_provider, data->surface_handle, |
| 511 vsync_callback, | 505 vsync_callback, |
| 512 CreateOverlayCandidateValidator(compositor->widget()), | 506 CreateOverlayCandidateValidator(compositor->widget()), |
| 513 GetGpuMemoryBufferManager()); | 507 GetGpuMemoryBufferManager()); |
| 514 #else | 508 #else |
| 515 auto gpu_output_surface = | 509 display_output_surface = |
| 516 base::MakeUnique<GpuSurfacelessBrowserCompositorOutputSurface>( | 510 base::MakeUnique<GpuSurfacelessBrowserCompositorOutputSurface>( |
| 517 context_provider, data->surface_handle, vsync_callback, | 511 context_provider, data->surface_handle, vsync_callback, |
| 518 CreateOverlayCandidateValidator(compositor->widget()), | 512 CreateOverlayCandidateValidator(compositor->widget()), |
| 519 GL_TEXTURE_2D, GL_RGB, | 513 GL_TEXTURE_2D, GL_RGB, |
| 520 display::DisplaySnapshot::PrimaryFormat(), | 514 display::DisplaySnapshot::PrimaryFormat(), |
| 521 GetGpuMemoryBufferManager()); | 515 GetGpuMemoryBufferManager()); |
| 522 gpu_vsync_control = gpu_output_surface.get(); | |
| 523 display_output_surface = std::move(gpu_output_surface); | |
| 524 #endif | 516 #endif |
| 525 } else { | 517 } else { |
| 526 std::unique_ptr<display_compositor::CompositorOverlayCandidateValidator> | 518 std::unique_ptr<display_compositor::CompositorOverlayCandidateValidator> |
| 527 validator; | 519 validator; |
| 528 #if defined(OS_WIN) | 520 #if defined(OS_WIN) |
| 529 if (capabilities.dc_layers) | 521 if (capabilities.dc_layers) |
| 530 validator = CreateOverlayCandidateValidator(compositor->widget()); | 522 validator = CreateOverlayCandidateValidator(compositor->widget()); |
| 531 #elif !defined(OS_MACOSX) | 523 #elif !defined(OS_MACOSX) |
| 532 // Overlays are only supported on surfaceless output surfaces on Mac. | 524 // Overlays are only supported on surfaceless output surfaces on Mac. |
| 533 validator = CreateOverlayCandidateValidator(compositor->widget()); | 525 validator = CreateOverlayCandidateValidator(compositor->widget()); |
| 534 #endif | 526 #endif |
| 535 auto gpu_output_surface = | 527 display_output_surface = |
| 536 base::MakeUnique<GpuBrowserCompositorOutputSurface>( | 528 base::MakeUnique<GpuBrowserCompositorOutputSurface>( |
| 537 context_provider, vsync_callback, std::move(validator)); | 529 context_provider, vsync_callback, std::move(validator)); |
| 538 gpu_vsync_control = gpu_output_surface.get(); | |
| 539 display_output_surface = std::move(gpu_output_surface); | |
| 540 } | 530 } |
| 541 } | 531 } |
| 542 } | 532 } |
| 543 | 533 |
| 544 data->display_output_surface = display_output_surface.get(); | 534 data->display_output_surface = display_output_surface.get(); |
| 545 if (data->reflector) | 535 if (data->reflector) |
| 546 data->reflector->OnSourceSurfaceReady(data->display_output_surface); | 536 data->reflector->OnSourceSurfaceReady(data->display_output_surface); |
| 547 | 537 |
| 548 std::unique_ptr<cc::SyntheticBeginFrameSource> synthetic_begin_frame_source; | |
| 549 std::unique_ptr<GpuVSyncBeginFrameSource> gpu_vsync_begin_frame_source; | |
| 550 | |
| 551 if (!begin_frame_source) { | |
| 552 if (!compositor->GetRendererSettings().disable_display_vsync) { | |
| 553 if (gpu_vsync_control && IsGpuVSyncSignalSupported()) { | |
| 554 gpu_vsync_begin_frame_source = | |
| 555 base::MakeUnique<GpuVSyncBeginFrameSource>(gpu_vsync_control); | |
| 556 begin_frame_source = gpu_vsync_begin_frame_source.get(); | |
| 557 } else { | |
| 558 synthetic_begin_frame_source = | |
| 559 base::MakeUnique<cc::DelayBasedBeginFrameSource>( | |
| 560 base::MakeUnique<cc::DelayBasedTimeSource>( | |
| 561 compositor->task_runner().get())); | |
| 562 begin_frame_source = synthetic_begin_frame_source.get(); | |
| 563 } | |
| 564 } else { | |
| 565 synthetic_begin_frame_source = | |
| 566 base::MakeUnique<cc::BackToBackBeginFrameSource>( | |
| 567 base::MakeUnique<cc::DelayBasedTimeSource>( | |
| 568 compositor->task_runner().get())); | |
| 569 begin_frame_source = synthetic_begin_frame_source.get(); | |
| 570 } | |
| 571 } | |
| 572 | |
| 573 #if defined(OS_WIN) | 538 #if defined(OS_WIN) |
| 574 gfx::RenderingWindowManager::GetInstance()->DoSetParentOnChild( | 539 gfx::RenderingWindowManager::GetInstance()->DoSetParentOnChild( |
| 575 compositor->widget()); | 540 compositor->widget()); |
| 576 #endif | 541 #endif |
| 577 | 542 |
| 578 std::unique_ptr<cc::DisplayScheduler> scheduler(new cc::DisplayScheduler( | 543 std::unique_ptr<cc::DisplayScheduler> scheduler(new cc::DisplayScheduler( |
| 579 compositor->task_runner().get(), | 544 compositor->task_runner().get(), |
| 580 display_output_surface->capabilities().max_frames_pending)); | 545 display_output_surface->capabilities().max_frames_pending)); |
| 581 | 546 |
| 582 // The Display owns and uses the |display_output_surface| created above. | 547 // The Display owns and uses the |display_output_surface| created above. |
| 583 data->display = base::MakeUnique<cc::Display>( | 548 data->display = base::MakeUnique<cc::Display>( |
| 584 HostSharedBitmapManager::current(), GetGpuMemoryBufferManager(), | 549 HostSharedBitmapManager::current(), GetGpuMemoryBufferManager(), |
| 585 compositor->GetRendererSettings(), compositor->frame_sink_id(), | 550 compositor->GetRendererSettings(), compositor->frame_sink_id(), |
| 586 begin_frame_source, std::move(display_output_surface), | 551 begin_frame_source, std::move(display_output_surface), |
| 587 std::move(scheduler), base::MakeUnique<cc::TextureMailboxDeleter>( | 552 std::move(scheduler), base::MakeUnique<cc::TextureMailboxDeleter>( |
| 588 compositor->task_runner().get())); | 553 compositor->task_runner().get())); |
| 589 // Note that we are careful not to destroy prior BeginFrameSource objects | 554 // Note that we are careful not to destroy a prior |data->begin_frame_source| |
| 590 // until we have reset |data->display|. | 555 // until we have reset |data->display|. |
| 591 data->synthetic_begin_frame_source = std::move(synthetic_begin_frame_source); | 556 data->begin_frame_source = std::move(synthetic_begin_frame_source); |
| 592 data->gpu_vsync_begin_frame_source = std::move(gpu_vsync_begin_frame_source); | |
| 593 | 557 |
| 594 // The |delegated_output_surface| is given back to the compositor, it | 558 // The |delegated_output_surface| is given back to the compositor, it |
| 595 // delegates to the Display as its root surface. Importantly, it shares the | 559 // delegates to the Display as its root surface. Importantly, it shares the |
| 596 // same ContextProvider as the Display's output surface. | 560 // same ContextProvider as the Display's output surface. |
| 597 auto compositor_frame_sink = | 561 auto compositor_frame_sink = |
| 598 vulkan_context_provider | 562 vulkan_context_provider |
| 599 ? base::MakeUnique<cc::DirectCompositorFrameSink>( | 563 ? base::MakeUnique<cc::DirectCompositorFrameSink>( |
| 600 compositor->frame_sink_id(), surface_manager_.get(), | 564 compositor->frame_sink_id(), surface_manager_.get(), |
| 601 data->display.get(), | 565 data->display.get(), |
| 602 static_cast<scoped_refptr<cc::VulkanContextProvider>>( | 566 static_cast<scoped_refptr<cc::VulkanContextProvider>>( |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 741 } | 705 } |
| 742 | 706 |
| 743 void GpuProcessTransportFactory::SetAuthoritativeVSyncInterval( | 707 void GpuProcessTransportFactory::SetAuthoritativeVSyncInterval( |
| 744 ui::Compositor* compositor, | 708 ui::Compositor* compositor, |
| 745 base::TimeDelta interval) { | 709 base::TimeDelta interval) { |
| 746 PerCompositorDataMap::iterator it = per_compositor_data_.find(compositor); | 710 PerCompositorDataMap::iterator it = per_compositor_data_.find(compositor); |
| 747 if (it == per_compositor_data_.end()) | 711 if (it == per_compositor_data_.end()) |
| 748 return; | 712 return; |
| 749 PerCompositorData* data = it->second.get(); | 713 PerCompositorData* data = it->second.get(); |
| 750 DCHECK(data); | 714 DCHECK(data); |
| 751 if (data->synthetic_begin_frame_source) | 715 if (data->begin_frame_source) |
| 752 data->synthetic_begin_frame_source->SetAuthoritativeVSyncInterval(interval); | 716 data->begin_frame_source->SetAuthoritativeVSyncInterval(interval); |
| 753 } | 717 } |
| 754 | 718 |
| 755 void GpuProcessTransportFactory::SetDisplayVSyncParameters( | 719 void GpuProcessTransportFactory::SetDisplayVSyncParameters( |
| 756 ui::Compositor* compositor, | 720 ui::Compositor* compositor, |
| 757 base::TimeTicks timebase, | 721 base::TimeTicks timebase, |
| 758 base::TimeDelta interval) { | 722 base::TimeDelta interval) { |
| 759 PerCompositorDataMap::iterator it = per_compositor_data_.find(compositor); | 723 PerCompositorDataMap::iterator it = per_compositor_data_.find(compositor); |
| 760 if (it == per_compositor_data_.end()) | 724 if (it == per_compositor_data_.end()) |
| 761 return; | 725 return; |
| 762 PerCompositorData* data = it->second.get(); | 726 PerCompositorData* data = it->second.get(); |
| 763 DCHECK(data); | 727 DCHECK(data); |
| 764 if (data->synthetic_begin_frame_source) { | 728 if (data->begin_frame_source) |
| 765 data->synthetic_begin_frame_source->OnUpdateVSyncParameters(timebase, | 729 data->begin_frame_source->OnUpdateVSyncParameters(timebase, interval); |
| 766 interval); | |
| 767 } else if (data->gpu_vsync_begin_frame_source) { | |
| 768 data->gpu_vsync_begin_frame_source->OnVSync(timebase, interval); | |
| 769 } | |
| 770 } | 730 } |
| 771 | 731 |
| 772 void GpuProcessTransportFactory::SetOutputIsSecure(ui::Compositor* compositor, | 732 void GpuProcessTransportFactory::SetOutputIsSecure(ui::Compositor* compositor, |
| 773 bool secure) { | 733 bool secure) { |
| 774 PerCompositorDataMap::iterator it = per_compositor_data_.find(compositor); | 734 PerCompositorDataMap::iterator it = per_compositor_data_.find(compositor); |
| 775 if (it == per_compositor_data_.end()) | 735 if (it == per_compositor_data_.end()) |
| 776 return; | 736 return; |
| 777 PerCompositorData* data = it->second.get(); | 737 PerCompositorData* data = it->second.get(); |
| 778 DCHECK(data); | 738 DCHECK(data); |
| 779 data->output_is_secure = secure; | 739 data->output_is_secure = secure; |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 923 shared_vulkan_context_provider_ = | 883 shared_vulkan_context_provider_ = |
| 924 cc::VulkanInProcessContextProvider::Create(); | 884 cc::VulkanInProcessContextProvider::Create(); |
| 925 } | 885 } |
| 926 | 886 |
| 927 shared_vulkan_context_provider_initialized_ = true; | 887 shared_vulkan_context_provider_initialized_ = true; |
| 928 } | 888 } |
| 929 return shared_vulkan_context_provider_; | 889 return shared_vulkan_context_provider_; |
| 930 } | 890 } |
| 931 | 891 |
| 932 } // namespace content | 892 } // namespace content |
| OLD | NEW |