Chromium Code Reviews| Index: cc/output/compositor_frame_sink.h |
| diff --git a/cc/output/compositor_frame_sink.h b/cc/output/compositor_frame_sink.h |
| index 32b22f98c1bb1289b3d95b154981a0046678c9f3..a69412924af0290e23f2884e4d201f6c5c3668aa 100644 |
| --- a/cc/output/compositor_frame_sink.h |
| +++ b/cc/output/compositor_frame_sink.h |
| @@ -16,7 +16,6 @@ |
| #include "cc/base/cc_export.h" |
| #include "cc/output/context_provider.h" |
| #include "cc/output/overlay_candidate_validator.h" |
| -#include "cc/output/software_output_device.h" |
| #include "cc/output/vulkan_context_provider.h" |
| #include "cc/resources/returned_resource.h" |
| #include "gpu/command_buffer/common/texture_in_use_response.h" |
| @@ -49,99 +48,31 @@ class CompositorFrameSinkClient; |
| class CC_EXPORT CompositorFrameSink |
| : public base::trace_event::MemoryDumpProvider { |
| public: |
| - // Constructor for GL-based and/or software compositing. |
| - explicit CompositorFrameSink( |
| - scoped_refptr<ContextProvider> context_provider, |
| - scoped_refptr<ContextProvider> worker_context_provider, |
| - std::unique_ptr<SoftwareOutputDevice> software_device); |
| - |
| - // Constructor for Vulkan-based compositing. |
| - explicit CompositorFrameSink( |
| - scoped_refptr<VulkanContextProvider> vulkan_context_provider); |
| + struct Capabilities { |
| + Capabilities() = default; |
| - ~CompositorFrameSink() override; |
| + // TODO(enne): Remove this since everything uses begin frames now, but it |
| + // causes some racey unit tests to fail. |
| + bool adjust_deadline_for_parent = true; |
|
danakj
2016/09/17 01:29:37
So ok the story with this one is I left it as true
|
| - struct Capabilities { |
| - Capabilities() |
| - : delegated_rendering(false), |
| - max_frames_pending(1), |
| - adjust_deadline_for_parent(true), |
| - uses_default_gl_framebuffer(true), |
| - flipped_compositor_frame_sink(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 CompositorFrameSink is flipped or not. |
| - bool flipped_compositor_frame_sink; |
| // Whether ForceReclaimResources can be called to reclaim all resources |
| // from the CompositorFrameSink. |
| - bool can_force_reclaim_resources; |
| + bool can_force_reclaim_resources = false; |
| // True if sync points for resources are needed when swapping delegated |
| // frames. |
| - bool delegated_sync_points_required; |
| + bool delegated_sync_points_required = true; |
| }; |
| - // ============== DISPLAY COMPOSITOR ONLY ======================= |
| - |
| - virtual void EnsureBackbuffer(); |
| - virtual void DiscardBackbuffer(); |
| - |
| - const gfx::ColorSpace& device_color_space() const { |
| - return device_color_space_; |
| - } |
| - |
| - // Called by subclasses after receiving a response from the gpu process to a |
| - // query about whether a given set of textures is still in use by the OS |
| - // compositor. |
| - void DidReceiveTextureInUseResponses( |
| - const gpu::TextureInUseResponses& responses); |
| - |
| - // Get the class capable of informing cc of hardware overlay capability. |
| - virtual OverlayCandidateValidator* GetOverlayCandidateValidator() const; |
| - |
| - // Returns true if a main image overlay plane should be scheduled. |
| - virtual bool IsDisplayedAsOverlayPlane() const; |
| - |
| - // Get the texture for the main image's overlay. |
| - virtual unsigned GetOverlayTextureId() const; |
| - |
| - // If this returns true, then the surface will not attempt to draw. |
| - virtual bool SurfaceIsSuspendForRecycle() const; |
| - |
| - virtual void Reshape(const gfx::Size& size, |
| - float scale_factor, |
| - const gfx::ColorSpace& color_space, |
| - bool alpha); |
| - gfx::Size SurfaceSize() const { return surface_size_; } |
| - |
| - 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; |
| + // Constructor for GL-based and/or software compositing. |
| + explicit CompositorFrameSink( |
| + scoped_refptr<ContextProvider> context_provider, |
| + scoped_refptr<ContextProvider> worker_context_provider); |
| - // Support for a pull-model where draws are requested by the output surface. |
| - // |
| - // CompositorFrameSink::Invalidate is called by the compositor to notify that |
| - // there's new content. |
| - virtual void Invalidate() {} |
| + // Constructor for Vulkan-based compositing. |
| + explicit CompositorFrameSink( |
| + scoped_refptr<VulkanContextProvider> vulkan_context_provider); |
| - // ============== BOTH TYPES OF COMPOSITOR ====================== |
| + ~CompositorFrameSink() override; |
| // 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 |
| @@ -171,14 +102,19 @@ class CC_EXPORT CompositorFrameSink |
| 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 |
| - // DidSwapBuffersComplete() (via OnSwapBuffersComplete()) eventually. |
| + // If supported, this causes a ReclaimResources for all resources that are |
| + // currently in use. |
| + virtual void ForceReclaimResources() {} |
| + |
| + // Support for a pull-model where draws are requested by the output surface. |
| + // |
| + // CompositorFrameSink::Invalidate is called by the compositor to notify that |
| + // there's new content. |
| + virtual void Invalidate() {} |
| + |
| + // For successful swaps, the implementation must call DidSwapBuffersComplete() |
| + // (via OnSwapBuffersComplete()) eventually. |
| virtual void SwapBuffers(CompositorFrame frame) = 0; |
| virtual void OnSwapBuffersComplete(); |
| @@ -190,12 +126,9 @@ class CC_EXPORT CompositorFrameSink |
| // 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 "CompositorFrameSink". |
| - virtual void DidLoseCompositorFrameSink(); |
| + // Bound to the ContextProvider to hear about when it is lost and inform the |
| + // |client_|. |
| + void DidLoseCompositorFrameSink(); |
| CompositorFrameSinkClient* client_ = nullptr; |
| @@ -203,12 +136,6 @@ class CC_EXPORT CompositorFrameSink |
| 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_; |
| - float device_scale_factor_ = -1; |
| - gfx::ColorSpace device_color_space_; |
| - bool has_alpha_ = true; |
| - gfx::ColorSpace color_space_; |
| base::ThreadChecker client_thread_checker_; |
| private: |