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

Unified Diff: content/browser/compositor/gpu_process_transport_factory.cc

Issue 2036563002: Delete OnscreenDisplayClient and TopLevelDisplayClient. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: onscreendisplayclient: webview-scoped-allow-gl-for-hardwarerenderer-constructor Created 4 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/compositor/gpu_process_transport_factory.cc
diff --git a/content/browser/compositor/gpu_process_transport_factory.cc b/content/browser/compositor/gpu_process_transport_factory.cc
index 3a1416ceb32237e333ca314e5d26fa38ca29e08e..c4f9433c50f343f7eb564268dc81f29a3f1d7916 100644
--- a/content/browser/compositor/gpu_process_transport_factory.cc
+++ b/content/browser/compositor/gpu_process_transport_factory.cc
@@ -23,7 +23,7 @@
#include "cc/output/vulkan_in_process_context_provider.h"
#include "cc/raster/single_thread_task_graph_runner.h"
#include "cc/raster/task_graph_runner.h"
-#include "cc/surfaces/onscreen_display_client.h"
+#include "cc/surfaces/display.h"
#include "cc/surfaces/surface_display_output_surface.h"
#include "cc/surfaces/surface_manager.h"
#include "components/display_compositor/compositor_overlay_candidate_validator.h"
@@ -150,16 +150,11 @@ bool IsCALayersDisabledFromCommandLine() {
namespace content {
struct GpuProcessTransportFactory::PerCompositorData {
- gpu::SurfaceHandle surface_handle;
- BrowserCompositorOutputSurface* surface;
- ReflectorImpl* reflector;
- std::unique_ptr<cc::OnscreenDisplayClient> display_client;
+ gpu::SurfaceHandle surface_handle = gpu::kNullSurfaceHandle;
+ BrowserCompositorOutputSurface* display_output_surface = nullptr;
+ ReflectorImpl* reflector = nullptr;
+ std::unique_ptr<cc::Display> display;
bool output_is_secure = false;
-
- PerCompositorData()
- : surface_handle(gpu::kNullSurfaceHandle),
- surface(nullptr),
- reflector(nullptr) {}
};
GpuProcessTransportFactory::GpuProcessTransportFactory()
@@ -281,7 +276,9 @@ void GpuProcessTransportFactory::CreateOutputSurface(
if (!data) {
data = CreatePerCompositorData(compositor.get());
} else {
- data->surface = nullptr;
+ // TODO(danakj): We can destroy the |data->display| here when the compositor
+ // destroys its OutputSurface before calling back here.
+ data->display_output_surface = nullptr;
}
#if defined(OS_WIN)
@@ -423,7 +420,7 @@ void GpuProcessTransportFactory::EstablishedGpuChannel(
}
}
- std::unique_ptr<BrowserCompositorOutputSurface> surface;
+ std::unique_ptr<BrowserCompositorOutputSurface> display_output_surface;
#if defined(ENABLE_VULKAN)
std::unique_ptr<VulkanBrowserCompositorOutputSurface> vulkan_surface;
if (vulkan_context_provider) {
@@ -434,34 +431,36 @@ void GpuProcessTransportFactory::EstablishedGpuChannel(
vulkan_surface->Destroy();
vulkan_surface.reset();
} else {
- surface = std::move(vulkan_surface);
+ display_output_surface = std::move(vulkan_surface);
}
}
#endif
- if (!surface) {
+ if (!display_output_surface) {
if (!create_gpu_output_surface) {
- surface = base::WrapUnique(new SoftwareBrowserCompositorOutputSurface(
- CreateSoftwareOutputDevice(compositor.get()),
- compositor->vsync_manager(), compositor->task_runner().get()));
+ display_output_surface =
+ base::WrapUnique(new SoftwareBrowserCompositorOutputSurface(
+ CreateSoftwareOutputDevice(compositor.get()),
+ compositor->vsync_manager(), compositor->task_runner().get()));
} else {
DCHECK(context_provider);
const auto& capabilities = context_provider->ContextCapabilities();
if (data->surface_handle == gpu::kNullSurfaceHandle) {
- surface = base::WrapUnique(new OffscreenBrowserCompositorOutputSurface(
- context_provider, compositor->vsync_manager(),
- compositor->task_runner().get(),
- std::unique_ptr<
- display_compositor::CompositorOverlayCandidateValidator>()));
+ display_output_surface =
+ base::WrapUnique(new OffscreenBrowserCompositorOutputSurface(
+ context_provider, compositor->vsync_manager(),
+ compositor->task_runner().get(),
+ std::unique_ptr<display_compositor::
+ CompositorOverlayCandidateValidator>()));
} else if (capabilities.surfaceless) {
#if defined(OS_MACOSX)
- surface = base::WrapUnique(new GpuOutputSurfaceMac(
+ display_output_surface = base::WrapUnique(new GpuOutputSurfaceMac(
context_provider, data->surface_handle, compositor->vsync_manager(),
compositor->task_runner().get(),
CreateOverlayCandidateValidator(compositor->widget()),
BrowserGpuMemoryBufferManager::current()));
#else
- surface =
+ display_output_surface =
base::WrapUnique(new GpuSurfacelessBrowserCompositorOutputSurface(
context_provider, data->surface_handle,
compositor->vsync_manager(), compositor->task_runner().get(),
@@ -476,49 +475,48 @@ void GpuProcessTransportFactory::EstablishedGpuChannel(
// Overlays are only supported on surfaceless output surfaces on Mac.
validator = CreateOverlayCandidateValidator(compositor->widget());
#endif
- surface = base::WrapUnique(new GpuBrowserCompositorOutputSurface(
- context_provider, compositor->vsync_manager(),
- compositor->task_runner().get(), std::move(validator)));
+ display_output_surface =
+ base::WrapUnique(new GpuBrowserCompositorOutputSurface(
+ context_provider, compositor->vsync_manager(),
+ compositor->task_runner().get(), std::move(validator)));
}
}
}
- data->surface = surface.get();
+ data->display_output_surface = display_output_surface.get();
if (data->reflector)
- data->reflector->OnSourceSurfaceReady(data->surface);
+ data->reflector->OnSourceSurfaceReady(data->display_output_surface);
#if defined(OS_WIN)
gfx::RenderingWindowManager::GetInstance()->DoSetParentOnChild(
compositor->widget());
#endif
- // This gets a bit confusing. Here we have a ContextProvider in the |surface|
- // configured to render directly to this widget. We need to make an
- // OnscreenDisplayClient associated with that context, then return a
- // SurfaceDisplayOutputSurface set up to draw to the display's surface.
- cc::SurfaceManager* manager = surface_manager_.get();
- std::unique_ptr<cc::OnscreenDisplayClient> display_client(
- new cc::OnscreenDisplayClient(
- std::move(surface), manager, HostSharedBitmapManager::current(),
- BrowserGpuMemoryBufferManager::current(),
- compositor->GetRendererSettings(), compositor->task_runner(),
- compositor->surface_id_allocator()->id_namespace()));
-
- std::unique_ptr<cc::SurfaceDisplayOutputSurface> output_surface(
+ // The Display owns and uses the |display_output_surface| created above.
+ data->display = base::MakeUnique<cc::Display>(
+ surface_manager_.get(), HostSharedBitmapManager::current(),
+ BrowserGpuMemoryBufferManager::current(),
+ compositor->GetRendererSettings(),
+ compositor->surface_id_allocator()->id_namespace(),
+ compositor->task_runner().get(), std::move(display_output_surface));
+
+ // The |delegated_output_surface| is given back to the compositor, it
+ // delegates to the Display as its root surface. Importantly, it shares the
+ // same ContextProvider as the Display's output surface.
+ std::unique_ptr<cc::SurfaceDisplayOutputSurface> delegated_output_surface(
vulkan_context_provider
? new cc::SurfaceDisplayOutputSurface(
- manager, compositor->surface_id_allocator(),
+ surface_manager_.get(), compositor->surface_id_allocator(),
+ data->display.get(),
static_cast<scoped_refptr<cc::VulkanContextProvider>>(
vulkan_context_provider))
: new cc::SurfaceDisplayOutputSurface(
- manager, compositor->surface_id_allocator(), context_provider,
+ surface_manager_.get(), compositor->surface_id_allocator(),
+ data->display.get(), context_provider,
shared_worker_context_provider_));
- display_client->set_surface_output_surface(output_surface.get());
- output_surface->set_display_client(display_client.get());
- display_client->display()->Resize(compositor->size());
- display_client->display()->SetOutputIsSecure(data->output_is_secure);
- data->display_client = std::move(display_client);
- compositor->SetOutputSurface(std::move(output_surface));
+ data->display->Resize(compositor->size());
+ data->display->SetOutputIsSecure(data->output_is_secure);
+ compositor->SetOutputSurface(std::move(delegated_output_surface));
}
std::unique_ptr<ui::Reflector> GpuProcessTransportFactory::CreateReflector(
@@ -530,7 +528,7 @@ std::unique_ptr<ui::Reflector> GpuProcessTransportFactory::CreateReflector(
std::unique_ptr<ReflectorImpl> reflector(
new ReflectorImpl(source_compositor, target_layer));
source_data->reflector = reflector.get();
- if (BrowserCompositorOutputSurface* source_surface = source_data->surface)
+ if (auto* source_surface = source_data->display_output_surface)
reflector->OnSourceSurfaceReady(source_surface);
return std::move(reflector);
}
@@ -621,8 +619,8 @@ void GpuProcessTransportFactory::ResizeDisplay(ui::Compositor* compositor,
return;
PerCompositorData* data = it->second;
DCHECK(data);
- if (data->display_client)
- data->display_client->display()->Resize(size);
+ if (data->display)
+ data->display->Resize(size);
}
void GpuProcessTransportFactory::SetAuthoritativeVSyncInterval(
@@ -633,9 +631,9 @@ void GpuProcessTransportFactory::SetAuthoritativeVSyncInterval(
return;
PerCompositorData* data = it->second;
DCHECK(data);
- if (data->surface) {
- data->surface->begin_frame_source()->SetAuthoritativeVSyncInterval(
- interval);
+ if (data->display_output_surface) {
+ data->display_output_surface->begin_frame_source()
+ ->SetAuthoritativeVSyncInterval(interval);
}
}
@@ -647,8 +645,8 @@ void GpuProcessTransportFactory::SetOutputIsSecure(ui::Compositor* compositor,
PerCompositorData* data = it->second;
DCHECK(data);
data->output_is_secure = secure;
- if (data->display_client)
- data->display_client->display()->SetOutputIsSecure(secure);
+ if (data->display)
+ data->display->SetOutputIsSecure(secure);
}
cc::SurfaceManager* GpuProcessTransportFactory::GetSurfaceManager() {
@@ -685,8 +683,8 @@ void GpuProcessTransportFactory::SetCompositorSuspendedForRecycle(
return;
PerCompositorData* data = it->second;
DCHECK(data);
- if (data->surface)
- data->surface->SetSurfaceSuspendedForRecycle(suspended);
+ if (data->display_output_surface)
+ data->display_output_surface->SetSurfaceSuspendedForRecycle(suspended);
}
#endif
« no previous file with comments | « components/mus/surfaces/top_level_display_client.cc ('k') | content/browser/renderer_host/compositor_impl_android.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698