12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CC_RESOURCES_PICTURE_PILE_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CC_RESOURCES_PICTURE_PILE_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/picture_pile_base.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/rect.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PicturePileImpl; 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Region; 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass RenderingStatsInstrumentation; 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT PicturePile : public PicturePileBase { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PicturePile(); 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Re-record parts of the picture that are invalid. 21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Invalidations are in layer space, and will be expanded to cover everything 22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // that was either recorded/changed or that has no recording, leaving out only 23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // pieces that we had a recording for and it was not changed. 247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Return true iff the pile was modified. 25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool UpdateAndExpandInvalidation( 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ContentLayerClient* painter, 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Region* invalidation, 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SkColor background_color, 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool contents_opaque, 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool contents_fill_bounds_completely, 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const gfx::Size& layer_size, 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const gfx::Rect& visible_layer_rect, 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int frame_number, 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Picture::RecordingMode recording_mode, 35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) RenderingStatsInstrumentation* stats_instrumentation); 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void SetEmptyBounds(); 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_slow_down_raster_scale_factor(int factor) { 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) slow_down_raster_scale_factor_for_debug_ = factor; 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void set_show_debug_picture_borders(bool show) { 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) show_debug_picture_borders_ = show; 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 47a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch bool is_suitable_for_gpu_rasterization() const { 48a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return is_suitable_for_gpu_rasterization_; 49a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 50a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch void SetUnsuitableForGpuRasterizationForTesting() { 51a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch is_suitable_for_gpu_rasterization_ = false; 52a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 53a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 545b62eb5758cb7b791cfdd45cf78f35dc060631b6Ben Murdoch void SetPixelRecordDistanceForTesting(int d) { pixel_record_distance_ = d; } 555b62eb5758cb7b791cfdd45cf78f35dc060631b6Ben Murdoch 56b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) protected: 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~PicturePile(); 58b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 59b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) private: 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class PicturePileImpl; 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void DetermineIfSolidColor(); 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 64a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch bool is_suitable_for_gpu_rasterization_; 655b62eb5758cb7b791cfdd45cf78f35dc060631b6Ben Murdoch int pixel_record_distance_; 66a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PicturePile); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CC_RESOURCES_PICTURE_PILE_H_ 73