Chromium Code Reviews| Index: components/exo/surface.h |
| diff --git a/components/exo/surface.h b/components/exo/surface.h |
| index 032cd57f8af55c8f4bda996a30ef76cbf39baa5e..0a7c9a8fdbfd6023d3eb44d15530b0f1367a4f49 100644 |
| --- a/components/exo/surface.h |
| +++ b/components/exo/surface.h |
| @@ -18,6 +18,10 @@ |
| #include "cc/resources/transferable_resource.h" |
| #include "cc/scheduler/begin_frame_source.h" |
| #include "cc/surfaces/surface_factory_client.h" |
| +#include "cc/surfaces/surface_id.h" |
| +#include "cc/surfaces/surface_id_allocator.h" |
| +#include "components/exo/compositor_frame_sink.h" |
| +#include "components/exo/compositor_frame_sink_holder.h" |
| #include "third_party/skia/include/core/SkBlendMode.h" |
| #include "third_party/skia/include/core/SkRegion.h" |
| #include "ui/aura/window.h" |
| @@ -57,42 +61,9 @@ class PropertyHelper; |
| // change in the future when better hardware cursor support is added. |
| using CursorProvider = Pointer; |
| -// This class owns the SurfaceFactory and keeps track of references to the |
| -// contents of Buffers. It's keeped alive by references from |
| -// release_callbacks_. It's destroyed when its owning Surface is destroyed and |
| -// the last outstanding release callback is called. |
| -class SurfaceFactoryOwner : public base::RefCounted<SurfaceFactoryOwner>, |
| - public cc::SurfaceFactoryClient { |
| - public: |
| - SurfaceFactoryOwner(); |
| - |
| - // Overridden from cc::SurfaceFactoryClient: |
| - void ReturnResources(const cc::ReturnedResourceArray& resources) override; |
| - void WillDrawSurface(const cc::LocalFrameId& id, |
| - const gfx::Rect& damage_rect) override; |
| - void SetBeginFrameSource(cc::BeginFrameSource* begin_frame_source) override; |
| - |
| - private: |
| - friend class base::RefCounted<SurfaceFactoryOwner>; |
| - friend class Surface; |
| - |
| - ~SurfaceFactoryOwner() override; |
| - |
| - std::map<int, |
| - std::pair<scoped_refptr<SurfaceFactoryOwner>, |
| - std::unique_ptr<cc::SingleReleaseCallback>>> |
| - release_callbacks_; |
| - cc::FrameSinkId frame_sink_id_; |
| - std::unique_ptr<cc::SurfaceIdAllocator> id_allocator_; |
| - std::unique_ptr<cc::SurfaceFactory> surface_factory_; |
| - Surface* surface_ = nullptr; |
| -}; |
| - |
| // This class represents a rectangular area that is displayed on the screen. |
| // It has a location, size and pixel contents. |
| -class Surface : public ui::ContextFactoryObserver, |
| - public aura::WindowObserver, |
| - public cc::BeginFrameObserver { |
| +class Surface : public ui::ContextFactoryObserver, public aura::WindowObserver { |
| public: |
| using PropertyDeallocator = void (*)(int64_t value); |
| @@ -104,9 +75,12 @@ class Surface : public ui::ContextFactoryObserver, |
| aura::Window* window() { return window_.get(); } |
| - const cc::LocalFrameId& local_frame_id() const { return local_frame_id_; } |
| cc::SurfaceId GetSurfaceId() const; |
| + CompositorFrameSinkHolder* compositor_frame_sink_holder() { |
| + return compositor_frame_sink_holder_.get(); |
| + } |
| + |
| // Set a buffer as the content of this surface. A buffer can only be attached |
| // to one surface at a time. |
| void Attach(Buffer* buffer); |
| @@ -118,7 +92,6 @@ class Surface : public ui::ContextFactoryObserver, |
| // Request notification when the next frame is displayed. Useful for |
| // throttling redrawing operations, and driving animations. |
| - using FrameCallback = base::Callback<void(base::TimeTicks frame_time)>; |
|
reveman
2016/12/07 00:46:57
Please keep this. I prefer if this was still part
Alex Z.
2016/12/07 20:09:36
Done.
|
| void RequestFrameCallback(const FrameCallback& callback); |
| // This sets the region of the surface that contains opaque content. |
| @@ -229,11 +202,6 @@ class Surface : public ui::ContextFactoryObserver, |
| void OnWindowRemovingFromRootWindow(aura::Window* window, |
| aura::Window* new_root) override; |
| - // Overridden from cc::BeginFrameObserver: |
| - void OnBeginFrame(const cc::BeginFrameArgs& args) override; |
| - const cc::BeginFrameArgs& LastUsedBeginFrameArgs() const override; |
| - void OnBeginFrameSourcePausedChanged(bool paused) override {} |
| - |
| // Sets the |value| of the given surface |property|. Setting to the default |
| // value (e.g., NULL) removes the property. The caller is responsible for the |
| // lifetime of any object set as a property on the Surface. |
| @@ -314,9 +282,6 @@ class Surface : public ui::ContextFactoryObserver, |
| // current_resource_. |
| void UpdateSurface(bool full_damage); |
| - // Adds/Removes begin frame observer based on state. |
| - void UpdateNeedsBeginFrame(); |
| - |
| int64_t SetPropertyInternal(const void* key, |
| const char* name, |
| PropertyDeallocator deallocator, |
| @@ -350,11 +315,16 @@ class Surface : public ui::ContextFactoryObserver, |
| // The buffer that will become the content of surface when Commit() is called. |
| BufferAttachment pending_buffer_; |
| + const cc::FrameSinkId frame_sink_id_; |
|
reveman
2016/12/07 00:46:57
Does it make sense to group this and member variab
Alex Z.
2016/12/07 20:09:36
Done.
|
| + |
| cc::SurfaceManager* surface_manager_; |
| - scoped_refptr<SurfaceFactoryOwner> factory_owner_; |
| + base::WeakPtr<cc::SurfaceFactory> factory_; |
|
reveman
2016/12/07 00:46:57
nit: surface_factory_
Alex Z.
2016/12/07 20:09:36
Done.
|
| + |
| + scoped_refptr<CompositorFrameSinkHolder> compositor_frame_sink_holder_; |
| + |
| + cc::SurfaceIdAllocator id_allocator_; |
| - // The Surface Id currently attached to the window. |
| cc::LocalFrameId local_frame_id_; |
| // The next resource id the buffer will be attached to. |
| @@ -370,7 +340,6 @@ class Surface : public ui::ContextFactoryObserver, |
| // be drawn. They fire at the first begin frame notification after this. |
| std::list<FrameCallback> pending_frame_callbacks_; |
| std::list<FrameCallback> frame_callbacks_; |
| - std::list<FrameCallback> active_frame_callbacks_; |
| // This is the state that has yet to be committed. |
| State pending_state_; |
| @@ -407,11 +376,6 @@ class Surface : public ui::ContextFactoryObserver, |
| // maintains. |
| SurfaceDelegate* delegate_ = nullptr; |
| - // The begin frame source being observed. |
| - cc::BeginFrameSource* begin_frame_source_ = nullptr; |
| - cc::BeginFrameArgs last_begin_frame_args_; |
| - bool needs_begin_frame_ = false; |
| - |
| struct Value { |
| const char* name; |
| int64_t value; |
| @@ -423,6 +387,8 @@ class Surface : public ui::ContextFactoryObserver, |
| // Surface observer list. Surface does not own the observers. |
| base::ObserverList<SurfaceObserver, true> observers_; |
| + base::WeakPtrFactory<Surface> weak_ptr_factory_; |
|
reveman
2016/12/07 00:46:58
Can we use the SurfaceObserver interface instead o
Alex Z.
2016/12/07 20:09:36
Done.
|
| + |
| DISALLOW_COPY_AND_ASSIGN(Surface); |
| }; |