summaryrefslogtreecommitdiff
path: root/chromium/cc/resources/layer_updater.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/cc/resources/layer_updater.h')
-rw-r--r--chromium/cc/resources/layer_updater.h73
1 files changed, 73 insertions, 0 deletions
diff --git a/chromium/cc/resources/layer_updater.h b/chromium/cc/resources/layer_updater.h
new file mode 100644
index 00000000000..5d8eb89ad4e
--- /dev/null
+++ b/chromium/cc/resources/layer_updater.h
@@ -0,0 +1,73 @@
+// Copyright 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CC_RESOURCES_LAYER_UPDATER_H_
+#define CC_RESOURCES_LAYER_UPDATER_H_
+
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
+#include "cc/base/cc_export.h"
+#include "ui/gfx/rect.h"
+#include "ui/gfx/vector2d.h"
+
+namespace cc {
+
+class PrioritizedResource;
+class PrioritizedResourceManager;
+class ResourceUpdateQueue;
+class TextureManager;
+
+class CC_EXPORT LayerUpdater : public base::RefCounted<LayerUpdater> {
+ public:
+ // Allows updaters to store per-resource update properties.
+ class CC_EXPORT Resource {
+ public:
+ virtual ~Resource();
+
+ PrioritizedResource* texture() { return texture_.get(); }
+ // TODO(reveman): partial_update should be a property of this class
+ // instead of an argument passed to Update().
+ virtual void Update(ResourceUpdateQueue* queue,
+ gfx::Rect source_rect,
+ gfx::Vector2d dest_offset,
+ bool partial_update) = 0;
+ protected:
+ explicit Resource(scoped_ptr<PrioritizedResource> texture);
+
+ private:
+ scoped_ptr<PrioritizedResource> texture_;
+
+ DISALLOW_COPY_AND_ASSIGN(Resource);
+ };
+
+ LayerUpdater() {}
+
+ virtual scoped_ptr<Resource> CreateResource(
+ PrioritizedResourceManager* manager) = 0;
+ // The |resulting_opaque_rect| gives back a region of the layer that was
+ // painted opaque. If the layer is marked opaque in the updater, then this
+ // region should be ignored in preference for the entire layer's area.
+ virtual void PrepareToUpdate(gfx::Rect content_rect,
+ gfx::Size tile_size,
+ float contents_width_scale,
+ float contents_height_scale,
+ gfx::Rect* resulting_opaque_rect) {}
+ virtual void ReduceMemoryUsage() {}
+
+ // Set true by the layer when it is known that the entire output is going to
+ // be opaque.
+ virtual void SetOpaque(bool opaque) {}
+
+ protected:
+ virtual ~LayerUpdater() {}
+
+ private:
+ friend class base::RefCounted<LayerUpdater>;
+
+ DISALLOW_COPY_AND_ASSIGN(LayerUpdater);
+};
+
+} // namespace cc
+
+#endif // CC_RESOURCES_LAYER_UPDATER_H_