| 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 =
 | 
| 
 |