Index: cc/layers/picture_layer_impl.cc |
diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc |
index f62a8664ff89f7e84467dc68813ae18ee56b99c0..e819afd860d412784301915fe1fcbd7ac857aa67 100644 |
--- a/cc/layers/picture_layer_impl.cc |
+++ b/cc/layers/picture_layer_impl.cc |
@@ -225,9 +225,9 @@ void PictureLayerImpl::AppendQuads(RenderPass* render_pass, |
if (mode == TileDrawInfo::SOLID_COLOR_MODE) { |
color = DebugColors::SolidColorTileBorderColor(); |
width = DebugColors::SolidColorTileBorderWidth(layer_tree_impl()); |
- } else if (mode == TileDrawInfo::PICTURE_PILE_MODE) { |
- color = DebugColors::PictureTileBorderColor(); |
- width = DebugColors::PictureTileBorderWidth(layer_tree_impl()); |
+ } else if (mode == TileDrawInfo::OOM_MODE) { |
+ color = DebugColors::OOMTileBorderColor(); |
+ width = DebugColors::OOMTileBorderWidth(layer_tree_impl()); |
} else if (iter.resolution() == HIGH_RESOLUTION) { |
color = DebugColors::HighResTileBorderColor(); |
width = DebugColors::HighResTileBorderWidth(layer_tree_impl()); |
@@ -313,30 +313,6 @@ void PictureLayerImpl::AppendQuads(RenderPass* render_pass, |
has_draw_quad = true; |
break; |
} |
- case TileDrawInfo::PICTURE_PILE_MODE: { |
- if (!layer_tree_impl() |
- ->GetRendererCapabilities() |
- .allow_rasterize_on_demand) { |
- ++on_demand_missing_tile_count; |
- break; |
- } |
- |
- gfx::RectF texture_rect = iter.texture_rect(); |
- |
- ResourceProvider* resource_provider = |
- layer_tree_impl()->resource_provider(); |
- ResourceFormat format = |
- resource_provider->memory_efficient_texture_format(); |
- PictureDrawQuad* quad = |
- render_pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); |
- quad->SetNew(shared_quad_state, geometry_rect, opaque_rect, |
- visible_geometry_rect, texture_rect, |
- iter->desired_texture_size(), nearest_neighbor_, format, |
- iter->content_rect(), iter->contents_scale(), |
- raster_source_); |
- has_draw_quad = true; |
- break; |
- } |
case TileDrawInfo::SOLID_COLOR_MODE: { |
SolidColorDrawQuad* quad = |
render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); |
@@ -345,6 +321,8 @@ void PictureLayerImpl::AppendQuads(RenderPass* render_pass, |
has_draw_quad = true; |
break; |
} |
+ case TileDrawInfo::OOM_MODE: |
+ break; // Checkerboard. |
} |
} |
@@ -565,6 +543,36 @@ void PictureLayerImpl::UpdateRasterSource( |
MaximumContentsScale()); |
} |
+void PictureLayerImpl::UpdateCanUseLCDTextAfterCommit() { |
+ // This function is only allowed to be called after commit, due to it not |
+ // being smart about sharing tiles and because otherwise it would cause |
+ // flashes by switching out tiles in place that may be currently on screen. |
+ DCHECK(layer_tree_impl()->IsSyncTree()); |
+ |
+ // Don't allow the LCD text state to change once disabled. |
+ if (!RasterSourceUsesLCDText()) |
+ return; |
+ if (can_use_lcd_text() == RasterSourceUsesLCDText()) |
+ return; |
+ |
+ // Raster sources are considered const, so in order to update the state |
+ // a new one must be created and all tiles recreated. |
+ scoped_refptr<RasterSource> new_raster_source = |
+ raster_source_->CreateCloneWithoutLCDText(); |
+ // Synthetically invalidate everything. |
+ gfx::Rect bounds_rect(bounds()); |
+ Region invalidation(bounds_rect); |
+ UpdateRasterSource(new_raster_source, &invalidation, nullptr); |
+ SetUpdateRect(bounds_rect); |
+ |
+ DCHECK(!RasterSourceUsesLCDText()); |
+} |
+ |
+bool PictureLayerImpl::RasterSourceUsesLCDText() const { |
+ return raster_source_ ? raster_source_->CanUseLCDText() |
+ : layer_tree_impl()->settings().can_use_lcd_text; |
+} |
+ |
void PictureLayerImpl::NotifyTileStateChanged(const Tile* tile) { |
if (layer_tree_impl()->IsActiveTree()) { |
gfx::RectF layer_damage_rect = |