Index: cc/surfaces/surface_display_output_surface.h |
diff --git a/cc/surfaces/surface_display_output_surface.h b/cc/surfaces/surface_display_output_surface.h |
index d9abb70bf7a6771a02e3fe3b78f57302f6e97431..9b2716c05b93372d577fea1aaa94041b100785c1 100644 |
--- a/cc/surfaces/surface_display_output_surface.h |
+++ b/cc/surfaces/surface_display_output_surface.h |
@@ -6,15 +6,17 @@ |
#define CC_SURFACES_SURFACE_DISPLAY_OUTPUT_SURFACE_H_ |
#include "base/macros.h" |
+#include "base/threading/thread_checker.h" |
#include "cc/output/output_surface.h" |
+#include "cc/surfaces/display_client.h" |
#include "cc/surfaces/surface_factory.h" |
#include "cc/surfaces/surface_factory_client.h" |
-#include "cc/surfaces/surface_id_allocator.h" |
#include "cc/surfaces/surfaces_export.h" |
namespace cc { |
class Display; |
class OnscreenDisplayClient; |
+class SurfaceIdAllocator; |
class SurfaceManager; |
// This class is maps a compositor OutputSurface to the surface system's Display |
@@ -22,26 +24,23 @@ class SurfaceManager; |
// window or physical display. |
class CC_SURFACES_EXPORT SurfaceDisplayOutputSurface |
: public OutputSurface, |
- public SurfaceFactoryClient { |
+ public SurfaceFactoryClient, |
+ public NON_EXPORTED_BASE(DisplayClient) { |
public: |
// The underlying Display and SurfaceManager must outlive this class. |
SurfaceDisplayOutputSurface( |
SurfaceManager* surface_manager, |
SurfaceIdAllocator* allocator, |
+ Display* display, |
scoped_refptr<ContextProvider> context_provider, |
scoped_refptr<ContextProvider> worker_context_provider); |
SurfaceDisplayOutputSurface( |
SurfaceManager* surface_manager, |
SurfaceIdAllocator* allocator, |
+ Display* display, |
scoped_refptr<VulkanContextProvider> vulkan_context_provider); |
~SurfaceDisplayOutputSurface() override; |
- void set_display_client(OnscreenDisplayClient* display_client) { |
- DCHECK(!display_client_); |
- display_client_ = display_client; |
- } |
- SurfaceFactory* factory() { return &factory_; } |
- |
// OutputSurface implementation. |
void SwapBuffers(CompositorFrame* frame) override; |
bool BindToClient(OutputSurfaceClient* client) override; |
@@ -52,14 +51,23 @@ class CC_SURFACES_EXPORT SurfaceDisplayOutputSurface |
void ReturnResources(const ReturnedResourceArray& resources) override; |
void SetBeginFrameSource(BeginFrameSource* begin_frame_source) override; |
+ // DisplayClient implementation. |
+ void DisplayOutputSurfaceLost() override; |
+ void DisplaySetMemoryPolicy(const ManagedMemoryPolicy& policy) override; |
+ |
private: |
void SwapBuffersComplete(SurfaceDrawStatus drawn); |
- OnscreenDisplayClient* display_client_; |
+ // This class is only meant to be used on a single thread. |
+ base::ThreadChecker thread_checker_; |
+ |
+ SurfaceManager* surface_manager_; |
+ SurfaceIdAllocator* surface_id_allocator_; |
+ Display* display_; |
SurfaceFactory factory_; |
- gfx::Size display_size_; |
- SurfaceId surface_id_; |
- SurfaceIdAllocator* allocator_; |
+ SurfaceId delegated_surface_id_; |
+ gfx::Size last_swap_frame_size_; |
+ bool output_surface_lost_ = false; |
DISALLOW_COPY_AND_ASSIGN(SurfaceDisplayOutputSurface); |
}; |