76c5f5cc8a
In the GN build, libchromiumcontent is no longer a distinct library, but merely a container for a set of scripts and patches. Maintaining those patches in a separate repository is tedious and error-prone, so merge them into the main repo. Once this is merged and GN is the default way to build Electron, the libchromiumcontent repository can be archived.
72 lines
3.2 KiB
Diff
72 lines
3.2 KiB
Diff
diff --git a/content/browser/compositor/gpu_process_transport_factory.cc b/content/browser/compositor/gpu_process_transport_factory.cc
|
|
index 7b9fc4114c52..bdbbf93f6f0d 100644
|
|
--- a/content/browser/compositor/gpu_process_transport_factory.cc
|
|
+++ b/content/browser/compositor/gpu_process_transport_factory.cc
|
|
@@ -495,9 +495,19 @@ void GpuProcessTransportFactory::EstablishedGpuChannel(
|
|
// surfaces as they are not following the correct mode.
|
|
DisableGpuCompositing(compositor.get());
|
|
}
|
|
+
|
|
+ std::unique_ptr<viz::SoftwareOutputDevice> output_device;
|
|
+ if (compositor->delegate()) {
|
|
+ output_device = compositor->delegate()->CreateSoftwareOutputDevice(
|
|
+ compositor.get());
|
|
+ }
|
|
+ if (!output_device) {
|
|
+ output_device = CreateSoftwareOutputDevice(compositor->widget());
|
|
+ }
|
|
+
|
|
display_output_surface =
|
|
std::make_unique<SoftwareBrowserCompositorOutputSurface>(
|
|
- CreateSoftwareOutputDevice(compositor->widget()),
|
|
+ std::move(output_device),
|
|
std::move(vsync_callback), compositor->task_runner());
|
|
} else {
|
|
DCHECK(context_provider);
|
|
diff --git a/ui/compositor/compositor.h b/ui/compositor/compositor.h
|
|
index d842aa55175b..2c2131774b71 100644
|
|
--- a/ui/compositor/compositor.h
|
|
+++ b/ui/compositor/compositor.h
|
|
@@ -24,6 +24,7 @@
|
|
#include "components/viz/common/surfaces/frame_sink_id.h"
|
|
#include "components/viz/common/surfaces/local_surface_id.h"
|
|
#include "components/viz/host/host_frame_sink_client.h"
|
|
+#include "components/viz/service/display/software_output_device.h"
|
|
#include "third_party/skia/include/core/SkColor.h"
|
|
#include "third_party/skia/include/core/SkMatrix44.h"
|
|
#include "ui/compositor/compositor_animation_observer.h"
|
|
@@ -182,6 +183,15 @@ class COMPOSITOR_EXPORT ContextFactory {
|
|
virtual void RemoveObserver(ContextFactoryObserver* observer) = 0;
|
|
};
|
|
|
|
+class COMPOSITOR_EXPORT CompositorDelegate {
|
|
+ public:
|
|
+ virtual std::unique_ptr<viz::SoftwareOutputDevice> CreateSoftwareOutputDevice(
|
|
+ ui::Compositor* compositor) = 0;
|
|
+
|
|
+ protected:
|
|
+ virtual ~CompositorDelegate() {}
|
|
+};
|
|
+
|
|
// Compositor object to take care of GPU painting.
|
|
// A Browser compositor object is responsible for generating the final
|
|
// displayable form of pixels comprising a single widget's contents. It draws an
|
|
@@ -221,6 +231,9 @@ class COMPOSITOR_EXPORT Compositor : public cc::LayerTreeHostClient,
|
|
// Schedules a redraw of the layer tree associated with this compositor.
|
|
void ScheduleDraw();
|
|
|
|
+ CompositorDelegate* delegate() const { return delegate_; }
|
|
+ void SetDelegate(CompositorDelegate* delegate) { delegate_ = delegate; }
|
|
+
|
|
// Sets the root of the layer tree drawn by this Compositor. The root layer
|
|
// must have no parent. The compositor's root layer is reset if the root layer
|
|
// is destroyed. NULL can be passed to reset the root layer, in which case the
|
|
@@ -426,6 +439,8 @@ class COMPOSITOR_EXPORT Compositor : public cc::LayerTreeHostClient,
|
|
ui::ContextFactory* context_factory_;
|
|
ui::ContextFactoryPrivate* context_factory_private_;
|
|
|
|
+ CompositorDelegate* delegate_ = nullptr;
|
|
+
|
|
// The root of the Layer tree drawn by this compositor.
|
|
Layer* root_layer_ = nullptr;
|
|
|