Home | History | Annotate | Download | only in resources
      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