Chromium Code Reviews| Index: cc/resources/pixel_ref_map.h |
| diff --git a/cc/resources/pixel_ref_map.h b/cc/resources/pixel_ref_map.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..11fe7bad3571a710030965418aa46637bcfc0976 |
| --- /dev/null |
| +++ b/cc/resources/pixel_ref_map.h |
| @@ -0,0 +1,85 @@ |
| +// Copyright 2015 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_PIXEL_REF_MAP_H_ |
| +#define CC_RESOURCES_PIXEL_REF_MAP_H_ |
| + |
| +#include <utility> |
| +#include <vector> |
| + |
| +#include "base/containers/hash_tables.h" |
| +#include "base/lazy_instance.h" |
| +#include "base/memory/ref_counted.h" |
| +#include "cc/base/cc_export.h" |
| +#include "third_party/skia/include/core/SkPicture.h" |
| +#include "ui/gfx/geometry/rect.h" |
| +#include "ui/gfx/geometry/size.h" |
| + |
| +class SkPixelRef; |
| + |
| +namespace cc { |
| + |
| +class Picture; |
| + |
| +typedef std::pair<int, int> PixelRefMapKey; |
| +typedef std::vector<SkPixelRef*> PixelRefs; |
| + |
| +// This class is used and owned by cc Picture class. It is used to gather pixel |
| +// refs which would happen after record. It takes in |tile_grid_size| to decide |
|
ajuma
2015/02/11 15:29:03
s/"tile_grid_size"/"cell_size"?
|
| +// how big each grid should be. |
|
ajuma
2015/02/11 15:29:03
s/"each grid"/"each grid cell"?
|
| +class CC_EXPORT PixelRefMap : public base::hash_map<PixelRefMapKey, PixelRefs> { |
| + public: |
| + explicit PixelRefMap(const gfx::Size& cell_size); |
| + ~PixelRefMap(); |
| + void GatherPixelRefsFromPicture(SkPicture* picture); |
| + |
| + private: |
| + gfx::Point min_pixel_cell_; |
| + gfx::Point max_pixel_cell_; |
| + gfx::Size cell_size_; |
| + |
| + friend class PixelRefMapIterator; |
| +}; |
| + |
| +// This iterator imprecisely returns the set of pixel refs that are needed to |
| +// raster this layer rect from this picture. Internally, pixel refs are |
| +// clumped into tile grid buckets, so there may be false positives. |
| +class CC_EXPORT PixelRefMapIterator { |
| + public: |
| + // Default iterator constructor that is used as place holder for invalid |
| + // PixelRefMapIterator. |
| + PixelRefMapIterator(); |
| + PixelRefMapIterator(const gfx::Rect& layer_rect, const Picture* picture); |
| + ~PixelRefMapIterator(); |
| + |
| + SkPixelRef* operator->() const { |
| + DCHECK_LT(current_index_, current_pixel_refs_->size()); |
| + return (*current_pixel_refs_)[current_index_]; |
| + } |
| + |
| + SkPixelRef* operator*() const { |
| + DCHECK_LT(current_index_, current_pixel_refs_->size()); |
| + return (*current_pixel_refs_)[current_index_]; |
| + } |
| + |
| + PixelRefMapIterator& operator++(); |
| + operator bool() const { return current_index_ < current_pixel_refs_->size(); } |
| + |
| + private: |
| + static base::LazyInstance<PixelRefs> empty_pixel_refs_; |
| + const PixelRefMap* map_; |
| + const PixelRefs* current_pixel_refs_; |
| + unsigned current_index_; |
| + |
| + gfx::Rect layer_rect_; |
| + |
| + gfx::Point min_point_; |
| + gfx::Point max_point_; |
| + int current_x_; |
| + int current_y_; |
| +}; |
| + |
| +} // namespace cc |
| + |
| +#endif // CC_RESOURCES_PIXEL_REF_MAP_H_ |