Commit 2abe2821 authored by Daniele Castagna's avatar Daniele Castagna Committed by Commit Bot

exo: Use SharedImages instead of GL images

This patch gets rid of GL dependencies in exo.
It replaces GL images creations, updates and deletions with SharedImages.
Copies between shared images and queries are now issued using
RasterInterface.

Test: ARC++ works with Playstore and Youtube
Change-Id: I1dda38fb2b4b93393f9f4a7d308a5c80a53c47e4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1527328Reviewed-by: default avatarkylechar <kylechar@chromium.org>
Reviewed-by: default avatarScott Violet <sky@chromium.org>
Reviewed-by: default avatarAntoine Labour <piman@chromium.org>
Reviewed-by: default avatarAndres Calderon Jaramillo <andrescj@chromium.org>
Commit-Queue: Daniele Castagna <dcastagna@chromium.org>
Auto-Submit: Daniele Castagna <dcastagna@chromium.org>
Cr-Commit-Position: refs/heads/master@{#644525}
parent 46889bc4
...@@ -59,7 +59,7 @@ source_set("exo") { ...@@ -59,7 +59,7 @@ source_set("exo") {
"//device/gamepad", "//device/gamepad",
"//device/gamepad/public/cpp:shared_with_blink", "//device/gamepad/public/cpp:shared_with_blink",
"//gpu", "//gpu",
"//gpu/command_buffer/client:gles2_interface", "//gpu/command_buffer/client:raster_interface",
"//services/ws/public/mojom", "//services/ws/public/mojom",
"//skia", "//skia",
"//ui/aura", "//ui/aura",
...@@ -184,7 +184,7 @@ source_set("unit_tests") { ...@@ -184,7 +184,7 @@ source_set("unit_tests") {
"//components/viz/service", "//components/viz/service",
"//components/viz/test:test_support", "//components/viz/test:test_support",
"//device/gamepad:test_helpers", "//device/gamepad:test_helpers",
"//gpu/command_buffer/client:gles2_interface", "//gpu/command_buffer/client:raster_interface",
"//skia", "//skia",
"//testing/gmock", "//testing/gmock",
"//testing/gtest", "//testing/gtest",
......
This diff is collapsed.
...@@ -14,9 +14,8 @@ ...@@ -14,9 +14,8 @@
#include "components/exo/test/exo_test_helper.h" #include "components/exo/test/exo_test_helper.h"
#include "components/viz/common/gpu/context_provider.h" #include "components/viz/common/gpu/context_provider.h"
#include "components/viz/common/resources/single_release_callback.h" #include "components/viz/common/resources/single_release_callback.h"
#include "gpu/command_buffer/client/gles2_interface.h" #include "gpu/command_buffer/client/raster_interface.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
#include "third_party/khronos/GLES2/gl2.h"
#include "ui/aura/env.h" #include "ui/aura/env.h"
#include "ui/compositor/compositor.h" #include "ui/compositor/compositor.h"
#include "ui/compositor/test/in_process_context_factory.h" #include "ui/compositor/test/in_process_context_factory.h"
...@@ -39,11 +38,12 @@ void VerifySyncTokensInCompositorFrame(viz::CompositorFrame* frame) { ...@@ -39,11 +38,12 @@ void VerifySyncTokensInCompositorFrame(viz::CompositorFrame* frame) {
std::vector<GLbyte*> sync_tokens; std::vector<GLbyte*> sync_tokens;
for (auto& resource : frame->resource_list) for (auto& resource : frame->resource_list)
sync_tokens.push_back(resource.mailbox_holder.sync_token.GetData()); sync_tokens.push_back(resource.mailbox_holder.sync_token.GetData());
gpu::gles2::GLES2Interface* gles2 = GetAuraEnv() gpu::raster::RasterInterface* ri =
GetAuraEnv()
->context_factory() ->context_factory()
->SharedMainThreadContextProvider() ->SharedMainThreadRasterContextProvider()
->ContextGL(); ->RasterInterface();
gles2->VerifySyncTokensCHROMIUM(sync_tokens.data(), sync_tokens.size()); ri->VerifySyncTokensCHROMIUM(sync_tokens.data(), sync_tokens.size());
} }
TEST_F(BufferTest, ReleaseCallback) { TEST_F(BufferTest, ReleaseCallback) {
...@@ -102,11 +102,11 @@ TEST_F(BufferTest, IsLost) { ...@@ -102,11 +102,11 @@ TEST_F(BufferTest, IsLost) {
frame_sink_holder->resource_manager(), false, &resource); frame_sink_holder->resource_manager(), false, &resource);
ASSERT_TRUE(rv); ASSERT_TRUE(rv);
scoped_refptr<viz::ContextProvider> context_provider = scoped_refptr<viz::RasterContextProvider> context_provider =
GetAuraEnv()->context_factory()->SharedMainThreadContextProvider(); GetAuraEnv()->context_factory()->SharedMainThreadRasterContextProvider();
if (context_provider) { if (context_provider) {
gpu::gles2::GLES2Interface* gles2 = context_provider->ContextGL(); gpu::raster::RasterInterface* ri = context_provider->RasterInterface();
gles2->LoseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, ri->LoseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB,
GL_INNOCENT_CONTEXT_RESET_ARB); GL_INNOCENT_CONTEXT_RESET_ARB);
} }
......
...@@ -877,7 +877,7 @@ GpuProcessTransportFactory::SharedMainThreadContextProvider() { ...@@ -877,7 +877,7 @@ GpuProcessTransportFactory::SharedMainThreadContextProvider() {
bool need_alpha_channel = false; bool need_alpha_channel = false;
bool support_locking = false; bool support_locking = false;
bool support_gles2_interface = true; bool support_gles2_interface = true;
bool support_raster_interface = false; bool support_raster_interface = true;
bool support_grcontext = true; bool support_grcontext = true;
shared_main_thread_contexts_ = CreateContextCommon( shared_main_thread_contexts_ = CreateContextCommon(
std::move(gpu_channel_host), gpu::kNullSurfaceHandle, need_alpha_channel, std::move(gpu_channel_host), gpu::kNullSurfaceHandle, need_alpha_channel,
...@@ -893,6 +893,14 @@ GpuProcessTransportFactory::SharedMainThreadContextProvider() { ...@@ -893,6 +893,14 @@ GpuProcessTransportFactory::SharedMainThreadContextProvider() {
return shared_main_thread_contexts_; return shared_main_thread_contexts_;
} }
scoped_refptr<viz::RasterContextProvider>
GpuProcessTransportFactory::SharedMainThreadRasterContextProvider() {
SharedMainThreadContextProvider();
DCHECK(!shared_main_thread_contexts_ ||
shared_main_thread_contexts_->RasterInterface());
return shared_main_thread_contexts_;
}
scoped_refptr<viz::RasterContextProvider> scoped_refptr<viz::RasterContextProvider>
GpuProcessTransportFactory::shared_worker_context_provider() { GpuProcessTransportFactory::shared_worker_context_provider() {
return shared_worker_context_provider_factory_.provider(); return shared_worker_context_provider_factory_.provider();
......
...@@ -70,6 +70,9 @@ class GpuProcessTransportFactory : public ui::ContextFactory, ...@@ -70,6 +70,9 @@ class GpuProcessTransportFactory : public ui::ContextFactory,
base::WeakPtr<ui::Compositor> compositor) override; base::WeakPtr<ui::Compositor> compositor) override;
scoped_refptr<viz::ContextProvider> SharedMainThreadContextProvider() scoped_refptr<viz::ContextProvider> SharedMainThreadContextProvider()
override; override;
scoped_refptr<viz::RasterContextProvider>
SharedMainThreadRasterContextProvider() override;
gpu::GpuMemoryBufferManager* GetGpuMemoryBufferManager() override; gpu::GpuMemoryBufferManager* GetGpuMemoryBufferManager() override;
cc::TaskGraphRunner* GetTaskGraphRunner() override; cc::TaskGraphRunner* GetTaskGraphRunner() override;
void AddObserver(ui::ContextFactoryObserver* observer) override; void AddObserver(ui::ContextFactoryObserver* observer) override;
......
...@@ -95,6 +95,12 @@ TestImageTransportFactory::SharedMainThreadContextProvider() { ...@@ -95,6 +95,12 @@ TestImageTransportFactory::SharedMainThreadContextProvider() {
return shared_main_context_provider_; return shared_main_context_provider_;
} }
scoped_refptr<viz::RasterContextProvider>
TestImageTransportFactory::SharedMainThreadRasterContextProvider() {
NOTIMPLEMENTED();
return nullptr;
}
gpu::GpuMemoryBufferManager* gpu::GpuMemoryBufferManager*
TestImageTransportFactory::GetGpuMemoryBufferManager() { TestImageTransportFactory::GetGpuMemoryBufferManager() {
return &gpu_memory_buffer_manager_; return &gpu_memory_buffer_manager_;
......
...@@ -47,6 +47,9 @@ class TestImageTransportFactory : public ui::ContextFactory, ...@@ -47,6 +47,9 @@ class TestImageTransportFactory : public ui::ContextFactory,
base::WeakPtr<ui::Compositor> compositor) override; base::WeakPtr<ui::Compositor> compositor) override;
scoped_refptr<viz::ContextProvider> SharedMainThreadContextProvider() scoped_refptr<viz::ContextProvider> SharedMainThreadContextProvider()
override; override;
scoped_refptr<viz::RasterContextProvider>
SharedMainThreadRasterContextProvider() override;
void RemoveCompositor(ui::Compositor* compositor) override {} void RemoveCompositor(ui::Compositor* compositor) override {}
gpu::GpuMemoryBufferManager* GetGpuMemoryBufferManager() override; gpu::GpuMemoryBufferManager* GetGpuMemoryBufferManager() override;
cc::TaskGraphRunner* GetTaskGraphRunner() override; cc::TaskGraphRunner* GetTaskGraphRunner() override;
......
...@@ -248,6 +248,13 @@ VizProcessTransportFactory::SharedMainThreadContextProvider() { ...@@ -248,6 +248,13 @@ VizProcessTransportFactory::SharedMainThreadContextProvider() {
return main_context_provider_; return main_context_provider_;
} }
scoped_refptr<viz::RasterContextProvider>
VizProcessTransportFactory::SharedMainThreadRasterContextProvider() {
SharedMainThreadContextProvider();
DCHECK(!main_context_provider_ || main_context_provider_->RasterInterface());
return main_context_provider_;
}
void VizProcessTransportFactory::RemoveCompositor(ui::Compositor* compositor) { void VizProcessTransportFactory::RemoveCompositor(ui::Compositor* compositor) {
context_factory_private_.UnconfigureCompositor(compositor); context_factory_private_.UnconfigureCompositor(compositor);
} }
...@@ -451,7 +458,7 @@ VizProcessTransportFactory::TryCreateContextsForGpuCompositing( ...@@ -451,7 +458,7 @@ VizProcessTransportFactory::TryCreateContextsForGpuCompositing(
if (!main_context_provider_) { if (!main_context_provider_) {
constexpr bool kCompositorContextSupportsLocking = false; constexpr bool kCompositorContextSupportsLocking = false;
constexpr bool kCompositorContextSupportsGLES2 = true; constexpr bool kCompositorContextSupportsGLES2 = true;
constexpr bool kCompositorContextSupportsRaster = false; constexpr bool kCompositorContextSupportsRaster = true;
constexpr bool kCompositorContextSupportsGrContext = true; constexpr bool kCompositorContextSupportsGrContext = true;
constexpr bool kCompositorContextSupportsOOPR = false; constexpr bool kCompositorContextSupportsOOPR = false;
......
...@@ -64,6 +64,9 @@ class VizProcessTransportFactory : public ui::ContextFactory, ...@@ -64,6 +64,9 @@ class VizProcessTransportFactory : public ui::ContextFactory,
base::WeakPtr<ui::Compositor> compositor) override; base::WeakPtr<ui::Compositor> compositor) override;
scoped_refptr<viz::ContextProvider> SharedMainThreadContextProvider() scoped_refptr<viz::ContextProvider> SharedMainThreadContextProvider()
override; override;
scoped_refptr<viz::RasterContextProvider>
SharedMainThreadRasterContextProvider() override;
void RemoveCompositor(ui::Compositor* compositor) override; void RemoveCompositor(ui::Compositor* compositor) override;
gpu::GpuMemoryBufferManager* GetGpuMemoryBufferManager() override; gpu::GpuMemoryBufferManager* GetGpuMemoryBufferManager() override;
cc::TaskGraphRunner* GetTaskGraphRunner() override; cc::TaskGraphRunner* GetTaskGraphRunner() override;
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "components/viz/common/gpu/raster_context_provider.h" #include "components/viz/common/gpu/raster_context_provider.h"
#include "components/viz/host/host_frame_sink_manager.h" #include "components/viz/host/host_frame_sink_manager.h"
#include "services/ws/ids.h" #include "services/ws/ids.h"
#include "services/ws/public/cpp/gpu/context_provider_command_buffer.h"
#include "services/ws/public/cpp/gpu/gpu.h" #include "services/ws/public/cpp/gpu/gpu.h"
#include "ui/compositor/host/host_context_factory_private.h" #include "ui/compositor/host/host_context_factory_private.h"
...@@ -37,7 +38,7 @@ void HostContextFactory::OnEstablishedGpuChannel( ...@@ -37,7 +38,7 @@ void HostContextFactory::OnEstablishedGpuChannel(
if (!compositor) if (!compositor)
return; return;
scoped_refptr<viz::ContextProvider> context_provider = scoped_refptr<ws::ContextProviderCommandBuffer> context_provider =
gpu_->CreateContextProvider(std::move(gpu_channel)); gpu_->CreateContextProvider(std::move(gpu_channel));
// If the binding fails, then we need to return early since the compositor // If the binding fails, then we need to return early since the compositor
// expects a successfully initialized/bound provider. // expects a successfully initialized/bound provider.
...@@ -70,6 +71,16 @@ HostContextFactory::SharedMainThreadContextProvider() { ...@@ -70,6 +71,16 @@ HostContextFactory::SharedMainThreadContextProvider() {
return shared_main_thread_context_provider_; return shared_main_thread_context_provider_;
} }
scoped_refptr<viz::RasterContextProvider>
HostContextFactory::SharedMainThreadRasterContextProvider() {
// Exo is currently the only client requesting this context provider.
// Exo does not request this context in the Window Service.
SharedMainThreadContextProvider();
DCHECK(!shared_main_thread_context_provider_ ||
shared_main_thread_context_provider_->RasterInterface());
return shared_main_thread_context_provider_;
}
void HostContextFactory::RemoveCompositor(ui::Compositor* compositor) { void HostContextFactory::RemoveCompositor(ui::Compositor* compositor) {
context_factory_private_->UnconfigureCompositor(compositor); context_factory_private_->UnconfigureCompositor(compositor);
} }
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "components/viz/common/display/renderer_settings.h" #include "components/viz/common/display/renderer_settings.h"
#include "components/viz/common/gpu/context_provider.h" #include "components/viz/common/gpu/context_provider.h"
#include "components/viz/common/gpu/raster_context_provider.h"
#include "services/ws/public/cpp/raster_thread_helper.h" #include "services/ws/public/cpp/raster_thread_helper.h"
#include "ui/compositor/compositor.h" #include "ui/compositor/compositor.h"
...@@ -27,6 +28,7 @@ class HostContextFactoryPrivate; ...@@ -27,6 +28,7 @@ class HostContextFactoryPrivate;
namespace ws { namespace ws {
class ContextProviderCommandBuffer;
class Gpu; class Gpu;
// ui::ContextFactory used when the WindowService is acting as the viz host. // ui::ContextFactory used when the WindowService is acting as the viz host.
...@@ -50,6 +52,8 @@ class HostContextFactory : public ui::ContextFactory { ...@@ -50,6 +52,8 @@ class HostContextFactory : public ui::ContextFactory {
base::WeakPtr<ui::Compositor> compositor) override; base::WeakPtr<ui::Compositor> compositor) override;
scoped_refptr<viz::ContextProvider> SharedMainThreadContextProvider() scoped_refptr<viz::ContextProvider> SharedMainThreadContextProvider()
override; override;
scoped_refptr<viz::RasterContextProvider>
SharedMainThreadRasterContextProvider() override;
void RemoveCompositor(ui::Compositor* compositor) override; void RemoveCompositor(ui::Compositor* compositor) override;
gpu::GpuMemoryBufferManager* GetGpuMemoryBufferManager() override; gpu::GpuMemoryBufferManager* GetGpuMemoryBufferManager() override;
cc::TaskGraphRunner* GetTaskGraphRunner() override; cc::TaskGraphRunner* GetTaskGraphRunner() override;
...@@ -59,7 +63,8 @@ class HostContextFactory : public ui::ContextFactory { ...@@ -59,7 +63,8 @@ class HostContextFactory : public ui::ContextFactory {
RasterThreadHelper raster_thread_helper_; RasterThreadHelper raster_thread_helper_;
Gpu* gpu_; Gpu* gpu_;
scoped_refptr<viz::ContextProvider> shared_main_thread_context_provider_; scoped_refptr<ws::ContextProviderCommandBuffer>
shared_main_thread_context_provider_;
std::unique_ptr<ui::HostContextFactoryPrivate> context_factory_private_; std::unique_ptr<ui::HostContextFactoryPrivate> context_factory_private_;
......
...@@ -276,7 +276,7 @@ std::unique_ptr<Gpu> Gpu::Create( ...@@ -276,7 +276,7 @@ std::unique_ptr<Gpu> Gpu::Create(
return base::WrapUnique(new Gpu(std::move(gpu_ptr), std::move(task_runner))); return base::WrapUnique(new Gpu(std::move(gpu_ptr), std::move(task_runner)));
} }
scoped_refptr<viz::ContextProvider> Gpu::CreateContextProvider( scoped_refptr<ws::ContextProviderCommandBuffer> Gpu::CreateContextProvider(
scoped_refptr<gpu::GpuChannelHost> gpu_channel) { scoped_refptr<gpu::GpuChannelHost> gpu_channel) {
int32_t stream_id = 0; int32_t stream_id = 0;
gpu::SchedulingPriority stream_priority = gpu::SchedulingPriority::kNormal; gpu::SchedulingPriority stream_priority = gpu::SchedulingPriority::kNormal;
...@@ -293,6 +293,7 @@ scoped_refptr<viz::ContextProvider> Gpu::CreateContextProvider( ...@@ -293,6 +293,7 @@ scoped_refptr<viz::ContextProvider> Gpu::CreateContextProvider(
attributes.sample_buffers = 0; attributes.sample_buffers = 0;
attributes.bind_generates_resource = false; attributes.bind_generates_resource = false;
attributes.lose_context_when_out_of_memory = true; attributes.lose_context_when_out_of_memory = true;
attributes.enable_raster_interface = true;
return base::MakeRefCounted<ContextProviderCommandBuffer>( return base::MakeRefCounted<ContextProviderCommandBuffer>(
std::move(gpu_channel), GetGpuMemoryBufferManager(), stream_id, std::move(gpu_channel), GetGpuMemoryBufferManager(), stream_id,
stream_priority, gpu::kNullSurfaceHandle, stream_priority, gpu::kNullSurfaceHandle,
......
...@@ -22,6 +22,8 @@ class Connector; ...@@ -22,6 +22,8 @@ class Connector;
namespace ws { namespace ws {
class ContextProviderCommandBuffer;
class Gpu : public gpu::GpuChannelEstablishFactory { class Gpu : public gpu::GpuChannelEstablishFactory {
public: public:
// The Gpu has to be initialized in the main thread before establishing // The Gpu has to be initialized in the main thread before establishing
...@@ -37,7 +39,7 @@ class Gpu : public gpu::GpuChannelEstablishFactory { ...@@ -37,7 +39,7 @@ class Gpu : public gpu::GpuChannelEstablishFactory {
return gpu_memory_buffer_manager_.get(); return gpu_memory_buffer_manager_.get();
} }
scoped_refptr<viz::ContextProvider> CreateContextProvider( scoped_refptr<ws::ContextProviderCommandBuffer> CreateContextProvider(
scoped_refptr<gpu::GpuChannelHost> gpu_channel); scoped_refptr<gpu::GpuChannelHost> gpu_channel);
void CreateJpegDecodeAccelerator( void CreateJpegDecodeAccelerator(
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include "components/viz/host/renderer_settings_creation.h" #include "components/viz/host/renderer_settings_creation.h"
#include "gpu/command_buffer/common/scheduling_priority.h" #include "gpu/command_buffer/common/scheduling_priority.h"
#include "services/ws/public/cpp/gpu/command_buffer_metrics.h" #include "services/ws/public/cpp/gpu/command_buffer_metrics.h"
#include "services/ws/public/cpp/gpu/context_provider_command_buffer.h"
#include "services/ws/public/cpp/gpu/gpu.h" #include "services/ws/public/cpp/gpu/gpu.h"
#include "services/ws/public/cpp/gpu/shared_worker_context_provider_factory.h" #include "services/ws/public/cpp/gpu/shared_worker_context_provider_factory.h"
#include "ui/aura/mus/window_port_mus.h" #include "ui/aura/mus/window_port_mus.h"
...@@ -49,7 +50,7 @@ void MusContextFactory::OnEstablishedGpuChannel( ...@@ -49,7 +50,7 @@ void MusContextFactory::OnEstablishedGpuChannel(
DCHECK_EQ(host->compositor(), compositor.get()); DCHECK_EQ(host->compositor(), compositor.get());
scoped_refptr<viz::ContextProvider> context_provider = scoped_refptr<ws::ContextProviderCommandBuffer> context_provider =
gpu_->CreateContextProvider(gpu_channel); gpu_->CreateContextProvider(gpu_channel);
// If the binding fails, then we need to return early since the compositor // If the binding fails, then we need to return early since the compositor
// expects a successfully initialized/bound provider. // expects a successfully initialized/bound provider.
...@@ -107,6 +108,14 @@ MusContextFactory::SharedMainThreadContextProvider() { ...@@ -107,6 +108,14 @@ MusContextFactory::SharedMainThreadContextProvider() {
return shared_main_thread_context_provider_; return shared_main_thread_context_provider_;
} }
scoped_refptr<viz::RasterContextProvider>
MusContextFactory::SharedMainThreadRasterContextProvider() {
// Exo is currently the only client requesting this context provider.
// Exo does not request this context in MUS.
NOTREACHED();
return nullptr;
}
void MusContextFactory::RemoveCompositor(ui::Compositor* compositor) { void MusContextFactory::RemoveCompositor(ui::Compositor* compositor) {
// NOTIMPLEMENTED(); // NOTIMPLEMENTED();
} }
......
...@@ -48,6 +48,10 @@ class AURA_EXPORT MusContextFactory : public ui::ContextFactory { ...@@ -48,6 +48,10 @@ class AURA_EXPORT MusContextFactory : public ui::ContextFactory {
base::WeakPtr<ui::Compositor> compositor) override; base::WeakPtr<ui::Compositor> compositor) override;
scoped_refptr<viz::ContextProvider> SharedMainThreadContextProvider() scoped_refptr<viz::ContextProvider> SharedMainThreadContextProvider()
override; override;
scoped_refptr<viz::RasterContextProvider>
SharedMainThreadRasterContextProvider() override;
void RemoveCompositor(ui::Compositor* compositor) override; void RemoveCompositor(ui::Compositor* compositor) override;
gpu::GpuMemoryBufferManager* GetGpuMemoryBufferManager() override; gpu::GpuMemoryBufferManager* GetGpuMemoryBufferManager() override;
cc::TaskGraphRunner* GetTaskGraphRunner() override; cc::TaskGraphRunner* GetTaskGraphRunner() override;
......
...@@ -67,6 +67,7 @@ namespace viz { ...@@ -67,6 +67,7 @@ namespace viz {
class FrameSinkManagerImpl; class FrameSinkManagerImpl;
class ContextProvider; class ContextProvider;
class HostFrameSinkManager; class HostFrameSinkManager;
class RasterContextProvider;
} }
namespace ui { namespace ui {
...@@ -86,10 +87,11 @@ class COMPOSITOR_EXPORT ContextFactoryObserver { ...@@ -86,10 +87,11 @@ class COMPOSITOR_EXPORT ContextFactoryObserver {
public: public:
virtual ~ContextFactoryObserver() {} virtual ~ContextFactoryObserver() {}
// Notifies that the viz::ContextProvider returned from // Notifies that the viz::ContextProviders returned from
// ui::ContextFactory::SharedMainThreadContextProvider was lost. When this // ui::ContextFactory::SharedMainThreadContextProvider and/or
// is called, the old resources (e.g. shared context, GL helper) still // ui::ContextFactory::SharedMainThreadRasterContextProvider were lost.
// exist, but are about to be destroyed. Getting a reference to those // When this is called, the old resources (e.g. shared context, GL helper)
// still exist, but are about to be destroyed. Getting a reference to those
// resources from the ContextFactory (e.g. through // resources from the ContextFactory (e.g. through
// SharedMainThreadContextProvider()) will return newly recreated, valid // SharedMainThreadContextProvider()) will return newly recreated, valid
// resources. // resources.
...@@ -177,6 +179,11 @@ class COMPOSITOR_EXPORT ContextFactory { ...@@ -177,6 +179,11 @@ class COMPOSITOR_EXPORT ContextFactory {
virtual scoped_refptr<viz::ContextProvider> virtual scoped_refptr<viz::ContextProvider>
SharedMainThreadContextProvider() = 0; SharedMainThreadContextProvider() = 0;
// Return a reference to a shared offscreen context provider usable from the
// main thread.
virtual scoped_refptr<viz::RasterContextProvider>
SharedMainThreadRasterContextProvider() = 0;
// Destroys per-compositor data. // Destroys per-compositor data.
virtual void RemoveCompositor(Compositor* compositor) = 0; virtual void RemoveCompositor(Compositor* compositor) = 0;
......
...@@ -51,6 +51,11 @@ FakeContextFactory::SharedMainThreadContextProvider() { ...@@ -51,6 +51,11 @@ FakeContextFactory::SharedMainThreadContextProvider() {
return nullptr; return nullptr;
} }
scoped_refptr<viz::RasterContextProvider>
FakeContextFactory::SharedMainThreadRasterContextProvider() {
return nullptr;
}
void FakeContextFactory::RemoveCompositor(ui::Compositor* compositor) { void FakeContextFactory::RemoveCompositor(ui::Compositor* compositor) {
frame_sink_ = nullptr; frame_sink_ = nullptr;
} }
......
...@@ -35,6 +35,8 @@ class FakeContextFactory : public ui::ContextFactory { ...@@ -35,6 +35,8 @@ class FakeContextFactory : public ui::ContextFactory {
base::WeakPtr<ui::Compositor> compositor) override; base::WeakPtr<ui::Compositor> compositor) override;
scoped_refptr<viz::ContextProvider> SharedMainThreadContextProvider() scoped_refptr<viz::ContextProvider> SharedMainThreadContextProvider()
override; override;
scoped_refptr<viz::RasterContextProvider>
SharedMainThreadRasterContextProvider() override;
void RemoveCompositor(ui::Compositor* compositor) override; void RemoveCompositor(ui::Compositor* compositor) override;
gpu::GpuMemoryBufferManager* GetGpuMemoryBufferManager() override; gpu::GpuMemoryBufferManager* GetGpuMemoryBufferManager() override;
cc::TaskGraphRunner* GetTaskGraphRunner() override; cc::TaskGraphRunner* GetTaskGraphRunner() override;
......
...@@ -311,6 +311,14 @@ InProcessContextFactory::SharedMainThreadContextProvider() { ...@@ -311,6 +311,14 @@ InProcessContextFactory::SharedMainThreadContextProvider() {
return shared_main_thread_contexts_; return shared_main_thread_contexts_;
} }
scoped_refptr<viz::RasterContextProvider>
InProcessContextFactory::SharedMainThreadRasterContextProvider() {
SharedMainThreadContextProvider();
DCHECK(!shared_main_thread_contexts_ ||
shared_main_thread_contexts_->RasterInterface());
return shared_main_thread_contexts_;
}
void InProcessContextFactory::RemoveCompositor(Compositor* compositor) { void InProcessContextFactory::RemoveCompositor(Compositor* compositor) {
auto it = per_compositor_data_.find(compositor); auto it = per_compositor_data_.find(compositor);
if (it == per_compositor_data_.end()) if (it == per_compositor_data_.end())
......
...@@ -65,6 +65,9 @@ class InProcessContextFactory : public ContextFactory, ...@@ -65,6 +65,9 @@ class InProcessContextFactory : public ContextFactory,
scoped_refptr<viz::ContextProvider> SharedMainThreadContextProvider() scoped_refptr<viz::ContextProvider> SharedMainThreadContextProvider()
override; override;
scoped_refptr<viz::RasterContextProvider>
SharedMainThreadRasterContextProvider() override;
void RemoveCompositor(Compositor* compositor) override; void RemoveCompositor(Compositor* compositor) override;
gpu::GpuMemoryBufferManager* GetGpuMemoryBufferManager() override; gpu::GpuMemoryBufferManager* GetGpuMemoryBufferManager() override;
cc::TaskGraphRunner* GetTaskGraphRunner() override; cc::TaskGraphRunner* GetTaskGraphRunner() override;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment