| OLD | NEW | 
|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #ifndef COMPONENTS_EXO_SURFACE_H_ | 5 #ifndef COMPONENTS_EXO_SURFACE_H_ | 
| 6 #define COMPONENTS_EXO_SURFACE_H_ | 6 #define COMPONENTS_EXO_SURFACE_H_ | 
| 7 | 7 | 
| 8 #include <list> | 8 #include <list> | 
| 9 #include <memory> | 9 #include <memory> | 
| 10 #include <set> | 10 #include <set> | 
| 11 #include <utility> | 11 #include <utility> | 
| 12 | 12 | 
| 13 #include "base/callback.h" | 13 #include "base/callback.h" | 
| 14 #include "base/macros.h" | 14 #include "base/macros.h" | 
| 15 #include "base/memory/ref_counted.h" | 15 #include "base/memory/ref_counted.h" | 
| 16 #include "base/memory/weak_ptr.h" | 16 #include "base/memory/weak_ptr.h" | 
| 17 #include "base/observer_list.h" | 17 #include "base/observer_list.h" | 
| 18 #include "cc/resources/transferable_resource.h" | 18 #include "cc/resources/transferable_resource.h" | 
| 19 #include "cc/scheduler/begin_frame_source.h" | 19 #include "cc/scheduler/begin_frame_source.h" | 
| 20 #include "cc/surfaces/surface_factory_client.h" | 20 #include "cc/surfaces/surface_factory_client.h" | 
|  | 21 #include "cc/surfaces/surface_id.h" | 
|  | 22 #include "cc/surfaces/surface_id_allocator.h" | 
|  | 23 #include "components/exo/compositor_frame_sink_holder.h" | 
|  | 24 #include "components/exo/exo_compositor_frame_sink.h" | 
| 21 #include "third_party/skia/include/core/SkBlendMode.h" | 25 #include "third_party/skia/include/core/SkBlendMode.h" | 
| 22 #include "third_party/skia/include/core/SkRegion.h" | 26 #include "third_party/skia/include/core/SkRegion.h" | 
| 23 #include "ui/aura/window.h" | 27 #include "ui/aura/window.h" | 
| 24 #include "ui/aura/window_observer.h" | 28 #include "ui/aura/window_observer.h" | 
| 25 #include "ui/gfx/geometry/rect.h" | 29 #include "ui/gfx/geometry/rect.h" | 
| 26 | 30 | 
| 27 namespace base { | 31 namespace base { | 
| 28 namespace trace_event { | 32 namespace trace_event { | 
| 29 class TracedValue; | 33 class TracedValue; | 
| 30 } | 34 } | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
| 50 struct SurfaceProperty; | 54 struct SurfaceProperty; | 
| 51 | 55 | 
| 52 namespace subtle { | 56 namespace subtle { | 
| 53 class PropertyHelper; | 57 class PropertyHelper; | 
| 54 } | 58 } | 
| 55 | 59 | 
| 56 // The pointer class is currently the only cursor provider class but this can | 60 // The pointer class is currently the only cursor provider class but this can | 
| 57 // change in the future when better hardware cursor support is added. | 61 // change in the future when better hardware cursor support is added. | 
| 58 using CursorProvider = Pointer; | 62 using CursorProvider = Pointer; | 
| 59 | 63 | 
| 60 // This class owns the SurfaceFactory and keeps track of references to the |  | 
| 61 // contents of Buffers. It's keeped alive by references from |  | 
| 62 // release_callbacks_. It's destroyed when its owning Surface is destroyed and |  | 
| 63 // the last outstanding release callback is called. |  | 
| 64 class SurfaceFactoryOwner : public base::RefCounted<SurfaceFactoryOwner>, |  | 
| 65                             public cc::SurfaceFactoryClient { |  | 
| 66  public: |  | 
| 67   SurfaceFactoryOwner(); |  | 
| 68 |  | 
| 69   // Overridden from cc::SurfaceFactoryClient: |  | 
| 70   void ReturnResources(const cc::ReturnedResourceArray& resources) override; |  | 
| 71   void WillDrawSurface(const cc::LocalFrameId& id, |  | 
| 72                        const gfx::Rect& damage_rect) override; |  | 
| 73   void SetBeginFrameSource(cc::BeginFrameSource* begin_frame_source) override; |  | 
| 74 |  | 
| 75  private: |  | 
| 76   friend class base::RefCounted<SurfaceFactoryOwner>; |  | 
| 77   friend class Surface; |  | 
| 78 |  | 
| 79   ~SurfaceFactoryOwner() override; |  | 
| 80 |  | 
| 81   std::map<int, |  | 
| 82            std::pair<scoped_refptr<SurfaceFactoryOwner>, |  | 
| 83                      std::unique_ptr<cc::SingleReleaseCallback>>> |  | 
| 84       release_callbacks_; |  | 
| 85   cc::FrameSinkId frame_sink_id_; |  | 
| 86   std::unique_ptr<cc::SurfaceIdAllocator> id_allocator_; |  | 
| 87   std::unique_ptr<cc::SurfaceFactory> surface_factory_; |  | 
| 88   Surface* surface_ = nullptr; |  | 
| 89 }; |  | 
| 90 |  | 
| 91 // This class represents a rectangular area that is displayed on the screen. | 64 // This class represents a rectangular area that is displayed on the screen. | 
| 92 // It has a location, size and pixel contents. | 65 // It has a location, size and pixel contents. | 
| 93 class Surface : public ui::ContextFactoryObserver, | 66 class Surface : public ui::ContextFactoryObserver, | 
| 94                 public aura::WindowObserver, | 67                 public aura::WindowObserver, | 
| 95                 public cc::BeginFrameObserver { | 68                 public cc::BeginFrameObserver { | 
| 96  public: | 69  public: | 
| 97   using PropertyDeallocator = void (*)(int64_t value); | 70   using PropertyDeallocator = void (*)(int64_t value); | 
| 98 | 71 | 
| 99   Surface(); | 72   Surface(); | 
| 100   ~Surface() override; | 73   ~Surface() override; | 
| 101 | 74 | 
| 102   // Type-checking downcast routine. | 75   // Type-checking downcast routine. | 
| 103   static Surface* AsSurface(const aura::Window* window); | 76   static Surface* AsSurface(const aura::Window* window); | 
| 104 | 77 | 
| 105   aura::Window* window() { return window_.get(); } | 78   aura::Window* window() { return window_.get(); } | 
| 106 | 79 | 
| 107   const cc::LocalFrameId& local_frame_id() const { return local_frame_id_; } |  | 
| 108   cc::SurfaceId GetSurfaceId() const; | 80   cc::SurfaceId GetSurfaceId() const; | 
| 109 | 81 | 
| 110   // Set a buffer as the content of this surface. A buffer can only be attached | 82   // Set a buffer as the content of this surface. A buffer can only be attached | 
| 111   // to one surface at a time. | 83   // to one surface at a time. | 
| 112   void Attach(Buffer* buffer); | 84   void Attach(Buffer* buffer); | 
| 113 | 85 | 
| 114   // Describe the regions where the pending buffer is different from the | 86   // Describe the regions where the pending buffer is different from the | 
| 115   // current surface contents, and where the surface therefore needs to be | 87   // current surface contents, and where the surface therefore needs to be | 
| 116   // repainted. | 88   // repainted. | 
| 117   void Damage(const gfx::Rect& rect); | 89   void Damage(const gfx::Rect& rect); | 
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 343   // This is the size of the last committed contents. | 315   // This is the size of the last committed contents. | 
| 344   gfx::Size content_size_; | 316   gfx::Size content_size_; | 
| 345 | 317 | 
| 346   // This is true when Attach() has been called and new contents should take | 318   // This is true when Attach() has been called and new contents should take | 
| 347   // effect next time Commit() is called. | 319   // effect next time Commit() is called. | 
| 348   bool has_pending_contents_ = false; | 320   bool has_pending_contents_ = false; | 
| 349 | 321 | 
| 350   // The buffer that will become the content of surface when Commit() is called. | 322   // The buffer that will become the content of surface when Commit() is called. | 
| 351   BufferAttachment pending_buffer_; | 323   BufferAttachment pending_buffer_; | 
| 352 | 324 | 
|  | 325   const cc::FrameSinkId frame_sink_id_; | 
|  | 326 | 
|  | 327   // std::unique_ptr<cc::ExternalBeginFrameSource> begin_frame_source_; | 
|  | 328 | 
| 353   cc::SurfaceManager* surface_manager_; | 329   cc::SurfaceManager* surface_manager_; | 
| 354 | 330 | 
| 355   scoped_refptr<SurfaceFactoryOwner> factory_owner_; | 331   scoped_refptr<CompositorFrameSinkHolder> compositor_frame_sink_holder_; | 
| 356 | 332 | 
| 357   // The Surface Id currently attached to the window. | 333   cc::SurfaceIdAllocator id_allocator_; | 
|  | 334 | 
| 358   cc::LocalFrameId local_frame_id_; | 335   cc::LocalFrameId local_frame_id_; | 
| 359 | 336 | 
| 360   // The next resource id the buffer will be attached to. | 337   // The next resource id the buffer will be attached to. | 
| 361   int next_resource_id_ = 1; | 338   int next_resource_id_ = 1; | 
| 362 | 339 | 
| 363   // The damage region to schedule paint for when Commit() is called. | 340   // The damage region to schedule paint for when Commit() is called. | 
| 364   SkRegion pending_damage_; | 341   SkRegion pending_damage_; | 
| 365 | 342 | 
| 366   // These lists contains the callbacks to notify the client when it is a good | 343   // These lists contains the callbacks to notify the client when it is a good | 
| 367   // time to start producing a new frame. These callbacks move to | 344   // time to start producing a new frame. These callbacks move to | 
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 416     const char* name; | 393     const char* name; | 
| 417     int64_t value; | 394     int64_t value; | 
| 418     PropertyDeallocator deallocator; | 395     PropertyDeallocator deallocator; | 
| 419   }; | 396   }; | 
| 420 | 397 | 
| 421   std::map<const void*, Value> prop_map_; | 398   std::map<const void*, Value> prop_map_; | 
| 422 | 399 | 
| 423   // Surface observer list. Surface does not own the observers. | 400   // Surface observer list. Surface does not own the observers. | 
| 424   base::ObserverList<SurfaceObserver, true> observers_; | 401   base::ObserverList<SurfaceObserver, true> observers_; | 
| 425 | 402 | 
|  | 403   base::WeakPtrFactory<Surface> weak_ptr_factory_; | 
|  | 404 | 
| 426   DISALLOW_COPY_AND_ASSIGN(Surface); | 405   DISALLOW_COPY_AND_ASSIGN(Surface); | 
| 427 }; | 406 }; | 
| 428 | 407 | 
| 429 }  // namespace exo | 408 }  // namespace exo | 
| 430 | 409 | 
| 431 #endif  // COMPONENTS_EXO_SURFACE_H_ | 410 #endif  // COMPONENTS_EXO_SURFACE_H_ | 
| OLD | NEW | 
|---|