Home | History | Annotate | Download | only in test
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "cc/test/fake_picture_pile_impl.h"
      6 
      7 #include <limits>
      8 #include <utility>
      9 
     10 #include "cc/test/impl_side_painting_settings.h"
     11 #include "testing/gtest/include/gtest/gtest.h"
     12 
     13 namespace cc {
     14 
     15 FakePicturePileImpl::FakePicturePileImpl() {}
     16 
     17 FakePicturePileImpl::~FakePicturePileImpl() {}
     18 
     19 scoped_refptr<FakePicturePileImpl> FakePicturePileImpl::CreateFilledPile(
     20     const gfx::Size& tile_size,
     21     const gfx::Size& layer_bounds) {
     22   scoped_refptr<FakePicturePileImpl> pile(new FakePicturePileImpl());
     23   pile->tiling().SetTilingSize(layer_bounds);
     24   pile->tiling().SetMaxTextureSize(tile_size);
     25   pile->SetTileGridSize(ImplSidePaintingSettings().default_tile_size);
     26   pile->recorded_viewport_ = gfx::Rect(layer_bounds);
     27   pile->has_any_recordings_ = true;
     28   for (int x = 0; x < pile->tiling().num_tiles_x(); ++x) {
     29     for (int y = 0; y < pile->tiling().num_tiles_y(); ++y)
     30       pile->AddRecordingAt(x, y);
     31   }
     32   return pile;
     33 }
     34 
     35 scoped_refptr<FakePicturePileImpl> FakePicturePileImpl::CreateEmptyPile(
     36     const gfx::Size& tile_size,
     37     const gfx::Size& layer_bounds) {
     38   scoped_refptr<FakePicturePileImpl> pile(new FakePicturePileImpl());
     39   pile->tiling().SetTilingSize(layer_bounds);
     40   pile->tiling().SetMaxTextureSize(tile_size);
     41   pile->SetTileGridSize(ImplSidePaintingSettings().default_tile_size);
     42   pile->recorded_viewport_ = gfx::Rect();
     43   pile->has_any_recordings_ = false;
     44   return pile;
     45 }
     46 
     47 scoped_refptr<FakePicturePileImpl>
     48 FakePicturePileImpl::CreateEmptyPileThatThinksItHasRecordings(
     49     const gfx::Size& tile_size,
     50     const gfx::Size& layer_bounds) {
     51   scoped_refptr<FakePicturePileImpl> pile(new FakePicturePileImpl());
     52   pile->tiling().SetTilingSize(layer_bounds);
     53   pile->tiling().SetMaxTextureSize(tile_size);
     54   pile->SetTileGridSize(ImplSidePaintingSettings().default_tile_size);
     55   // This simulates a false positive for this flag.
     56   pile->recorded_viewport_ = gfx::Rect();
     57   pile->has_any_recordings_ = true;
     58   return pile;
     59 }
     60 
     61 scoped_refptr<FakePicturePileImpl>
     62 FakePicturePileImpl::CreateInfiniteFilledPile() {
     63   scoped_refptr<FakePicturePileImpl> pile(new FakePicturePileImpl());
     64   gfx::Size size(std::numeric_limits<int>::max(),
     65                  std::numeric_limits<int>::max());
     66   pile->tiling().SetTilingSize(size);
     67   pile->tiling().SetMaxTextureSize(size);
     68   pile->SetTileGridSize(size);
     69   pile->recorded_viewport_ = gfx::Rect(size);
     70   pile->has_any_recordings_ = true;
     71   pile->AddRecordingAt(0, 0);
     72   return pile;
     73 }
     74 
     75 void FakePicturePileImpl::AddRecordingAt(int x, int y) {
     76   EXPECT_GE(x, 0);
     77   EXPECT_GE(y, 0);
     78   EXPECT_LT(x, tiling_.num_tiles_x());
     79   EXPECT_LT(y, tiling_.num_tiles_y());
     80 
     81   if (HasRecordingAt(x, y))
     82     return;
     83   gfx::Rect bounds(tiling().TileBounds(x, y));
     84   bounds.Inset(-buffer_pixels(), -buffer_pixels());
     85 
     86   scoped_refptr<Picture> picture(Picture::Create(
     87       bounds, &client_, tile_grid_info_, true, Picture::RECORD_NORMALLY));
     88   picture_map_[std::pair<int, int>(x, y)].SetPicture(picture);
     89   EXPECT_TRUE(HasRecordingAt(x, y));
     90 
     91   has_any_recordings_ = true;
     92 }
     93 
     94 void FakePicturePileImpl::RemoveRecordingAt(int x, int y) {
     95   EXPECT_GE(x, 0);
     96   EXPECT_GE(y, 0);
     97   EXPECT_LT(x, tiling_.num_tiles_x());
     98   EXPECT_LT(y, tiling_.num_tiles_y());
     99 
    100   if (!HasRecordingAt(x, y))
    101     return;
    102   picture_map_.erase(std::pair<int, int>(x, y));
    103   EXPECT_FALSE(HasRecordingAt(x, y));
    104 }
    105 
    106 void FakePicturePileImpl::RerecordPile() {
    107   for (int y = 0; y < num_tiles_y(); ++y) {
    108     for (int x = 0; x < num_tiles_x(); ++x) {
    109       RemoveRecordingAt(x, y);
    110       AddRecordingAt(x, y);
    111     }
    112   }
    113 }
    114 
    115 }  // namespace cc
    116