Index: cc/resources/picture_pile.cc |
diff --git a/cc/resources/picture_pile.cc b/cc/resources/picture_pile.cc |
index eed12ea71134af6d44bbc3c4a3f285fd1098ef1e..97cd127c62d4e4fc8e3a00cc83112933fac72f20 100644 |
--- a/cc/resources/picture_pile.cc |
+++ b/cc/resources/picture_pile.cc |
@@ -164,6 +164,7 @@ namespace cc { |
PicturePile::PicturePile() |
: min_contents_scale_(0), |
slow_down_raster_scale_factor_for_debug_(0), |
+ can_use_lcd_text_(true), |
has_any_recordings_(false), |
is_solid_color_(false), |
solid_color_(SK_ColorTRANSPARENT), |
@@ -181,18 +182,30 @@ PicturePile::~PicturePile() { |
bool PicturePile::UpdateAndExpandInvalidation( |
ContentLayerClient* painter, |
Region* invalidation, |
+ bool can_use_lcd_text, |
const gfx::Size& layer_size, |
const gfx::Rect& visible_layer_rect, |
int frame_number, |
Picture::RecordingMode recording_mode) { |
+ bool can_use_lcd_text_changed = can_use_lcd_text_ != can_use_lcd_text; |
+ can_use_lcd_text_ = can_use_lcd_text; |
+ |
bool updated = false; |
- Region resize_invalidation; |
+ Region synthetic_invalidation; |
gfx::Size old_tiling_size = GetSize(); |
if (old_tiling_size != layer_size) { |
tiling_.SetTilingSize(layer_size); |
updated = true; |
} |
+ if (can_use_lcd_text_changed) { |
+ // When LCD text is enabled/disabled, we must drop any raster tiles for |
+ // the pile, so they can be recreated in a manner consistent with the new |
+ // setting. We do this with |synthetic_invalidation| since we don't need to |
+ // do a new recording, just invalidate rastered content. |
+ synthetic_invalidation.Union(gfx::Rect(GetSize())); |
+ updated = true; |
+ } |
gfx::Rect interest_rect = visible_layer_rect; |
interest_rect.Inset(-pixel_record_distance_, -pixel_record_distance_); |
@@ -356,11 +369,11 @@ bool PicturePile::UpdateAndExpandInvalidation( |
exposed_top, |
exposed_left_until - exposed_left, |
exposed_bottom - exposed_top); |
- resize_invalidation.Union(left_rect); |
- resize_invalidation.Union(right_rect); |
- resize_invalidation.Union(top_rect); |
- resize_invalidation.Union(bottom_rect); |
- resize_invalidation.Union(exposed_rect); |
+ synthetic_invalidation.Union(left_rect); |
+ synthetic_invalidation.Union(right_rect); |
+ synthetic_invalidation.Union(top_rect); |
+ synthetic_invalidation.Union(bottom_rect); |
+ synthetic_invalidation.Union(exposed_rect); |
} |
if (min_toss_y < tiling_.num_tiles_y()) { |
// The same thing occurs here as in the case above, but the invalidation |
@@ -392,11 +405,11 @@ bool PicturePile::UpdateAndExpandInvalidation( |
exposed_top, |
exposed_right - exposed_left, |
exposed_top_until - exposed_top); |
- resize_invalidation.Union(left_rect); |
- resize_invalidation.Union(right_rect); |
- resize_invalidation.Union(top_rect); |
- resize_invalidation.Union(bottom_rect); |
- resize_invalidation.Union(exposed_rect); |
+ synthetic_invalidation.Union(left_rect); |
+ synthetic_invalidation.Union(right_rect); |
+ synthetic_invalidation.Union(top_rect); |
+ synthetic_invalidation.Union(bottom_rect); |
+ synthetic_invalidation.Union(exposed_rect); |
} |
} |
@@ -458,7 +471,7 @@ bool PicturePile::UpdateAndExpandInvalidation( |
invalidation->Union(invalidation_expanded_to_full_tiles); |
} |
- invalidation->Union(resize_invalidation); |
+ invalidation->Union(synthetic_invalidation); |
// Make a list of all invalid tiles; we will attempt to |
// cluster these into multiple invalidation regions. |