Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(126)

Side by Side Diff: cc/resources/picture_pile_unittest.cc

Issue 198833004: Clean up repeated code in picture pile unittest (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <map> 5 #include <map>
6 #include <utility> 6 #include <utility>
7 7
8 #include "cc/resources/picture_pile.h" 8 #include "cc/resources/picture_pile.h"
9 #include "cc/test/fake_content_layer_client.h" 9 #include "cc/test/fake_content_layer_client.h"
10 #include "cc/test/fake_rendering_stats_instrumentation.h" 10 #include "cc/test/fake_rendering_stats_instrumentation.h"
(...skipping 11 matching lines...) Expand all
22 PictureMap& picture_map() { return picture_map_; } 22 PictureMap& picture_map() { return picture_map_; }
23 23
24 typedef PicturePile::PictureInfo PictureInfo; 24 typedef PicturePile::PictureInfo PictureInfo;
25 typedef PicturePile::PictureMapKey PictureMapKey; 25 typedef PicturePile::PictureMapKey PictureMapKey;
26 typedef PicturePile::PictureMap PictureMap; 26 typedef PicturePile::PictureMap PictureMap;
27 27
28 protected: 28 protected:
29 virtual ~TestPicturePile() {} 29 virtual ~TestPicturePile() {}
30 }; 30 };
31 31
32 TEST(PicturePileTest, SmallInvalidateInflated) { 32 class PicturePileTest : public testing::Test {
33 FakeContentLayerClient client; 33 public:
34 FakeRenderingStatsInstrumentation stats_instrumentation; 34 PicturePileTest()
35 scoped_refptr<TestPicturePile> pile = new TestPicturePile; 35 : pile_(new TestPicturePile()),
36 SkColor background_color = SK_ColorBLUE; 36 background_color_(SK_ColorBLUE),
37 min_scale_(0.125),
38 frame_number_(0),
39 contents_opaque_(false) {
40 pile_->Resize(pile_->tiling().max_texture_size());
41 pile_->SetTileGridSize(gfx::Size(1000, 1000));
42 pile_->SetMinContentsScale(min_scale_);
43 }
37 44
38 float min_scale = 0.125; 45 gfx::Rect layer_rect() const { return gfx::Rect(pile_->size()); }
39 gfx::Size base_picture_size = pile->tiling().max_texture_size();
40 46
41 gfx::Size layer_size = base_picture_size; 47 bool Update(const Region& invalidation, const gfx::Rect& visible_layer_rect) {
42 pile->Resize(layer_size); 48 frame_number_++;
43 pile->SetTileGridSize(gfx::Size(1000, 1000)); 49 return pile_->Update(&client_,
44 pile->SetMinContentsScale(min_scale); 50 background_color_,
51 contents_opaque_,
52 invalidation,
53 visible_layer_rect,
54 frame_number_,
55 &stats_instrumentation_);
56 }
45 57
46 // Update the whole layer. 58 bool UpdateWholeLayer() { return Update(layer_rect(), layer_rect()); }
47 pile->Update(&client, 59
48 background_color, 60 FakeContentLayerClient client_;
49 false, 61 FakeRenderingStatsInstrumentation stats_instrumentation_;
50 gfx::Rect(layer_size), 62 scoped_refptr<TestPicturePile> pile_;
51 gfx::Rect(layer_size), 63 SkColor background_color_;
52 1, 64 float min_scale_;
53 &stats_instrumentation); 65 int frame_number_;
66 bool contents_opaque_;
67 };
68
69 TEST_F(PicturePileTest, SmallInvalidateInflated) {
70 UpdateWholeLayer();
54 71
55 // Invalidate something inside a tile. 72 // Invalidate something inside a tile.
56 gfx::Rect invalidate_rect(50, 50, 1, 1); 73 gfx::Rect invalidate_rect(50, 50, 1, 1);
57 pile->Update(&client, 74 Update(invalidate_rect, layer_rect());
58 background_color,
59 false,
60 invalidate_rect,
61 gfx::Rect(layer_size),
62 2,
63 &stats_instrumentation);
64 75
65 EXPECT_EQ(1, pile->tiling().num_tiles_x()); 76 EXPECT_EQ(1, pile_->tiling().num_tiles_x());
66 EXPECT_EQ(1, pile->tiling().num_tiles_y()); 77 EXPECT_EQ(1, pile_->tiling().num_tiles_y());
67 78
68 TestPicturePile::PictureInfo& picture_info = 79 TestPicturePile::PictureInfo& picture_info =
69 pile->picture_map().find(TestPicturePile::PictureMapKey(0, 0))->second; 80 pile_->picture_map().find(TestPicturePile::PictureMapKey(0, 0))->second;
70 // We should have a picture. 81 // We should have a picture.
71 EXPECT_TRUE(!!picture_info.GetPicture()); 82 EXPECT_TRUE(!!picture_info.GetPicture());
72 gfx::Rect picture_rect = gfx::ScaleToEnclosedRect( 83 gfx::Rect picture_rect = gfx::ScaleToEnclosedRect(
73 picture_info.GetPicture()->LayerRect(), min_scale); 84 picture_info.GetPicture()->LayerRect(), min_scale_);
74 85
75 // The the picture should be large enough that scaling it never makes a rect 86 // The the picture should be large enough that scaling it never makes a rect
76 // smaller than 1 px wide or tall. 87 // smaller than 1 px wide or tall.
77 EXPECT_FALSE(picture_rect.IsEmpty()) << "Picture rect " << 88 EXPECT_FALSE(picture_rect.IsEmpty()) << "Picture rect " <<
78 picture_rect.ToString(); 89 picture_rect.ToString();
79 } 90 }
80 91
81 TEST(PicturePileTest, LargeInvalidateInflated) { 92 TEST_F(PicturePileTest, LargeInvalidateInflated) {
82 FakeContentLayerClient client; 93 UpdateWholeLayer();
83 FakeRenderingStatsInstrumentation stats_instrumentation;
84 scoped_refptr<TestPicturePile> pile = new TestPicturePile;
85 SkColor background_color = SK_ColorBLUE;
86
87 float min_scale = 0.125;
88 gfx::Size base_picture_size = pile->tiling().max_texture_size();
89
90 gfx::Size layer_size = base_picture_size;
91 pile->Resize(layer_size);
92 pile->SetTileGridSize(gfx::Size(1000, 1000));
93 pile->SetMinContentsScale(min_scale);
94
95 // Update the whole layer.
96 pile->Update(&client,
97 background_color,
98 false,
99 gfx::Rect(layer_size),
100 gfx::Rect(layer_size),
101 1,
102 &stats_instrumentation);
103 94
104 // Invalidate something inside a tile. 95 // Invalidate something inside a tile.
105 gfx::Rect invalidate_rect(50, 50, 100, 100); 96 gfx::Rect invalidate_rect(50, 50, 100, 100);
106 pile->Update(&client, 97 Update(invalidate_rect, layer_rect());
107 background_color,
108 false,
109 invalidate_rect,
110 gfx::Rect(layer_size),
111 2,
112 &stats_instrumentation);
113 98
114 EXPECT_EQ(1, pile->tiling().num_tiles_x()); 99 EXPECT_EQ(1, pile_->tiling().num_tiles_x());
115 EXPECT_EQ(1, pile->tiling().num_tiles_y()); 100 EXPECT_EQ(1, pile_->tiling().num_tiles_y());
116 101
117 TestPicturePile::PictureInfo& picture_info = 102 TestPicturePile::PictureInfo& picture_info =
118 pile->picture_map().find(TestPicturePile::PictureMapKey(0, 0))->second; 103 pile_->picture_map().find(TestPicturePile::PictureMapKey(0, 0))->second;
119 EXPECT_TRUE(!!picture_info.GetPicture()); 104 EXPECT_TRUE(!!picture_info.GetPicture());
120 105
121 int expected_inflation = pile->buffer_pixels(); 106 int expected_inflation = pile_->buffer_pixels();
122 107
123 Picture* base_picture = picture_info.GetPicture(); 108 Picture* base_picture = picture_info.GetPicture();
124 gfx::Rect base_picture_rect(layer_size); 109 gfx::Rect base_picture_rect(pile_->size());
125 base_picture_rect.Inset(-expected_inflation, -expected_inflation); 110 base_picture_rect.Inset(-expected_inflation, -expected_inflation);
126 EXPECT_EQ(base_picture_rect.ToString(), 111 EXPECT_EQ(base_picture_rect.ToString(),
127 base_picture->LayerRect().ToString()); 112 base_picture->LayerRect().ToString());
128 } 113 }
129 114
130 TEST(PicturePileTest, InvalidateOnTileBoundaryInflated) { 115 TEST_F(PicturePileTest, InvalidateOnTileBoundaryInflated) {
131 FakeContentLayerClient client; 116 gfx::Size layer_size = gfx::ToFlooredSize(gfx::ScaleSize(pile_->size(), 2.f));
132 FakeRenderingStatsInstrumentation stats_instrumentation; 117 pile_->Resize(layer_size);
133 scoped_refptr<TestPicturePile> pile = new TestPicturePile;
134 SkColor background_color = SK_ColorBLUE;
135
136 float min_scale = 0.125;
137 gfx::Size base_picture_size = pile->tiling().max_texture_size();
138
139 gfx::Size layer_size =
140 gfx::ToFlooredSize(gfx::ScaleSize(base_picture_size, 2.f));
141 pile->Resize(layer_size);
142 pile->SetTileGridSize(gfx::Size(1000, 1000));
143 pile->SetMinContentsScale(min_scale);
144 118
145 // Due to border pixels, we should have 3 tiles. 119 // Due to border pixels, we should have 3 tiles.
146 EXPECT_EQ(3, pile->tiling().num_tiles_x()); 120 EXPECT_EQ(3, pile_->tiling().num_tiles_x());
147 EXPECT_EQ(3, pile->tiling().num_tiles_y()); 121 EXPECT_EQ(3, pile_->tiling().num_tiles_y());
148 122
149 // We should have 1/.125 - 1 = 7 border pixels. 123 // We should have 1/.125 - 1 = 7 border pixels.
150 EXPECT_EQ(7, pile->buffer_pixels()); 124 EXPECT_EQ(7, pile_->buffer_pixels());
151 EXPECT_EQ(7, pile->tiling().border_texels()); 125 EXPECT_EQ(7, pile_->tiling().border_texels());
152 126
153 // Update the whole layer to create initial pictures. 127 // Update the whole layer to create initial pictures.
154 pile->Update(&client, 128 UpdateWholeLayer();
155 background_color,
156 false,
157 gfx::Rect(layer_size),
158 gfx::Rect(layer_size),
159 0,
160 &stats_instrumentation);
161 129
162 // Invalidate everything again to have a non zero invalidation 130 // Invalidate everything again to have a non zero invalidation
163 // frequency. 131 // frequency.
164 pile->Update(&client, 132 UpdateWholeLayer();
165 background_color,
166 false,
167 gfx::Rect(layer_size),
168 gfx::Rect(layer_size),
169 1,
170 &stats_instrumentation);
171 133
172 // Invalidate something just over a tile boundary by a single pixel. 134 // Invalidate something just over a tile boundary by a single pixel.
173 // This will invalidate the tile (1, 1), as well as 1 row of pixels in (1, 0). 135 // This will invalidate the tile (1, 1), as well as 1 row of pixels in (1, 0).
174 gfx::Rect invalidate_rect( 136 gfx::Rect invalidate_rect(
175 pile->tiling().TileBoundsWithBorder(0, 0).right(), 137 pile_->tiling().TileBoundsWithBorder(0, 0).right(),
176 pile->tiling().TileBoundsWithBorder(0, 0).bottom() - 1, 138 pile_->tiling().TileBoundsWithBorder(0, 0).bottom() - 1,
177 50, 139 50,
178 50); 140 50);
179 pile->Update(&client, 141 Update(invalidate_rect, layer_rect());
180 background_color,
181 false,
182 invalidate_rect,
183 gfx::Rect(layer_size),
184 2,
185 &stats_instrumentation);
186 142
187 for (int i = 0; i < pile->tiling().num_tiles_x(); ++i) { 143 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
188 for (int j = 0; j < pile->tiling().num_tiles_y(); ++j) { 144 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
189 TestPicturePile::PictureInfo& picture_info = 145 TestPicturePile::PictureInfo& picture_info =
190 pile->picture_map().find( 146 pile_->picture_map()
191 TestPicturePile::PictureMapKey(i, j))->second; 147 .find(TestPicturePile::PictureMapKey(i, j))
148 ->second;
192 149
193 // Expect (1, 1) and (1, 0) to be invalidated once more 150 // Expect (1, 1) and (1, 0) to be invalidated once more
194 // than the rest of the tiles. 151 // than the rest of the tiles.
195 if (i == 1 && (j == 0 || j == 1)) { 152 if (i == 1 && (j == 0 || j == 1)) {
196 EXPECT_FLOAT_EQ( 153 EXPECT_FLOAT_EQ(
197 2.0f / TestPicturePile::PictureInfo::INVALIDATION_FRAMES_TRACKED, 154 2.0f / TestPicturePile::PictureInfo::INVALIDATION_FRAMES_TRACKED,
198 picture_info.GetInvalidationFrequencyForTesting()); 155 picture_info.GetInvalidationFrequencyForTesting());
199 } else { 156 } else {
200 EXPECT_FLOAT_EQ( 157 EXPECT_FLOAT_EQ(
201 1.0f / TestPicturePile::PictureInfo::INVALIDATION_FRAMES_TRACKED, 158 1.0f / TestPicturePile::PictureInfo::INVALIDATION_FRAMES_TRACKED,
202 picture_info.GetInvalidationFrequencyForTesting()); 159 picture_info.GetInvalidationFrequencyForTesting());
203 } 160 }
204 } 161 }
205 } 162 }
206 } 163 }
207 164
208 TEST(PicturePileTest, StopRecordingOffscreenInvalidations) { 165 TEST_F(PicturePileTest, StopRecordingOffscreenInvalidations) {
209 FakeContentLayerClient client; 166 gfx::Size layer_size = gfx::ToFlooredSize(gfx::ScaleSize(pile_->size(), 4.f));
210 FakeRenderingStatsInstrumentation stats_instrumentation; 167 pile_->Resize(layer_size);
211 scoped_refptr<TestPicturePile> pile = new TestPicturePile;
212 SkColor background_color = SK_ColorBLUE;
213
214 float min_scale = 0.125;
215 gfx::Size base_picture_size = pile->tiling().max_texture_size();
216
217 gfx::Size layer_size =
218 gfx::ToFlooredSize(gfx::ScaleSize(base_picture_size, 4.f));
219 pile->Resize(layer_size);
220 pile->SetTileGridSize(gfx::Size(1000, 1000));
221 pile->SetMinContentsScale(min_scale);
222 168
223 gfx::Rect viewport(0, 0, layer_size.width(), 1); 169 gfx::Rect viewport(0, 0, layer_size.width(), 1);
224 170
225 // Update the whole layer until the invalidation frequency is high. 171 // Update the whole layer until the invalidation frequency is high.
226 int frame; 172 for (int frame = 0; frame < 33; ++frame) {
227 for (frame = 0; frame < 33; ++frame) { 173 UpdateWholeLayer();
228 pile->Update(&client,
229 background_color,
230 false,
231 gfx::Rect(layer_size),
232 viewport,
233 frame,
234 &stats_instrumentation);
235 } 174 }
236 175
237 // Make sure we have a high invalidation frequency. 176 // Make sure we have a high invalidation frequency.
238 for (int i = 0; i < pile->tiling().num_tiles_x(); ++i) { 177 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
239 for (int j = 0; j < pile->tiling().num_tiles_y(); ++j) { 178 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
240 TestPicturePile::PictureInfo& picture_info = 179 TestPicturePile::PictureInfo& picture_info =
241 pile->picture_map().find( 180 pile_->picture_map()
242 TestPicturePile::PictureMapKey(i, j))->second; 181 .find(TestPicturePile::PictureMapKey(i, j))
182 ->second;
243 EXPECT_FLOAT_EQ(1.0f, picture_info.GetInvalidationFrequencyForTesting()) 183 EXPECT_FLOAT_EQ(1.0f, picture_info.GetInvalidationFrequencyForTesting())
244 << "i " << i << " j " << j; 184 << "i " << i << " j " << j;
245 } 185 }
246 } 186 }
247 187
248 // Update once more with a small viewport 0,0 layer_width by 1 188 // Update once more with a small viewport 0,0 layer_width by 1
249 pile->Update(&client, 189 Update(layer_rect(), viewport);
250 background_color,
251 false,
252 gfx::Rect(layer_size),
253 viewport,
254 frame,
255 &stats_instrumentation);
256 190
257 for (int i = 0; i < pile->tiling().num_tiles_x(); ++i) { 191 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
258 for (int j = 0; j < pile->tiling().num_tiles_y(); ++j) { 192 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
259 TestPicturePile::PictureInfo& picture_info = 193 TestPicturePile::PictureInfo& picture_info =
260 pile->picture_map().find( 194 pile_->picture_map()
261 TestPicturePile::PictureMapKey(i, j))->second; 195 .find(TestPicturePile::PictureMapKey(i, j))
196 ->second;
262 EXPECT_FLOAT_EQ(1.0f, picture_info.GetInvalidationFrequencyForTesting()); 197 EXPECT_FLOAT_EQ(1.0f, picture_info.GetInvalidationFrequencyForTesting());
263 198
264 // If the y far enough away we expect to find no picture (no re-recording 199 // If the y far enough away we expect to find no picture (no re-recording
265 // happened). For close y, the picture should change. 200 // happened). For close y, the picture should change.
266 if (j >= 2) 201 if (j >= 2)
267 EXPECT_FALSE(picture_info.GetPicture()) << "i " << i << " j " << j; 202 EXPECT_FALSE(picture_info.GetPicture()) << "i " << i << " j " << j;
268 else 203 else
269 EXPECT_TRUE(picture_info.GetPicture()) << "i " << i << " j " << j; 204 EXPECT_TRUE(picture_info.GetPicture()) << "i " << i << " j " << j;
270 } 205 }
271 } 206 }
272 207
273 // Now update with no invalidation and full viewport 208 // Now update with no invalidation and full viewport
274 pile->Update(&client, 209 Update(gfx::Rect(), layer_rect());
275 background_color,
276 false,
277 gfx::Rect(),
278 gfx::Rect(layer_size),
279 frame+1,
280 &stats_instrumentation);
281 210
282 for (int i = 0; i < pile->tiling().num_tiles_x(); ++i) { 211 for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
283 for (int j = 0; j < pile->tiling().num_tiles_y(); ++j) { 212 for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
284 TestPicturePile::PictureInfo& picture_info = 213 TestPicturePile::PictureInfo& picture_info =
285 pile->picture_map().find( 214 pile_->picture_map()
286 TestPicturePile::PictureMapKey(i, j))->second; 215 .find(TestPicturePile::PictureMapKey(i, j))
216 ->second;
287 // Expect the invalidation frequency to be less than 1, since we just 217 // Expect the invalidation frequency to be less than 1, since we just
288 // updated with no invalidations. 218 // updated with no invalidations.
289 float expected_frequency = 219 float expected_frequency =
290 1.0f - 220 1.0f -
291 1.0f / TestPicturePile::PictureInfo::INVALIDATION_FRAMES_TRACKED; 221 1.0f / TestPicturePile::PictureInfo::INVALIDATION_FRAMES_TRACKED;
292 222
293 EXPECT_FLOAT_EQ(expected_frequency, 223 EXPECT_FLOAT_EQ(expected_frequency,
294 picture_info.GetInvalidationFrequencyForTesting()); 224 picture_info.GetInvalidationFrequencyForTesting());
295 225
296 // We expect that there are pictures everywhere now. 226 // We expect that there are pictures everywhere now.
297 EXPECT_TRUE(picture_info.GetPicture()) << "i " << i << " j " << j; 227 EXPECT_TRUE(picture_info.GetPicture()) << "i " << i << " j " << j;
298 } 228 }
299 } 229 }
300 } 230 }
301 231
302 } // namespace 232 } // namespace
303 } // namespace cc 233 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698