1 // Copyright 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CC_RESOURCES_LAYER_UPDATER_H_ 6 #define CC_RESOURCES_LAYER_UPDATER_H_ 7 8 #include "base/memory/ref_counted.h" 9 #include "base/memory/scoped_ptr.h" 10 #include "cc/base/cc_export.h" 11 #include "third_party/skia/include/core/SkColor.h" 12 #include "ui/gfx/rect.h" 13 #include "ui/gfx/vector2d.h" 14 15 namespace cc { 16 17 class PrioritizedResource; 18 class PrioritizedResourceManager; 19 class ResourceUpdateQueue; 20 class TextureManager; 21 22 class CC_EXPORT LayerUpdater : public base::RefCounted<LayerUpdater> { 23 public: 24 // Allows updaters to store per-resource update properties. 25 class CC_EXPORT Resource { 26 public: 27 virtual ~Resource(); 28 29 PrioritizedResource* texture() { return texture_.get(); } 30 // TODO(reveman): partial_update should be a property of this class 31 // instead of an argument passed to Update(). 32 virtual void Update(ResourceUpdateQueue* queue, 33 const gfx::Rect& source_rect, 34 const gfx::Vector2d& dest_offset, 35 bool partial_update) = 0; 36 37 protected: 38 explicit Resource(scoped_ptr<PrioritizedResource> texture); 39 40 private: 41 scoped_ptr<PrioritizedResource> texture_; 42 43 DISALLOW_COPY_AND_ASSIGN(Resource); 44 }; 45 46 LayerUpdater() {} 47 48 virtual scoped_ptr<Resource> CreateResource( 49 PrioritizedResourceManager* manager) = 0; 50 virtual void PrepareToUpdate(const gfx::Size& content_size, 51 const gfx::Rect& paint_rect, 52 const gfx::Size& tile_size, 53 float contents_width_scale, 54 float contents_height_scale) {} 55 virtual void ReduceMemoryUsage() {} 56 57 // Set true by the layer when it is known that the entire output is going to 58 // be opaque. 59 virtual void SetOpaque(bool opaque) {} 60 // Set true by the layer when it is known that the entire output bounds will 61 // be rasterized. 62 virtual void SetFillsBoundsCompletely(bool fills_bounds) {} 63 virtual void SetBackgroundColor(SkColor background_color) {} 64 65 protected: 66 virtual ~LayerUpdater() {} 67 68 private: 69 friend class base::RefCounted<LayerUpdater>; 70 71 DISALLOW_COPY_AND_ASSIGN(LayerUpdater); 72 }; 73 74 } // namespace cc 75 76 #endif // CC_RESOURCES_LAYER_UPDATER_H_ 77