• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
FakePicturePileImpl()15 FakePicturePileImpl::FakePicturePileImpl() {}
16 
~FakePicturePileImpl()17 FakePicturePileImpl::~FakePicturePileImpl() {}
18 
CreateFilledPile(gfx::Size tile_size,gfx::Size layer_bounds)19 scoped_refptr<FakePicturePileImpl> FakePicturePileImpl::CreateFilledPile(
20     gfx::Size tile_size,
21     gfx::Size layer_bounds) {
22   scoped_refptr<FakePicturePileImpl> pile(new FakePicturePileImpl());
23   pile->tiling().SetTotalSize(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 
CreateEmptyPile(gfx::Size tile_size,gfx::Size layer_bounds)35 scoped_refptr<FakePicturePileImpl> FakePicturePileImpl::CreateEmptyPile(
36     gfx::Size tile_size,
37     gfx::Size layer_bounds) {
38   scoped_refptr<FakePicturePileImpl> pile(new FakePicturePileImpl());
39   pile->tiling().SetTotalSize(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>
CreateEmptyPileThatThinksItHasRecordings(gfx::Size tile_size,gfx::Size layer_bounds)48 FakePicturePileImpl::CreateEmptyPileThatThinksItHasRecordings(
49     gfx::Size tile_size,
50     gfx::Size layer_bounds) {
51   scoped_refptr<FakePicturePileImpl> pile(new FakePicturePileImpl());
52   pile->tiling().SetTotalSize(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>
CreateInfiniteFilledPile()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->Resize(size);
67   pile->tiling().SetTotalSize(size);
68   pile->tiling().SetMaxTextureSize(size);
69   pile->SetTileGridSize(size);
70   pile->recorded_viewport_ = gfx::Rect(size);
71   pile->has_any_recordings_ = true;
72   pile->AddRecordingAt(0, 0);
73   return pile;
74 }
75 
AddRecordingAt(int x,int y)76 void FakePicturePileImpl::AddRecordingAt(int x, int y) {
77   EXPECT_GE(x, 0);
78   EXPECT_GE(y, 0);
79   EXPECT_LT(x, tiling_.num_tiles_x());
80   EXPECT_LT(y, tiling_.num_tiles_y());
81 
82   if (HasRecordingAt(x, y))
83     return;
84   gfx::Rect bounds(tiling().TileBounds(x, y));
85   bounds.Inset(-buffer_pixels(), -buffer_pixels());
86 
87   scoped_refptr<Picture> picture(Picture::Create(bounds));
88   picture->Record(&client_, tile_grid_info_);
89   picture->GatherPixelRefs(tile_grid_info_);
90   picture_map_[std::pair<int, int>(x, y)].SetPicture(picture);
91   EXPECT_TRUE(HasRecordingAt(x, y));
92 
93   has_any_recordings_ = true;
94 }
95 
RemoveRecordingAt(int x,int y)96 void FakePicturePileImpl::RemoveRecordingAt(int x, int y) {
97   EXPECT_GE(x, 0);
98   EXPECT_GE(y, 0);
99   EXPECT_LT(x, tiling_.num_tiles_x());
100   EXPECT_LT(y, tiling_.num_tiles_y());
101 
102   if (!HasRecordingAt(x, y))
103     return;
104   picture_map_.erase(std::pair<int, int>(x, y));
105   EXPECT_FALSE(HasRecordingAt(x, y));
106 }
107 
RerecordPile()108 void FakePicturePileImpl::RerecordPile() {
109   for (int y = 0; y < num_tiles_y(); ++y) {
110     for (int x = 0; x < num_tiles_x(); ++x) {
111       RemoveRecordingAt(x, y);
112       AddRecordingAt(x, y);
113     }
114   }
115 }
116 
117 }  // namespace cc
118