picture_pile_base.h revision 868fa2fe829687343ffae624259930155e16dbd8
1// Copyright 2013 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_PICTURE_PILE_BASE_H_ 6#define CC_RESOURCES_PICTURE_PILE_BASE_H_ 7 8#include <list> 9#include <utility> 10 11#include "base/hash_tables.h" 12#include "base/memory/ref_counted.h" 13#include "cc/base/cc_export.h" 14#include "cc/base/hash_pair.h" 15#include "cc/base/region.h" 16#include "cc/base/tiling_data.h" 17#include "cc/resources/picture.h" 18#include "ui/gfx/size.h" 19 20namespace base { 21class Value; 22} 23 24namespace cc { 25 26class CC_EXPORT PicturePileBase : public base::RefCounted<PicturePileBase> { 27 public: 28 PicturePileBase(); 29 explicit PicturePileBase(const PicturePileBase* other); 30 PicturePileBase(const PicturePileBase* other, unsigned thread_index); 31 32 void Resize(gfx::Size size); 33 gfx::Size size() const { return tiling_.total_size(); } 34 void SetMinContentsScale(float min_contents_scale); 35 36 void UpdateRecordedRegion(); 37 const Region& recorded_region() const { return recorded_region_; } 38 39 int num_tiles_x() const { return tiling_.num_tiles_x(); } 40 int num_tiles_y() const { return tiling_.num_tiles_y(); } 41 gfx::Rect tile_bounds(int x, int y) const { return tiling_.TileBounds(x, y); } 42 bool HasRecordingAt(int x, int y); 43 bool CanRaster(float contents_scale, gfx::Rect content_rect); 44 45 void SetTileGridSize(gfx::Size tile_grid_size); 46 TilingData& tiling() { return tiling_; } 47 48 scoped_ptr<base::Value> AsValue() const; 49 50 protected: 51 virtual ~PicturePileBase(); 52 53 int num_raster_threads() { return num_raster_threads_; } 54 int buffer_pixels() const { return tiling_.border_texels(); } 55 void Clear(); 56 57 typedef std::pair<int, int> PictureListMapKey; 58 typedef std::list<scoped_refptr<Picture> > PictureList; 59 typedef base::hash_map<PictureListMapKey, PictureList> PictureListMap; 60 61 // A picture pile is a tiled set of picture lists. The picture list map 62 // is a map of tile indices to picture lists. 63 PictureListMap picture_list_map_; 64 TilingData tiling_; 65 Region recorded_region_; 66 float min_contents_scale_; 67 SkTileGridPicture::TileGridInfo tile_grid_info_; 68 SkColor background_color_; 69 bool contents_opaque_; 70 int slow_down_raster_scale_factor_for_debug_; 71 bool show_debug_picture_borders_; 72 int num_raster_threads_; 73 74 private: 75 void SetBufferPixels(int buffer_pixels); 76 77 friend class base::RefCounted<PicturePileBase>; 78 DISALLOW_COPY_AND_ASSIGN(PicturePileBase); 79}; 80 81} // namespace cc 82 83#endif // CC_RESOURCES_PICTURE_PILE_BASE_H_ 84