mirror of
				https://bitbucket.org/chromiumembedded/cef
				synced 2025-06-05 21:39:12 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			77 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| diff --git content/browser/compositor/gpu_process_transport_factory.cc content/browser/compositor/gpu_process_transport_factory.cc
 | |
| index e679dbb02a81..d90a276fc0e1 100644
 | |
| --- content/browser/compositor/gpu_process_transport_factory.cc
 | |
| +++ content/browser/compositor/gpu_process_transport_factory.cc
 | |
| @@ -507,10 +507,20 @@ 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(),
 | |
| +                                                   compositor->task_runner());
 | |
| +      }
 | |
| +
 | |
|        display_output_surface =
 | |
|            std::make_unique<SoftwareBrowserCompositorOutputSurface>(
 | |
| -              CreateSoftwareOutputDevice(compositor->widget(),
 | |
| -                                         compositor->task_runner()),
 | |
| +              std::move(output_device),
 | |
|                std::move(vsync_callback));
 | |
|      } else {
 | |
|        DCHECK(context_provider);
 | |
| diff --git ui/compositor/compositor.h ui/compositor/compositor.h
 | |
| index eb250697ebd6..24910afc962c 100644
 | |
| --- ui/compositor/compositor.h
 | |
| +++ 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"
 | |
| @@ -183,6 +184,17 @@ 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) {
 | |
| +    return nullptr;
 | |
| +  }
 | |
| +
 | |
| + 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
 | |
| @@ -222,6 +234,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
 | |
| @@ -447,6 +462,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;
 | |
|  
 |