#ifdef UNSAFE_BUFFERS_BUILD
#pragma allow_unsafe_buffers
#endif
#include "content/browser/compositor/viz_process_transport_factory.h"
#include <utility>
#include <vector>
#include "base/command_line.h"
#include "base/debug/dump_without_crashing.h"
#include "base/functional/bind.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/scoped_refptr.h"
#include "base/metrics/histogram_macros.h"
#include "base/task/single_thread_task_runner.h"
#include "base/time/time.h"
#include "build/build_config.h"
#include "build/chromeos_buildflags.h"
#include "cc/mojo_embedder/async_layer_tree_frame_sink.h"
#include "cc/raster/single_thread_task_graph_runner.h"
#include "cc/tiles/image_decode_cache_utils.h"
#include "cc/trees/raster_context_provider_wrapper.h"
#include "components/viz/common/features.h"
#include "components/viz/common/gpu/raster_context_provider.h"
#include "components/viz/common/switches.h"
#include "components/viz/host/compositing_mode_reporter_impl.h"
#include "components/viz/host/gpu_host_impl.h"
#include "components/viz/host/host_display_client.h"
#include "components/viz/host/host_frame_sink_manager.h"
#include "components/viz/host/renderer_settings_creation.h"
#include "content/browser/browser_main_loop.h"
#include "content/browser/gpu/compositor_util.h"
#include "content/browser/gpu/gpu_data_manager_impl.h"
#include "content/browser/gpu/gpu_process_host.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/common/content_client.h"
#include "content/public/common/content_features.h"
#include "content/public/common/content_switches.h"
#include "content/public/common/gpu_stream_constants.h"
#include "gpu/command_buffer/client/raster_interface.h"
#include "gpu/ipc/client/gpu_channel_host.h"
#include "media/base/media_switches.h"
#include "mojo/public/cpp/bindings/associated_remote.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "services/viz/privileged/mojom/compositing/display_private.mojom.h"
#include "services/viz/privileged/mojom/compositing/external_begin_frame_controller.mojom.h"
#include "services/viz/public/cpp/gpu/context_provider_command_buffer.h"
#include "ui/base/ozone_buildflags.h"
#include "ui/base/ui_base_features.h"
#if BUILDFLAG(IS_WIN)
#include "ui/gfx/win/rendering_window_manager.h"
#endif
namespace content {
namespace {
constexpr uint32_t kBrowserClientId = …;
scoped_refptr<viz::ContextProviderCommandBuffer> CreateContextProvider(
scoped_refptr<gpu::GpuChannelHost> gpu_channel_host,
bool supports_locking,
bool supports_gpu_rasterization,
viz::command_buffer_metrics::ContextType type) { … }
bool IsContextLost(viz::RasterContextProvider* context_provider) { … }
bool IsWorkerContextLost(viz::RasterContextProvider* context_provider) { … }
class HostDisplayClient : public viz::HostDisplayClient { … };
}
VizProcessTransportFactory::VizProcessTransportFactory(
gpu::GpuChannelEstablishFactory* gpu_channel_establish_factory,
scoped_refptr<base::SingleThreadTaskRunner> resize_task_runner,
viz::CompositingModeReporterImpl* compositing_mode_reporter)
: … { … }
VizProcessTransportFactory::~VizProcessTransportFactory() { … }
void VizProcessTransportFactory::ConnectHostFrameSinkManager() { … }
void VizProcessTransportFactory::CreateLayerTreeFrameSink(
base::WeakPtr<ui::Compositor> compositor) { … }
scoped_refptr<viz::RasterContextProvider>
VizProcessTransportFactory::SharedMainThreadRasterContextProvider() { … }
void VizProcessTransportFactory::RemoveCompositor(ui::Compositor* compositor) { … }
gpu::GpuMemoryBufferManager*
VizProcessTransportFactory::GetGpuMemoryBufferManager() { … }
cc::TaskGraphRunner* VizProcessTransportFactory::GetTaskGraphRunner() { … }
viz::FrameSinkId VizProcessTransportFactory::AllocateFrameSinkId() { … }
viz::SubtreeCaptureId VizProcessTransportFactory::AllocateSubtreeCaptureId() { … }
viz::HostFrameSinkManager*
VizProcessTransportFactory::GetHostFrameSinkManager() { … }
void VizProcessTransportFactory::DisableGpuCompositing() { … }
ui::ContextFactory* VizProcessTransportFactory::GetContextFactory() { … }
void VizProcessTransportFactory::DisableGpuCompositing(
ui::Compositor* guilty_compositor) { … }
void VizProcessTransportFactory::OnGpuProcessLost() { … }
void VizProcessTransportFactory::OnEstablishedGpuChannel(
base::WeakPtr<ui::Compositor> compositor_weak_ptr,
scoped_refptr<gpu::GpuChannelHost> gpu_channel_host) { … }
gpu::ContextResult
VizProcessTransportFactory::TryCreateContextsForGpuCompositing(
scoped_refptr<gpu::GpuChannelHost> gpu_channel_host) { … }
VizProcessTransportFactory::CompositorData::CompositorData() = default;
VizProcessTransportFactory::CompositorData::CompositorData(
CompositorData&& other) = default;
VizProcessTransportFactory::CompositorData&
VizProcessTransportFactory::CompositorData::operator=(CompositorData&& other) =
default;
VizProcessTransportFactory::CompositorData::~CompositorData() = default;
}