X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fcc%2Fsurfaces%2Fsurface.h;h=7b3fbc125b29f7850cffe78ea620122dad4c2200;hb=1afa4dd80ef85af7c90efaea6959db1d92330844;hp=718fef4a1fd5782eaeb43a6b474d2a807ce8d302;hpb=90762837333c13ccf56f2ad88e4481fc71e8d281;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/cc/surfaces/surface.h b/src/cc/surfaces/surface.h index 718fef4..7b3fbc1 100644 --- a/src/cc/surfaces/surface.h +++ b/src/cc/surfaces/surface.h @@ -5,17 +5,21 @@ #ifndef CC_SURFACES_SURFACE_H_ #define CC_SURFACES_SURFACE_H_ +#include #include #include "base/callback.h" #include "base/containers/hash_tables.h" #include "base/macros.h" #include "base/memory/scoped_ptr.h" +#include "base/memory/weak_ptr.h" #include "cc/base/scoped_ptr_vector.h" #include "cc/output/copy_output_request.h" +#include "cc/quads/render_pass_id.h" #include "cc/surfaces/surface_id.h" +#include "cc/surfaces/surface_sequence.h" #include "cc/surfaces/surfaces_export.h" -#include "ui/gfx/size.h" +#include "ui/gfx/geometry/size.h" namespace ui { struct LatencyInfo; @@ -39,8 +43,10 @@ class CC_SURFACES_EXPORT Surface { void QueueFrame(scoped_ptr frame, const base::Closure& draw_callback); void RequestCopyOfOutput(scoped_ptr copy_request); + // Adds each CopyOutputRequest in the current frame to copy_requests. The + // caller takes ownership of them. void TakeCopyOutputRequests( - ScopedPtrVector* copy_requests); + std::multimap* copy_requests); // Returns the most recent frame that is eligible to be rendered. const CompositorFrame* GetEligibleFrame(); @@ -50,16 +56,30 @@ class CC_SURFACES_EXPORT Surface { void TakeLatencyInfo(std::vector* latency_info); void RunDrawCallbacks(); - SurfaceFactory* factory() { return factory_; } + base::WeakPtr factory() { return factory_; } + + // Add a SurfaceSequence that must be satisfied before the Surface is + // destroyed. + void AddDestructionDependency(SurfaceSequence sequence); + + // Satisfy all destruction dependencies that are contained in sequences, and + // remove them from sequences. + void SatisfyDestructionDependencies( + base::hash_set* sequences); + size_t GetDestructionDependencyCount() const { + return destruction_dependencies_.size(); + } private: + void ClearCopyRequests(); + SurfaceId surface_id_; gfx::Size size_; - SurfaceFactory* factory_; + base::WeakPtr factory_; // TODO(jamesr): Support multiple frames in flight. scoped_ptr current_frame_; int frame_index_; - ScopedPtrVector copy_requests_; + std::vector destruction_dependencies_; base::Closure draw_callback_;