Index: cc/output/output_surface.h |
diff --git a/cc/output/output_surface.h b/cc/output/output_surface.h |
index bf5357b4b2d86ef02b44e74d3f8ff247a6b02066..f2251907713378e317379b19a44a618944fc352f 100644 |
--- a/cc/output/output_surface.h |
+++ b/cc/output/output_surface.h |
@@ -48,45 +48,55 @@ class OutputSurfaceClient; |
// surface (on the compositor thread) and go back to step 1. |
class CC_EXPORT OutputSurface : public base::trace_event::MemoryDumpProvider { |
public: |
- // Constructor for GL-based and/or software compositing. |
- explicit OutputSurface(scoped_refptr<ContextProvider> context_provider, |
- scoped_refptr<ContextProvider> worker_context_provider, |
- std::unique_ptr<SoftwareOutputDevice> software_device); |
+ struct Capabilities { |
+ Capabilities() = default; |
+ |
+ int max_frames_pending = 1; |
+ // Whether this output surface renders to the default OpenGL zero |
+ // framebuffer or to an offscreen framebuffer. |
+ bool uses_default_gl_framebuffer = true; |
+ // Whether this OutputSurface is flipped or not. |
+ bool flipped_output_surface = false; |
+ }; |
+ // Constructor for GL-based compositing. |
+ explicit OutputSurface(scoped_refptr<ContextProvider> context_provider); |
+ // Constructor for software compositing. |
+ explicit OutputSurface(std::unique_ptr<SoftwareOutputDevice> software_device); |
// Constructor for Vulkan-based compositing. |
explicit OutputSurface( |
scoped_refptr<VulkanContextProvider> vulkan_context_provider); |
~OutputSurface() override; |
- struct Capabilities { |
- Capabilities() |
- : delegated_rendering(false), |
- max_frames_pending(1), |
- adjust_deadline_for_parent(true), |
- uses_default_gl_framebuffer(true), |
- flipped_output_surface(false), |
- can_force_reclaim_resources(false), |
- delegated_sync_points_required(true) {} |
- bool delegated_rendering; |
- int max_frames_pending; |
- // This doesn't handle the <webview> case, but once BeginFrame is |
- // supported natively, we shouldn't need adjust_deadline_for_parent. |
- bool adjust_deadline_for_parent; |
- // Whether this output surface renders to the default OpenGL zero |
- // framebuffer or to an offscreen framebuffer. |
- bool uses_default_gl_framebuffer; |
- // Whether this OutputSurface is flipped or not. |
- bool flipped_output_surface; |
- // Whether ForceReclaimResources can be called to reclaim all resources |
- // from the OutputSurface. |
- bool can_force_reclaim_resources; |
- // True if sync points for resources are needed when swapping delegated |
- // frames. |
- bool delegated_sync_points_required; |
- }; |
+ // Called by the compositor on the compositor thread. This is a place where |
+ // thread-specific data for the output surface can be initialized, since from |
+ // this point to when DetachFromClient() is called the output surface will |
+ // only be used on the compositor thread. |
+ // The caller should call DetachFromClient() on the same thread before |
+ // destroying the OutputSurface, even if this fails. And BindToClient should |
+ // not be called twice for a given OutputSurface. |
+ virtual bool BindToClient(OutputSurfaceClient* client); |
- // ============== DISPLAY COMPOSITOR ONLY ======================= |
+ // Called by the compositor on the compositor thread. This is a place where |
+ // thread-specific data for the output surface can be uninitialized. |
+ virtual void DetachFromClient(); |
+ |
+ bool HasClient() { return !!client_; } |
+ |
+ const Capabilities& capabilities() const { return capabilities_; } |
+ |
+ // Obtain the 3d context or the software device associated with this output |
+ // surface. Either of these may return a null pointer, but not both. |
+ // In the event of a lost context, the entire output surface should be |
+ // recreated. |
+ ContextProvider* context_provider() const { return context_provider_.get(); } |
+ VulkanContextProvider* vulkan_context_provider() const { |
+ return vulkan_context_provider_.get(); |
+ } |
+ SoftwareOutputDevice* software_device() const { |
+ return software_device_.get(); |
+ } |
virtual void EnsureBackbuffer(); |
virtual void DiscardBackbuffer(); |
@@ -119,60 +129,15 @@ class CC_EXPORT OutputSurface : public base::trace_event::MemoryDumpProvider { |
bool alpha); |
gfx::Size SurfaceSize() const { return surface_size_; } |
+ virtual void BindFramebuffer(); |
+ |
virtual bool HasExternalStencilTest() const; |
virtual void ApplyExternalStencil(); |
- // ============== LAYER TREE COMPOSITOR ONLY =================== |
- |
- // If supported, this causes a ReclaimResources for all resources that are |
- // currently in use. |
- virtual void ForceReclaimResources() {} |
- |
- virtual void BindFramebuffer(); |
// Gives the GL internal format that should be used for calling CopyTexImage2D |
// when the framebuffer is bound via BindFramebuffer(). |
virtual uint32_t GetFramebufferCopyTextureFormat() = 0; |
- // Support for a pull-model where draws are requested by the output surface. |
- // |
- // OutputSurface::Invalidate is called by the compositor to notify that |
- // there's new content. |
- virtual void Invalidate() {} |
- |
- // ============== BOTH TYPES OF COMPOSITOR ====================== |
- |
- // Called by the compositor on the compositor thread. This is a place where |
- // thread-specific data for the output surface can be initialized, since from |
- // this point to when DetachFromClient() is called the output surface will |
- // only be used on the compositor thread. |
- // The caller should call DetachFromClient() on the same thread before |
- // destroying the OutputSurface, even if this fails. And BindToClient should |
- // not be called twice for a given OutputSurface. |
- virtual bool BindToClient(OutputSurfaceClient* client); |
- |
- // Called by the compositor on the compositor thread. This is a place where |
- // thread-specific data for the output surface can be uninitialized. |
- virtual void DetachFromClient(); |
- |
- bool HasClient() { return !!client_; } |
- |
- const Capabilities& capabilities() const { return capabilities_; } |
- |
- // Obtain the 3d context or the software device associated with this output |
- // surface. Either of these may return a null pointer, but not both. |
- // In the event of a lost context, the entire output surface should be |
- // recreated. |
- ContextProvider* context_provider() const { return context_provider_.get(); } |
- ContextProvider* worker_context_provider() const { |
- return worker_context_provider_.get(); |
- } |
- VulkanContextProvider* vulkan_context_provider() const { |
- return vulkan_context_provider_.get(); |
- } |
- SoftwareOutputDevice* software_device() const { |
- return software_device_.get(); |
- } |
- |
// The implementation may destroy or steal the contents of the CompositorFrame |
// passed in (though it will not take ownership of the CompositorFrame |
// itself). For successful swaps, the implementation must call |
@@ -185,21 +150,16 @@ class CC_EXPORT OutputSurface : public base::trace_event::MemoryDumpProvider { |
base::trace_event::ProcessMemoryDump* pmd) override; |
protected: |
- // This is used by both display and delegating implementations. |
void PostSwapBuffersComplete(); |
- // This is how LayerTreeHostImpl hears about context loss when the Display |
- // is the one listening for context loss. Also used internally for the |
- // context provider to inform the LayerTreeHostImpl or Display about loss. |
- // It would become display-compositor-only when LayerTreeHostImpl receives |
- // its contexts independently from the "OutputSurface". |
+ // Used internally for the context provider to inform the client about loss, |
+ // and can be overridden to change behaviour instead of informing the client. |
virtual void DidLoseOutputSurface(); |
OutputSurfaceClient* client_ = nullptr; |
struct OutputSurface::Capabilities capabilities_; |
scoped_refptr<ContextProvider> context_provider_; |
- scoped_refptr<ContextProvider> worker_context_provider_; |
scoped_refptr<VulkanContextProvider> vulkan_context_provider_; |
std::unique_ptr<SoftwareOutputDevice> software_device_; |
gfx::Size surface_size_; |