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 "ui/gfx/rect.h" 12 #include "ui/gfx/vector2d.h" 13 14 namespace cc { 15 16 class PrioritizedResource; 17 class PrioritizedResourceManager; 18 class ResourceUpdateQueue; 19 class TextureManager; 20 21 class CC_EXPORT LayerUpdater : public base::RefCounted<LayerUpdater> { 22 public: 23 // Allows updaters to store per-resource update properties. 24 class CC_EXPORT Resource { 25 public: 26 virtual ~Resource(); 27 28 PrioritizedResource* texture() { return texture_.get(); } 29 // TODO(reveman): partial_update should be a property of this class 30 // instead of an argument passed to Update(). 31 virtual void Update(ResourceUpdateQueue* queue, 32 gfx::Rect source_rect, 33 gfx::Vector2d dest_offset, 34 bool partial_update) = 0; 35 protected: 36 explicit Resource(scoped_ptr<PrioritizedResource> texture); 37 38 private: 39 scoped_ptr<PrioritizedResource> texture_; 40 41 DISALLOW_COPY_AND_ASSIGN(Resource); 42 }; 43 44 LayerUpdater() {} 45 46 virtual scoped_ptr<Resource> CreateResource( 47 PrioritizedResourceManager* manager) = 0; 48 // The |resulting_opaque_rect| gives back a region of the layer that was 49 // painted opaque. If the layer is marked opaque in the updater, then this 50 // region should be ignored in preference for the entire layer's area. 51 virtual void PrepareToUpdate(gfx::Rect content_rect, 52 gfx::Size tile_size, 53 float contents_width_scale, 54 float contents_height_scale, 55 gfx::Rect* resulting_opaque_rect) {} 56 virtual void ReduceMemoryUsage() {} 57 58 // Set true by the layer when it is known that the entire output is going to 59 // be opaque. 60 virtual void SetOpaque(bool opaque) {} 61 62 protected: 63 virtual ~LayerUpdater() {} 64 65 private: 66 friend class base::RefCounted<LayerUpdater>; 67 68 DISALLOW_COPY_AND_ASSIGN(LayerUpdater); 69 }; 70 71 } // namespace cc 72 73 #endif // CC_RESOURCES_LAYER_UPDATER_H_ 74