| Index: cc/test/fake_picture_pile_impl.cc
 | 
| diff --git a/cc/test/fake_picture_pile_impl.cc b/cc/test/fake_picture_pile_impl.cc
 | 
| index bdba09255fe419c72ffa8d202409fe98cc91e4db..8353d271ee25a35d3bbbf706c40bb4c9d663c31b 100644
 | 
| --- a/cc/test/fake_picture_pile_impl.cc
 | 
| +++ b/cc/test/fake_picture_pile_impl.cc
 | 
| @@ -10,7 +10,6 @@
 | 
|  
 | 
|  #include "base/synchronization/waitable_event.h"
 | 
|  #include "cc/resources/picture_pile.h"
 | 
| -#include "cc/test/fake_picture_pile.h"
 | 
|  #include "cc/test/impl_side_painting_settings.h"
 | 
|  #include "testing/gtest/include/gtest/gtest.h"
 | 
|  
 | 
| @@ -29,43 +28,47 @@ FakePicturePileImpl::FakePicturePileImpl(
 | 
|  
 | 
|  FakePicturePileImpl::~FakePicturePileImpl() {}
 | 
|  
 | 
| -scoped_refptr<FakePicturePileImpl> FakePicturePileImpl::CreateFilledPile(
 | 
| +scoped_refptr<FakePicturePileImpl> FakePicturePileImpl::CreatePile(
 | 
|      const gfx::Size& tile_size,
 | 
| -    const gfx::Size& layer_bounds) {
 | 
| +    const gfx::Size& layer_bounds,
 | 
| +    bool is_filled) {
 | 
|    FakePicturePile pile(ImplSidePaintingSettings().minimum_contents_scale,
 | 
|                         ImplSidePaintingSettings().default_tile_grid_size);
 | 
|    pile.tiling().SetBorderTexels(0);
 | 
|    pile.tiling().SetTilingSize(layer_bounds);
 | 
|    pile.tiling().SetMaxTextureSize(tile_size);
 | 
| -  pile.SetRecordedViewport(gfx::Rect(layer_bounds));
 | 
| -  pile.SetHasAnyRecordings(true);
 | 
| -
 | 
| +  pile.SetRecordedViewport(is_filled ? gfx::Rect(layer_bounds) : gfx::Rect());
 | 
| +  pile.SetHasAnyRecordings(is_filled);
 | 
| +  if (is_filled) {
 | 
| +    for (int x = 0; x < pile.tiling().num_tiles_x(); ++x) {
 | 
| +      for (int y = 0; y < pile.tiling().num_tiles_y(); ++y)
 | 
| +        pile.AddRecordingAt(x, y);
 | 
| +    }
 | 
| +  }
 | 
|    scoped_refptr<FakePicturePileImpl> pile_impl(
 | 
|        new FakePicturePileImpl(&pile, nullptr));
 | 
| -  for (int x = 0; x < pile_impl->tiling().num_tiles_x(); ++x) {
 | 
| -    for (int y = 0; y < pile_impl->tiling().num_tiles_y(); ++y)
 | 
| -      pile_impl->AddRecordingAt(x, y);
 | 
| -  }
 | 
|    return pile_impl;
 | 
|  }
 | 
|  
 | 
| +scoped_refptr<FakePicturePileImpl> FakePicturePileImpl::CreateFilledPile(
 | 
| +    const gfx::Size& tile_size,
 | 
| +    const gfx::Size& layer_bounds) {
 | 
| +  bool is_filled = true;
 | 
| +  return CreatePile(tile_size, layer_bounds, is_filled);
 | 
| +}
 | 
| +
 | 
|  scoped_refptr<FakePicturePileImpl> FakePicturePileImpl::CreateEmptyPile(
 | 
|      const gfx::Size& tile_size,
 | 
|      const gfx::Size& layer_bounds) {
 | 
| -  FakePicturePile pile(ImplSidePaintingSettings().minimum_contents_scale,
 | 
| -                       ImplSidePaintingSettings().default_tile_grid_size);
 | 
| -  pile.tiling().SetBorderTexels(0);
 | 
| -  pile.tiling().SetTilingSize(layer_bounds);
 | 
| -  pile.tiling().SetMaxTextureSize(tile_size);
 | 
| -  pile.SetRecordedViewport(gfx::Rect());
 | 
| -  pile.SetHasAnyRecordings(false);
 | 
| -  return make_scoped_refptr(new FakePicturePileImpl(&pile, nullptr));
 | 
| +  bool is_filled = false;
 | 
| +  return CreatePile(tile_size, layer_bounds, is_filled);
 | 
|  }
 | 
|  
 | 
|  scoped_refptr<FakePicturePileImpl>
 | 
|  FakePicturePileImpl::CreateEmptyPileThatThinksItHasRecordings(
 | 
|      const gfx::Size& tile_size,
 | 
| -    const gfx::Size& layer_bounds) {
 | 
| +    const gfx::Size& layer_bounds,
 | 
| +    bool is_solid_color) {
 | 
|    FakePicturePile pile(ImplSidePaintingSettings().minimum_contents_scale,
 | 
|                         ImplSidePaintingSettings().default_tile_grid_size);
 | 
|    pile.tiling().SetBorderTexels(0);
 | 
| @@ -74,6 +77,7 @@ FakePicturePileImpl::CreateEmptyPileThatThinksItHasRecordings(
 | 
|    // This simulates a false positive for this flag.
 | 
|    pile.SetRecordedViewport(gfx::Rect());
 | 
|    pile.SetHasAnyRecordings(true);
 | 
| +  pile.SetIsSolidColor(is_solid_color);
 | 
|    return make_scoped_refptr(new FakePicturePileImpl(&pile, nullptr));
 | 
|  }
 | 
|  
 | 
| @@ -87,10 +91,9 @@ FakePicturePileImpl::CreateInfiniteFilledPile() {
 | 
|    pile.tiling().SetMaxTextureSize(size);
 | 
|    pile.SetRecordedViewport(gfx::Rect(size));
 | 
|    pile.SetHasAnyRecordings(true);
 | 
| -
 | 
| +  pile.AddRecordingAt(0, 0);
 | 
|    scoped_refptr<FakePicturePileImpl> pile_impl(
 | 
|        new FakePicturePileImpl(&pile, nullptr));
 | 
| -  pile_impl->AddRecordingAt(0, 0);
 | 
|    return pile_impl;
 | 
|  }
 | 
|  
 | 
| @@ -109,38 +112,6 @@ void FakePicturePileImpl::PlaybackToCanvas(SkCanvas* canvas,
 | 
|    PicturePileImpl::PlaybackToCanvas(canvas, canvas_rect, contents_scale);
 | 
|  }
 | 
|  
 | 
| -void FakePicturePileImpl::AddRecordingAt(int x, int y) {
 | 
| -  EXPECT_GE(x, 0);
 | 
| -  EXPECT_GE(y, 0);
 | 
| -  EXPECT_LT(x, tiling_.num_tiles_x());
 | 
| -  EXPECT_LT(y, tiling_.num_tiles_y());
 | 
| -
 | 
| -  if (HasRecordingAt(x, y))
 | 
| -    return;
 | 
| -  gfx::Rect bounds(tiling().TileBounds(x, y));
 | 
| -  bounds.Inset(-buffer_pixels(), -buffer_pixels());
 | 
| -
 | 
| -  scoped_refptr<Picture> picture(
 | 
| -      Picture::Create(bounds, &client_, tile_grid_size_, true,
 | 
| -                      RecordingSource::RECORD_NORMALLY));
 | 
| -  picture_map_[std::pair<int, int>(x, y)].SetPicture(picture);
 | 
| -  EXPECT_TRUE(HasRecordingAt(x, y));
 | 
| -
 | 
| -  has_any_recordings_ = true;
 | 
| -}
 | 
| -
 | 
| -void FakePicturePileImpl::RemoveRecordingAt(int x, int y) {
 | 
| -  EXPECT_GE(x, 0);
 | 
| -  EXPECT_GE(y, 0);
 | 
| -  EXPECT_LT(x, tiling_.num_tiles_x());
 | 
| -  EXPECT_LT(y, tiling_.num_tiles_y());
 | 
| -
 | 
| -  if (!HasRecordingAt(x, y))
 | 
| -    return;
 | 
| -  picture_map_.erase(std::pair<int, int>(x, y));
 | 
| -  EXPECT_FALSE(HasRecordingAt(x, y));
 | 
| -}
 | 
| -
 | 
|  bool FakePicturePileImpl::HasRecordingAt(int x, int y) const {
 | 
|    PictureMap::const_iterator found = picture_map_.find(PictureMapKey(x, y));
 | 
|    if (found == picture_map_.end())
 | 
| @@ -148,46 +119,4 @@ bool FakePicturePileImpl::HasRecordingAt(int x, int y) const {
 | 
|    return !!found->second.GetPicture();
 | 
|  }
 | 
|  
 | 
| -void FakePicturePileImpl::RerecordPile() {
 | 
| -  for (int y = 0; y < num_tiles_y(); ++y) {
 | 
| -    for (int x = 0; x < num_tiles_x(); ++x) {
 | 
| -      RemoveRecordingAt(x, y);
 | 
| -      AddRecordingAt(x, y);
 | 
| -    }
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -void FakePicturePileImpl::SetMinContentsScale(float min_contents_scale) {
 | 
| -  if (min_contents_scale_ == min_contents_scale)
 | 
| -    return;
 | 
| -
 | 
| -  // Picture contents are played back scaled. When the final contents scale is
 | 
| -  // less than 1 (i.e. low res), then multiple recorded pixels will be used
 | 
| -  // to raster one final pixel.  To avoid splitting a final pixel across
 | 
| -  // pictures (which would result in incorrect rasterization due to blending), a
 | 
| -  // buffer margin is added so that any picture can be snapped to integral
 | 
| -  // final pixels.
 | 
| -  //
 | 
| -  // For example, if a 1/4 contents scale is used, then that would be 3 buffer
 | 
| -  // pixels, since that's the minimum number of pixels to add so that resulting
 | 
| -  // content can be snapped to a four pixel aligned grid.
 | 
| -  int buffer_pixels = static_cast<int>(ceil(1 / min_contents_scale) - 1);
 | 
| -  buffer_pixels = std::max(0, buffer_pixels);
 | 
| -  SetBufferPixels(buffer_pixels);
 | 
| -  min_contents_scale_ = min_contents_scale;
 | 
| -}
 | 
| -
 | 
| -void FakePicturePileImpl::SetBufferPixels(int new_buffer_pixels) {
 | 
| -  if (new_buffer_pixels == buffer_pixels())
 | 
| -    return;
 | 
| -
 | 
| -  Clear();
 | 
| -  tiling_.SetBorderTexels(new_buffer_pixels);
 | 
| -}
 | 
| -
 | 
| -void FakePicturePileImpl::Clear() {
 | 
| -  picture_map_.clear();
 | 
| -  recorded_viewport_ = gfx::Rect();
 | 
| -}
 | 
| -
 | 
|  }  // namespace cc
 | 
| 
 |