Chromium Code Reviews| Index: cc/resources/picture_pile.h |
| diff --git a/cc/resources/picture_pile.h b/cc/resources/picture_pile.h |
| index 4ad57b338eb60fed4ce1ea6048aa32a29c51b722..b894e5619fb18b8b0bd2fe2e9d9093099b0dcd74 100644 |
| --- a/cc/resources/picture_pile.h |
| +++ b/cc/resources/picture_pile.h |
| @@ -5,17 +5,16 @@ |
| #ifndef CC_RESOURCES_PICTURE_PILE_H_ |
| #define CC_RESOURCES_PICTURE_PILE_H_ |
| +#include <bitset> |
| + |
| #include "base/memory/ref_counted.h" |
| -#include "cc/resources/picture_pile_base.h" |
| +#include "cc/base/tiling_data.h" |
| #include "cc/resources/recording_source.h" |
| namespace cc { |
| -class ContentLayerClient; |
| class PicturePileImpl; |
| -class Region; |
| -class RenderingStatsInstrumentation; |
| -class CC_EXPORT PicturePile : public PicturePileBase, public RecordingSource { |
|
vmpstr
2014/11/12 19:18:59
\o/
|
| +class CC_EXPORT PicturePile : public RecordingSource { |
| public: |
| PicturePile(); |
| ~PicturePile() override; |
| @@ -30,32 +29,91 @@ class CC_EXPORT PicturePile : public PicturePileBase, public RecordingSource { |
| const gfx::Rect& visible_layer_rect, |
| int frame_number, |
| Picture::RecordingMode recording_mode) override; |
| - gfx::Size GetSize() const override; |
| + gfx::Size GetSize() const final; |
|
vmpstr
2014/11/12 19:18:59
Why final?
hendrikw
2014/11/12 19:37:32
Early optimization :) It really doesn't matter, b
|
| void SetEmptyBounds() override; |
|
vmpstr
2014/11/12 19:18:59
Can you group all of the overrides/finals together
hendrikw
2014/11/12 19:37:32
Yes!
|
| void SetMinContentsScale(float min_contents_scale) override; |
| void SetTileGridSize(const gfx::Size& tile_grid_size) override; |
| void SetSlowdownRasterScaleFactor(int factor) override; |
| - void SetShowDebugPictureBorders(bool show) override; |
| void SetIsMask(bool is_mask) override; |
| bool IsSuitableForGpuRasterization() const override; |
| scoped_refptr<RasterSource> CreateRasterSource() const override; |
| void SetUnsuitableForGpuRasterizationForTesting() override; |
| SkTileGridFactory::TileGridInfo GetTileGridInfoForTesting() const override; |
| - void SetPixelRecordDistanceForTesting(int d) { pixel_record_distance_ = d; } |
| + static void ComputeTileGridInfo(const gfx::Size& tile_grid_size, |
| + SkTileGridFactory::TileGridInfo* info); |
| protected: |
| + class CC_EXPORT PictureInfo { |
| + public: |
| + enum { INVALIDATION_FRAMES_TRACKED = 32 }; |
| + |
| + PictureInfo(); |
| + ~PictureInfo(); |
| + |
| + bool Invalidate(int frame_number); |
| + bool NeedsRecording(int frame_number, int distance_to_visible); |
| + void SetPicture(scoped_refptr<Picture> picture); |
| + const Picture* GetPicture() const; |
| + |
| + float GetInvalidationFrequencyForTesting() const { |
| + return GetInvalidationFrequency(); |
| + } |
| + |
| + private: |
| + void AdvanceInvalidationHistory(int frame_number); |
| + float GetInvalidationFrequency() const; |
| + |
| + int last_frame_number_; |
| + scoped_refptr<const Picture> picture_; |
| + std::bitset<INVALIDATION_FRAMES_TRACKED> invalidation_history_; |
| + }; |
| + |
| + typedef std::pair<int, int> PictureMapKey; |
| + typedef base::hash_map<PictureMapKey, PictureInfo> PictureMap; |
| + |
| // An internal CanRaster check that goes to the picture_map rather than |
| // using the recorded_viewport hint. |
| bool CanRasterSlowTileCheck(const gfx::Rect& layer_rect) const; |
| + void Clear(); |
| + |
| + gfx::Rect PaddedRect(const PictureMapKey& key) const; |
| + gfx::Rect PadRect(const gfx::Rect& rect) const; |
| + |
| + int buffer_pixels() const { return tiling_.border_texels(); } |
| + |
| + // A picture pile is a tiled set of pictures. The picture map is a map of tile |
| + // indices to picture infos. |
| + PictureMap picture_map_; |
| + TilingData tiling_; |
| + |
| + // If non-empty, all pictures tiles inside this rect are recorded. There may |
| + // be recordings outside this rect, but everything inside the rect is |
| + // recorded. |
| + gfx::Rect recorded_viewport_; |
| + float min_contents_scale_; |
| + SkTileGridFactory::TileGridInfo tile_grid_info_; |
| + SkColor background_color_; |
| + int slow_down_raster_scale_factor_for_debug_; |
| + bool contents_opaque_; |
| + bool contents_fill_bounds_completely_; |
| + bool clear_canvas_with_debug_color_; |
| + // A hint about whether there are any recordings. This may be a false |
| + // positive. |
| + bool has_any_recordings_; |
| + bool is_mask_; |
| + bool is_solid_color_; |
| + SkColor solid_color_; |
| + int pixel_record_distance_; |
| + |
| private: |
| friend class PicturePileImpl; |
| void DetermineIfSolidColor(); |
| + void SetBufferPixels(int buffer_pixels); |
| bool is_suitable_for_gpu_rasterization_; |
| - int pixel_record_distance_; |
| DISALLOW_COPY_AND_ASSIGN(PicturePile); |
| }; |