| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 "cc/trees/quad_culler.h" | 5 #include "cc/trees/quad_culler.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "cc/base/math_util.h" | 9 #include "cc/base/math_util.h" |
| 10 #include "cc/debug/overdraw_metrics.h" | |
| 11 #include "cc/layers/append_quads_data.h" | 10 #include "cc/layers/append_quads_data.h" |
| 12 #include "cc/layers/render_surface_impl.h" | 11 #include "cc/layers/render_surface_impl.h" |
| 13 #include "cc/layers/tiled_layer_impl.h" | 12 #include "cc/layers/tiled_layer_impl.h" |
| 14 #include "cc/quads/render_pass_draw_quad.h" | 13 #include "cc/quads/render_pass_draw_quad.h" |
| 15 #include "cc/quads/solid_color_draw_quad.h" | 14 #include "cc/quads/solid_color_draw_quad.h" |
| 16 #include "cc/quads/tile_draw_quad.h" | 15 #include "cc/quads/tile_draw_quad.h" |
| 17 #include "cc/resources/layer_tiling_data.h" | 16 #include "cc/resources/layer_tiling_data.h" |
| 18 #include "cc/test/fake_impl_proxy.h" | 17 #include "cc/test/fake_impl_proxy.h" |
| 19 #include "cc/test/fake_layer_tree_host_impl.h" | 18 #include "cc/test/fake_layer_tree_host_impl.h" |
| 20 #include "cc/test/test_occlusion_tracker.h" | 19 #include "cc/test/test_occlusion_tracker.h" |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 131 true, | 130 true, |
| 132 gfx::Rect(), | 131 gfx::Rect(), |
| 133 render_surface_layer_list); | 132 render_surface_layer_list); |
| 134 scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), | 133 scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), |
| 135 gfx::Transform(), | 134 gfx::Transform(), |
| 136 child_rect, | 135 child_rect, |
| 137 1.f, | 136 1.f, |
| 138 false, | 137 false, |
| 139 gfx::Rect(), | 138 gfx::Rect(), |
| 140 render_surface_layer_list); | 139 render_surface_layer_list); |
| 141 bool record_metrics = true; | |
| 142 TestOcclusionTracker<LayerImpl> occlusion_tracker( | 140 TestOcclusionTracker<LayerImpl> occlusion_tracker( |
| 143 gfx::Rect(-100, -100, 1000, 1000), record_metrics); | 141 gfx::Rect(-100, -100, 1000, 1000)); |
| 144 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); | 142 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); |
| 145 | 143 |
| 146 AppendQuads(&quad_list, | 144 AppendQuads(&quad_list, |
| 147 &shared_state_list, | 145 &shared_state_list, |
| 148 child_layer.get(), | 146 child_layer.get(), |
| 149 &it, | 147 &it, |
| 150 &occlusion_tracker); | 148 &occlusion_tracker); |
| 151 AppendQuads(&quad_list, | 149 AppendQuads(&quad_list, |
| 152 &shared_state_list, | 150 &shared_state_list, |
| 153 root_layer.get(), | 151 root_layer.get(), |
| 154 &it, | 152 &it, |
| 155 &occlusion_tracker); | 153 &occlusion_tracker); |
| 156 EXPECT_EQ(13u, quad_list.size()); | 154 EXPECT_EQ(13u, quad_list.size()); |
| 157 EXPECT_NEAR( | |
| 158 occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 90000, 1); | |
| 159 EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), | |
| 160 40000, | |
| 161 1); | |
| 162 EXPECT_NEAR( | |
| 163 occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), 0, 1); | |
| 164 } | 155 } |
| 165 | 156 |
| 166 TEST_F(QuadCullerTest, CullChildLinesUpTopLeft) { | 157 TEST_F(QuadCullerTest, CullChildLinesUpTopLeft) { |
| 167 DECLARE_AND_INITIALIZE_TEST_QUADS(); | 158 DECLARE_AND_INITIALIZE_TEST_QUADS(); |
| 168 | 159 |
| 169 scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, | 160 scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, |
| 170 gfx::Transform(), | 161 gfx::Transform(), |
| 171 root_rect, | 162 root_rect, |
| 172 1.f, | 163 1.f, |
| 173 true, | 164 true, |
| 174 gfx::Rect(), | 165 gfx::Rect(), |
| 175 render_surface_layer_list); | 166 render_surface_layer_list); |
| 176 scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), | 167 scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), |
| 177 gfx::Transform(), | 168 gfx::Transform(), |
| 178 child_rect, | 169 child_rect, |
| 179 1.f, | 170 1.f, |
| 180 true, | 171 true, |
| 181 gfx::Rect(), | 172 gfx::Rect(), |
| 182 render_surface_layer_list); | 173 render_surface_layer_list); |
| 183 bool record_metrics = true; | |
| 184 TestOcclusionTracker<LayerImpl> occlusion_tracker( | 174 TestOcclusionTracker<LayerImpl> occlusion_tracker( |
| 185 gfx::Rect(-100, -100, 1000, 1000), record_metrics); | 175 gfx::Rect(-100, -100, 1000, 1000)); |
| 186 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); | 176 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); |
| 187 | 177 |
| 188 AppendQuads(&quad_list, | 178 AppendQuads(&quad_list, |
| 189 &shared_state_list, | 179 &shared_state_list, |
| 190 child_layer.get(), | 180 child_layer.get(), |
| 191 &it, | 181 &it, |
| 192 &occlusion_tracker); | 182 &occlusion_tracker); |
| 193 AppendQuads(&quad_list, | 183 AppendQuads(&quad_list, |
| 194 &shared_state_list, | 184 &shared_state_list, |
| 195 root_layer.get(), | 185 root_layer.get(), |
| 196 &it, | 186 &it, |
| 197 &occlusion_tracker); | 187 &occlusion_tracker); |
| 198 EXPECT_EQ(9u, quad_list.size()); | 188 EXPECT_EQ(9u, quad_list.size()); |
| 199 EXPECT_NEAR( | |
| 200 occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 90000, 1); | |
| 201 EXPECT_NEAR( | |
| 202 occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); | |
| 203 EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), | |
| 204 40000, | |
| 205 1); | |
| 206 } | 189 } |
| 207 | 190 |
| 208 TEST_F(QuadCullerTest, CullWhenChildOpacityNotOne) { | 191 TEST_F(QuadCullerTest, CullWhenChildOpacityNotOne) { |
| 209 DECLARE_AND_INITIALIZE_TEST_QUADS(); | 192 DECLARE_AND_INITIALIZE_TEST_QUADS(); |
| 210 | 193 |
| 211 scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, | 194 scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, |
| 212 gfx::Transform(), | 195 gfx::Transform(), |
| 213 root_rect, | 196 root_rect, |
| 214 1.f, | 197 1.f, |
| 215 true, | 198 true, |
| 216 gfx::Rect(), | 199 gfx::Rect(), |
| 217 render_surface_layer_list); | 200 render_surface_layer_list); |
| 218 scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), | 201 scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), |
| 219 child_transform, | 202 child_transform, |
| 220 child_rect, | 203 child_rect, |
| 221 0.9f, | 204 0.9f, |
| 222 true, | 205 true, |
| 223 gfx::Rect(), | 206 gfx::Rect(), |
| 224 render_surface_layer_list); | 207 render_surface_layer_list); |
| 225 bool record_metrics = true; | |
| 226 TestOcclusionTracker<LayerImpl> occlusion_tracker( | 208 TestOcclusionTracker<LayerImpl> occlusion_tracker( |
| 227 gfx::Rect(-100, -100, 1000, 1000), record_metrics); | 209 gfx::Rect(-100, -100, 1000, 1000)); |
| 228 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); | 210 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); |
| 229 | 211 |
| 230 AppendQuads(&quad_list, | 212 AppendQuads(&quad_list, |
| 231 &shared_state_list, | 213 &shared_state_list, |
| 232 child_layer.get(), | 214 child_layer.get(), |
| 233 &it, | 215 &it, |
| 234 &occlusion_tracker); | 216 &occlusion_tracker); |
| 235 AppendQuads(&quad_list, | 217 AppendQuads(&quad_list, |
| 236 &shared_state_list, | 218 &shared_state_list, |
| 237 root_layer.get(), | 219 root_layer.get(), |
| 238 &it, | 220 &it, |
| 239 &occlusion_tracker); | 221 &occlusion_tracker); |
| 240 EXPECT_EQ(13u, quad_list.size()); | 222 EXPECT_EQ(13u, quad_list.size()); |
| 241 EXPECT_NEAR( | |
| 242 occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 90000, 1); | |
| 243 EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), | |
| 244 40000, | |
| 245 1); | |
| 246 EXPECT_NEAR( | |
| 247 occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), 0, 1); | |
| 248 } | 223 } |
| 249 | 224 |
| 250 TEST_F(QuadCullerTest, CullWhenChildOpaqueFlagFalse) { | 225 TEST_F(QuadCullerTest, CullWhenChildOpaqueFlagFalse) { |
| 251 DECLARE_AND_INITIALIZE_TEST_QUADS(); | 226 DECLARE_AND_INITIALIZE_TEST_QUADS(); |
| 252 | 227 |
| 253 scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, | 228 scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, |
| 254 gfx::Transform(), | 229 gfx::Transform(), |
| 255 root_rect, | 230 root_rect, |
| 256 1.f, | 231 1.f, |
| 257 true, | 232 true, |
| 258 gfx::Rect(), | 233 gfx::Rect(), |
| 259 render_surface_layer_list); | 234 render_surface_layer_list); |
| 260 scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), | 235 scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), |
| 261 child_transform, | 236 child_transform, |
| 262 child_rect, | 237 child_rect, |
| 263 1.f, | 238 1.f, |
| 264 false, | 239 false, |
| 265 gfx::Rect(), | 240 gfx::Rect(), |
| 266 render_surface_layer_list); | 241 render_surface_layer_list); |
| 267 bool record_metrics = true; | |
| 268 TestOcclusionTracker<LayerImpl> occlusion_tracker( | 242 TestOcclusionTracker<LayerImpl> occlusion_tracker( |
| 269 gfx::Rect(-100, -100, 1000, 1000), record_metrics); | 243 gfx::Rect(-100, -100, 1000, 1000)); |
| 270 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); | 244 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); |
| 271 | 245 |
| 272 AppendQuads(&quad_list, | 246 AppendQuads(&quad_list, |
| 273 &shared_state_list, | 247 &shared_state_list, |
| 274 child_layer.get(), | 248 child_layer.get(), |
| 275 &it, | 249 &it, |
| 276 &occlusion_tracker); | 250 &occlusion_tracker); |
| 277 AppendQuads(&quad_list, | 251 AppendQuads(&quad_list, |
| 278 &shared_state_list, | 252 &shared_state_list, |
| 279 root_layer.get(), | 253 root_layer.get(), |
| 280 &it, | 254 &it, |
| 281 &occlusion_tracker); | 255 &occlusion_tracker); |
| 282 EXPECT_EQ(13u, quad_list.size()); | 256 EXPECT_EQ(13u, quad_list.size()); |
| 283 EXPECT_NEAR( | |
| 284 occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 90000, 1); | |
| 285 EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), | |
| 286 40000, | |
| 287 1); | |
| 288 EXPECT_NEAR( | |
| 289 occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), 0, 1); | |
| 290 } | 257 } |
| 291 | 258 |
| 292 TEST_F(QuadCullerTest, CullCenterTileOnly) { | 259 TEST_F(QuadCullerTest, CullCenterTileOnly) { |
| 293 DECLARE_AND_INITIALIZE_TEST_QUADS(); | 260 DECLARE_AND_INITIALIZE_TEST_QUADS(); |
| 294 | 261 |
| 295 child_transform.Translate(50, 50); | 262 child_transform.Translate(50, 50); |
| 296 scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, | 263 scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, |
| 297 gfx::Transform(), | 264 gfx::Transform(), |
| 298 root_rect, | 265 root_rect, |
| 299 1.f, | 266 1.f, |
| 300 true, | 267 true, |
| 301 gfx::Rect(), | 268 gfx::Rect(), |
| 302 render_surface_layer_list); | 269 render_surface_layer_list); |
| 303 scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), | 270 scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), |
| 304 child_transform, | 271 child_transform, |
| 305 child_rect, | 272 child_rect, |
| 306 1.f, | 273 1.f, |
| 307 true, | 274 true, |
| 308 gfx::Rect(), | 275 gfx::Rect(), |
| 309 render_surface_layer_list); | 276 render_surface_layer_list); |
| 310 bool record_metrics = true; | |
| 311 TestOcclusionTracker<LayerImpl> occlusion_tracker( | 277 TestOcclusionTracker<LayerImpl> occlusion_tracker( |
| 312 gfx::Rect(-100, -100, 1000, 1000), record_metrics); | 278 gfx::Rect(-100, -100, 1000, 1000)); |
| 313 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); | 279 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); |
| 314 | 280 |
| 315 AppendQuads(&quad_list, | 281 AppendQuads(&quad_list, |
| 316 &shared_state_list, | 282 &shared_state_list, |
| 317 child_layer.get(), | 283 child_layer.get(), |
| 318 &it, | 284 &it, |
| 319 &occlusion_tracker); | 285 &occlusion_tracker); |
| 320 AppendQuads(&quad_list, | 286 AppendQuads(&quad_list, |
| 321 &shared_state_list, | 287 &shared_state_list, |
| 322 root_layer.get(), | 288 root_layer.get(), |
| 323 &it, | 289 &it, |
| 324 &occlusion_tracker); | 290 &occlusion_tracker); |
| 325 ASSERT_EQ(quad_list.size(), 12u); | 291 ASSERT_EQ(quad_list.size(), 12u); |
| 326 | 292 |
| 327 gfx::Rect quad_visible_rect1 = quad_list[5]->visible_rect; | 293 gfx::Rect quad_visible_rect1 = quad_list[5]->visible_rect; |
| 328 EXPECT_EQ(50, quad_visible_rect1.height()); | 294 EXPECT_EQ(50, quad_visible_rect1.height()); |
| 329 | 295 |
| 330 gfx::Rect quad_visible_rect3 = quad_list[7]->visible_rect; | 296 gfx::Rect quad_visible_rect3 = quad_list[7]->visible_rect; |
| 331 EXPECT_EQ(50, quad_visible_rect3.width()); | 297 EXPECT_EQ(50, quad_visible_rect3.width()); |
| 332 | 298 |
| 333 // Next index is 8, not 9, since centre quad culled. | 299 // Next index is 8, not 9, since centre quad culled. |
| 334 gfx::Rect quad_visible_rect4 = quad_list[8]->visible_rect; | 300 gfx::Rect quad_visible_rect4 = quad_list[8]->visible_rect; |
| 335 EXPECT_EQ(50, quad_visible_rect4.width()); | 301 EXPECT_EQ(50, quad_visible_rect4.width()); |
| 336 EXPECT_EQ(250, quad_visible_rect4.x()); | 302 EXPECT_EQ(250, quad_visible_rect4.x()); |
| 337 | 303 |
| 338 gfx::Rect quad_visible_rect6 = quad_list[10]->visible_rect; | 304 gfx::Rect quad_visible_rect6 = quad_list[10]->visible_rect; |
| 339 EXPECT_EQ(50, quad_visible_rect6.height()); | 305 EXPECT_EQ(50, quad_visible_rect6.height()); |
| 340 EXPECT_EQ(250, quad_visible_rect6.y()); | 306 EXPECT_EQ(250, quad_visible_rect6.y()); |
| 341 | |
| 342 EXPECT_NEAR( | |
| 343 occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 100000, 1); | |
| 344 EXPECT_NEAR( | |
| 345 occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); | |
| 346 EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), | |
| 347 30000, | |
| 348 1); | |
| 349 } | 307 } |
| 350 | 308 |
| 351 TEST_F(QuadCullerTest, CullCenterTileNonIntegralSize1) { | 309 TEST_F(QuadCullerTest, CullCenterTileNonIntegralSize1) { |
| 352 DECLARE_AND_INITIALIZE_TEST_QUADS(); | 310 DECLARE_AND_INITIALIZE_TEST_QUADS(); |
| 353 | 311 |
| 354 child_transform.Translate(100, 100); | 312 child_transform.Translate(100, 100); |
| 355 | 313 |
| 356 // Make the root layer's quad have extent (99.1, 99.1) -> (200.9, 200.9) to | 314 // Make the root layer's quad have extent (99.1, 99.1) -> (200.9, 200.9) to |
| 357 // make sure it doesn't get culled due to transform rounding. | 315 // make sure it doesn't get culled due to transform rounding. |
| 358 gfx::Transform root_transform; | 316 gfx::Transform root_transform; |
| 359 root_transform.Translate(99.1f, 99.1f); | 317 root_transform.Translate(99.1f, 99.1f); |
| 360 root_transform.Scale(1.018f, 1.018f); | 318 root_transform.Scale(1.018f, 1.018f); |
| 361 | 319 |
| 362 root_rect = child_rect = gfx::Rect(0, 0, 100, 100); | 320 root_rect = child_rect = gfx::Rect(0, 0, 100, 100); |
| 363 | 321 |
| 364 scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, | 322 scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, |
| 365 root_transform, | 323 root_transform, |
| 366 root_rect, | 324 root_rect, |
| 367 1.f, | 325 1.f, |
| 368 true, | 326 true, |
| 369 gfx::Rect(), | 327 gfx::Rect(), |
| 370 render_surface_layer_list); | 328 render_surface_layer_list); |
| 371 scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), | 329 scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), |
| 372 child_transform, | 330 child_transform, |
| 373 child_rect, | 331 child_rect, |
| 374 1.f, | 332 1.f, |
| 375 true, | 333 true, |
| 376 gfx::Rect(), | 334 gfx::Rect(), |
| 377 render_surface_layer_list); | 335 render_surface_layer_list); |
| 378 bool record_metrics = true; | |
| 379 TestOcclusionTracker<LayerImpl> occlusion_tracker( | 336 TestOcclusionTracker<LayerImpl> occlusion_tracker( |
| 380 gfx::Rect(-100, -100, 1000, 1000), record_metrics); | 337 gfx::Rect(-100, -100, 1000, 1000)); |
| 381 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); | 338 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); |
| 382 | 339 |
| 383 AppendQuads(&quad_list, | 340 AppendQuads(&quad_list, |
| 384 &shared_state_list, | 341 &shared_state_list, |
| 385 child_layer.get(), | 342 child_layer.get(), |
| 386 &it, | 343 &it, |
| 387 &occlusion_tracker); | 344 &occlusion_tracker); |
| 388 AppendQuads(&quad_list, | 345 AppendQuads(&quad_list, |
| 389 &shared_state_list, | 346 &shared_state_list, |
| 390 root_layer.get(), | 347 root_layer.get(), |
| 391 &it, | 348 &it, |
| 392 &occlusion_tracker); | 349 &occlusion_tracker); |
| 393 EXPECT_EQ(2u, quad_list.size()); | 350 EXPECT_EQ(2u, quad_list.size()); |
| 394 | |
| 395 EXPECT_NEAR( | |
| 396 occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 20363, 1); | |
| 397 EXPECT_NEAR( | |
| 398 occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); | |
| 399 EXPECT_NEAR( | |
| 400 occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), 0, 1); | |
| 401 } | 351 } |
| 402 | 352 |
| 403 TEST_F(QuadCullerTest, CullCenterTileNonIntegralSize2) { | 353 TEST_F(QuadCullerTest, CullCenterTileNonIntegralSize2) { |
| 404 DECLARE_AND_INITIALIZE_TEST_QUADS(); | 354 DECLARE_AND_INITIALIZE_TEST_QUADS(); |
| 405 | 355 |
| 406 // Make the child's quad slightly smaller than, and centred over, the root | 356 // Make the child's quad slightly smaller than, and centred over, the root |
| 407 // layer tile. Verify the child does not cause the quad below to be culled | 357 // layer tile. Verify the child does not cause the quad below to be culled |
| 408 // due to rounding. | 358 // due to rounding. |
| 409 child_transform.Translate(100.1f, 100.1f); | 359 child_transform.Translate(100.1f, 100.1f); |
| 410 child_transform.Scale(0.982f, 0.982f); | 360 child_transform.Scale(0.982f, 0.982f); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 421 true, | 371 true, |
| 422 gfx::Rect(), | 372 gfx::Rect(), |
| 423 render_surface_layer_list); | 373 render_surface_layer_list); |
| 424 scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), | 374 scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), |
| 425 child_transform, | 375 child_transform, |
| 426 child_rect, | 376 child_rect, |
| 427 1.f, | 377 1.f, |
| 428 true, | 378 true, |
| 429 gfx::Rect(), | 379 gfx::Rect(), |
| 430 render_surface_layer_list); | 380 render_surface_layer_list); |
| 431 bool record_metrics = true; | |
| 432 TestOcclusionTracker<LayerImpl> occlusion_tracker( | 381 TestOcclusionTracker<LayerImpl> occlusion_tracker( |
| 433 gfx::Rect(-100, -100, 1000, 1000), record_metrics); | 382 gfx::Rect(-100, -100, 1000, 1000)); |
| 434 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); | 383 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); |
| 435 | 384 |
| 436 AppendQuads(&quad_list, | 385 AppendQuads(&quad_list, |
| 437 &shared_state_list, | 386 &shared_state_list, |
| 438 child_layer.get(), | 387 child_layer.get(), |
| 439 &it, | 388 &it, |
| 440 &occlusion_tracker); | 389 &occlusion_tracker); |
| 441 AppendQuads(&quad_list, | 390 AppendQuads(&quad_list, |
| 442 &shared_state_list, | 391 &shared_state_list, |
| 443 root_layer.get(), | 392 root_layer.get(), |
| 444 &it, | 393 &it, |
| 445 &occlusion_tracker); | 394 &occlusion_tracker); |
| 446 EXPECT_EQ(2u, quad_list.size()); | 395 EXPECT_EQ(2u, quad_list.size()); |
| 447 | |
| 448 EXPECT_NEAR( | |
| 449 occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 19643, 1); | |
| 450 EXPECT_NEAR( | |
| 451 occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); | |
| 452 EXPECT_NEAR( | |
| 453 occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), 0, 1); | |
| 454 } | 396 } |
| 455 | 397 |
| 456 TEST_F(QuadCullerTest, CullChildLinesUpBottomRight) { | 398 TEST_F(QuadCullerTest, CullChildLinesUpBottomRight) { |
| 457 DECLARE_AND_INITIALIZE_TEST_QUADS(); | 399 DECLARE_AND_INITIALIZE_TEST_QUADS(); |
| 458 | 400 |
| 459 child_transform.Translate(100, 100); | 401 child_transform.Translate(100, 100); |
| 460 scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, | 402 scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, |
| 461 gfx::Transform(), | 403 gfx::Transform(), |
| 462 root_rect, | 404 root_rect, |
| 463 1.f, | 405 1.f, |
| 464 true, | 406 true, |
| 465 gfx::Rect(), | 407 gfx::Rect(), |
| 466 render_surface_layer_list); | 408 render_surface_layer_list); |
| 467 scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), | 409 scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), |
| 468 child_transform, | 410 child_transform, |
| 469 child_rect, | 411 child_rect, |
| 470 1.f, | 412 1.f, |
| 471 true, | 413 true, |
| 472 gfx::Rect(), | 414 gfx::Rect(), |
| 473 render_surface_layer_list); | 415 render_surface_layer_list); |
| 474 bool record_metrics = true; | |
| 475 TestOcclusionTracker<LayerImpl> occlusion_tracker( | 416 TestOcclusionTracker<LayerImpl> occlusion_tracker( |
| 476 gfx::Rect(-100, -100, 1000, 1000), record_metrics); | 417 gfx::Rect(-100, -100, 1000, 1000)); |
| 477 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); | 418 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); |
| 478 | 419 |
| 479 AppendQuads(&quad_list, | 420 AppendQuads(&quad_list, |
| 480 &shared_state_list, | 421 &shared_state_list, |
| 481 child_layer.get(), | 422 child_layer.get(), |
| 482 &it, | 423 &it, |
| 483 &occlusion_tracker); | 424 &occlusion_tracker); |
| 484 AppendQuads(&quad_list, | 425 AppendQuads(&quad_list, |
| 485 &shared_state_list, | 426 &shared_state_list, |
| 486 root_layer.get(), | 427 root_layer.get(), |
| 487 &it, | 428 &it, |
| 488 &occlusion_tracker); | 429 &occlusion_tracker); |
| 489 EXPECT_EQ(9u, quad_list.size()); | 430 EXPECT_EQ(9u, quad_list.size()); |
| 490 EXPECT_NEAR( | |
| 491 occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 90000, 1); | |
| 492 EXPECT_NEAR( | |
| 493 occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); | |
| 494 EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), | |
| 495 40000, | |
| 496 1); | |
| 497 } | 431 } |
| 498 | 432 |
| 499 TEST_F(QuadCullerTest, CullSubRegion) { | 433 TEST_F(QuadCullerTest, CullSubRegion) { |
| 500 DECLARE_AND_INITIALIZE_TEST_QUADS(); | 434 DECLARE_AND_INITIALIZE_TEST_QUADS(); |
| 501 | 435 |
| 502 child_transform.Translate(50, 50); | 436 child_transform.Translate(50, 50); |
| 503 scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, | 437 scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, |
| 504 gfx::Transform(), | 438 gfx::Transform(), |
| 505 root_rect, | 439 root_rect, |
| 506 1.f, | 440 1.f, |
| 507 true, | 441 true, |
| 508 gfx::Rect(), | 442 gfx::Rect(), |
| 509 render_surface_layer_list); | 443 render_surface_layer_list); |
| 510 gfx::Rect child_opaque_rect(child_rect.x() + child_rect.width() / 4, | 444 gfx::Rect child_opaque_rect(child_rect.x() + child_rect.width() / 4, |
| 511 child_rect.y() + child_rect.height() / 4, | 445 child_rect.y() + child_rect.height() / 4, |
| 512 child_rect.width() / 2, | 446 child_rect.width() / 2, |
| 513 child_rect.height() / 2); | 447 child_rect.height() / 2); |
| 514 scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), | 448 scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), |
| 515 child_transform, | 449 child_transform, |
| 516 child_rect, | 450 child_rect, |
| 517 1.f, | 451 1.f, |
| 518 false, | 452 false, |
| 519 child_opaque_rect, | 453 child_opaque_rect, |
| 520 render_surface_layer_list); | 454 render_surface_layer_list); |
| 521 bool record_metrics = true; | |
| 522 TestOcclusionTracker<LayerImpl> occlusion_tracker( | 455 TestOcclusionTracker<LayerImpl> occlusion_tracker( |
| 523 gfx::Rect(-100, -100, 1000, 1000), record_metrics); | 456 gfx::Rect(-100, -100, 1000, 1000)); |
| 524 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); | 457 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); |
| 525 | 458 |
| 526 AppendQuads(&quad_list, | 459 AppendQuads(&quad_list, |
| 527 &shared_state_list, | 460 &shared_state_list, |
| 528 child_layer.get(), | 461 child_layer.get(), |
| 529 &it, | 462 &it, |
| 530 &occlusion_tracker); | 463 &occlusion_tracker); |
| 531 AppendQuads(&quad_list, | 464 AppendQuads(&quad_list, |
| 532 &shared_state_list, | 465 &shared_state_list, |
| 533 root_layer.get(), | 466 root_layer.get(), |
| 534 &it, | 467 &it, |
| 535 &occlusion_tracker); | 468 &occlusion_tracker); |
| 536 EXPECT_EQ(12u, quad_list.size()); | 469 EXPECT_EQ(12u, quad_list.size()); |
| 537 EXPECT_NEAR( | |
| 538 occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 90000, 1); | |
| 539 EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), | |
| 540 30000, | |
| 541 1); | |
| 542 EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), | |
| 543 10000, | |
| 544 1); | |
| 545 } | 470 } |
| 546 | 471 |
| 547 TEST_F(QuadCullerTest, CullSubRegion2) { | 472 TEST_F(QuadCullerTest, CullSubRegion2) { |
| 548 DECLARE_AND_INITIALIZE_TEST_QUADS(); | 473 DECLARE_AND_INITIALIZE_TEST_QUADS(); |
| 549 | 474 |
| 550 child_transform.Translate(50, 10); | 475 child_transform.Translate(50, 10); |
| 551 scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, | 476 scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, |
| 552 gfx::Transform(), | 477 gfx::Transform(), |
| 553 root_rect, | 478 root_rect, |
| 554 1.f, | 479 1.f, |
| 555 true, | 480 true, |
| 556 gfx::Rect(), | 481 gfx::Rect(), |
| 557 render_surface_layer_list); | 482 render_surface_layer_list); |
| 558 gfx::Rect child_opaque_rect(child_rect.x() + child_rect.width() / 4, | 483 gfx::Rect child_opaque_rect(child_rect.x() + child_rect.width() / 4, |
| 559 child_rect.y() + child_rect.height() / 4, | 484 child_rect.y() + child_rect.height() / 4, |
| 560 child_rect.width() / 2, | 485 child_rect.width() / 2, |
| 561 child_rect.height() * 3 / 4); | 486 child_rect.height() * 3 / 4); |
| 562 scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), | 487 scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), |
| 563 child_transform, | 488 child_transform, |
| 564 child_rect, | 489 child_rect, |
| 565 1.f, | 490 1.f, |
| 566 false, | 491 false, |
| 567 child_opaque_rect, | 492 child_opaque_rect, |
| 568 render_surface_layer_list); | 493 render_surface_layer_list); |
| 569 bool record_metrics = true; | |
| 570 TestOcclusionTracker<LayerImpl> occlusion_tracker( | 494 TestOcclusionTracker<LayerImpl> occlusion_tracker( |
| 571 gfx::Rect(-100, -100, 1000, 1000), record_metrics); | 495 gfx::Rect(-100, -100, 1000, 1000)); |
| 572 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); | 496 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); |
| 573 | 497 |
| 574 AppendQuads(&quad_list, | 498 AppendQuads(&quad_list, |
| 575 &shared_state_list, | 499 &shared_state_list, |
| 576 child_layer.get(), | 500 child_layer.get(), |
| 577 &it, | 501 &it, |
| 578 &occlusion_tracker); | 502 &occlusion_tracker); |
| 579 AppendQuads(&quad_list, | 503 AppendQuads(&quad_list, |
| 580 &shared_state_list, | 504 &shared_state_list, |
| 581 root_layer.get(), | 505 root_layer.get(), |
| 582 &it, | 506 &it, |
| 583 &occlusion_tracker); | 507 &occlusion_tracker); |
| 584 EXPECT_EQ(12u, quad_list.size()); | 508 EXPECT_EQ(12u, quad_list.size()); |
| 585 EXPECT_NEAR( | |
| 586 occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 90000, 1); | |
| 587 EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), | |
| 588 25000, | |
| 589 1); | |
| 590 EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), | |
| 591 15000, | |
| 592 1); | |
| 593 } | 509 } |
| 594 | 510 |
| 595 TEST_F(QuadCullerTest, CullSubRegionCheckOvercull) { | 511 TEST_F(QuadCullerTest, CullSubRegionCheckOvercull) { |
| 596 DECLARE_AND_INITIALIZE_TEST_QUADS(); | 512 DECLARE_AND_INITIALIZE_TEST_QUADS(); |
| 597 | 513 |
| 598 child_transform.Translate(50, 49); | 514 child_transform.Translate(50, 49); |
| 599 scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, | 515 scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, |
| 600 gfx::Transform(), | 516 gfx::Transform(), |
| 601 root_rect, | 517 root_rect, |
| 602 1.f, | 518 1.f, |
| 603 true, | 519 true, |
| 604 gfx::Rect(), | 520 gfx::Rect(), |
| 605 render_surface_layer_list); | 521 render_surface_layer_list); |
| 606 gfx::Rect child_opaque_rect(child_rect.x() + child_rect.width() / 4, | 522 gfx::Rect child_opaque_rect(child_rect.x() + child_rect.width() / 4, |
| 607 child_rect.y() + child_rect.height() / 4, | 523 child_rect.y() + child_rect.height() / 4, |
| 608 child_rect.width() / 2, | 524 child_rect.width() / 2, |
| 609 child_rect.height() / 2); | 525 child_rect.height() / 2); |
| 610 scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), | 526 scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), |
| 611 child_transform, | 527 child_transform, |
| 612 child_rect, | 528 child_rect, |
| 613 1.f, | 529 1.f, |
| 614 false, | 530 false, |
| 615 child_opaque_rect, | 531 child_opaque_rect, |
| 616 render_surface_layer_list); | 532 render_surface_layer_list); |
| 617 bool record_metrics = true; | |
| 618 TestOcclusionTracker<LayerImpl> occlusion_tracker( | 533 TestOcclusionTracker<LayerImpl> occlusion_tracker( |
| 619 gfx::Rect(-100, -100, 1000, 1000), record_metrics); | 534 gfx::Rect(-100, -100, 1000, 1000)); |
| 620 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); | 535 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); |
| 621 | 536 |
| 622 AppendQuads(&quad_list, | 537 AppendQuads(&quad_list, |
| 623 &shared_state_list, | 538 &shared_state_list, |
| 624 child_layer.get(), | 539 child_layer.get(), |
| 625 &it, | 540 &it, |
| 626 &occlusion_tracker); | 541 &occlusion_tracker); |
| 627 AppendQuads(&quad_list, | 542 AppendQuads(&quad_list, |
| 628 &shared_state_list, | 543 &shared_state_list, |
| 629 root_layer.get(), | 544 root_layer.get(), |
| 630 &it, | 545 &it, |
| 631 &occlusion_tracker); | 546 &occlusion_tracker); |
| 632 EXPECT_EQ(13u, quad_list.size()); | 547 EXPECT_EQ(13u, quad_list.size()); |
| 633 EXPECT_NEAR( | |
| 634 occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 90000, 1); | |
| 635 EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), | |
| 636 30000, | |
| 637 1); | |
| 638 EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), | |
| 639 10000, | |
| 640 1); | |
| 641 } | 548 } |
| 642 | 549 |
| 643 TEST_F(QuadCullerTest, NonAxisAlignedQuadsDontOcclude) { | 550 TEST_F(QuadCullerTest, NonAxisAlignedQuadsDontOcclude) { |
| 644 DECLARE_AND_INITIALIZE_TEST_QUADS(); | 551 DECLARE_AND_INITIALIZE_TEST_QUADS(); |
| 645 | 552 |
| 646 // Use a small rotation so as to not disturb the geometry significantly. | 553 // Use a small rotation so as to not disturb the geometry significantly. |
| 647 child_transform.Rotate(1); | 554 child_transform.Rotate(1); |
| 648 | 555 |
| 649 scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, | 556 scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, |
| 650 gfx::Transform(), | 557 gfx::Transform(), |
| 651 root_rect, | 558 root_rect, |
| 652 1.f, | 559 1.f, |
| 653 true, | 560 true, |
| 654 gfx::Rect(), | 561 gfx::Rect(), |
| 655 render_surface_layer_list); | 562 render_surface_layer_list); |
| 656 scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), | 563 scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), |
| 657 child_transform, | 564 child_transform, |
| 658 child_rect, | 565 child_rect, |
| 659 1.f, | 566 1.f, |
| 660 true, | 567 true, |
| 661 gfx::Rect(), | 568 gfx::Rect(), |
| 662 render_surface_layer_list); | 569 render_surface_layer_list); |
| 663 bool record_metrics = true; | |
| 664 TestOcclusionTracker<LayerImpl> occlusion_tracker( | 570 TestOcclusionTracker<LayerImpl> occlusion_tracker( |
| 665 gfx::Rect(-100, -100, 1000, 1000), record_metrics); | 571 gfx::Rect(-100, -100, 1000, 1000)); |
| 666 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); | 572 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); |
| 667 | 573 |
| 668 AppendQuads(&quad_list, | 574 AppendQuads(&quad_list, |
| 669 &shared_state_list, | 575 &shared_state_list, |
| 670 child_layer.get(), | 576 child_layer.get(), |
| 671 &it, | 577 &it, |
| 672 &occlusion_tracker); | 578 &occlusion_tracker); |
| 673 AppendQuads(&quad_list, | 579 AppendQuads(&quad_list, |
| 674 &shared_state_list, | 580 &shared_state_list, |
| 675 root_layer.get(), | 581 root_layer.get(), |
| 676 &it, | 582 &it, |
| 677 &occlusion_tracker); | 583 &occlusion_tracker); |
| 678 EXPECT_EQ(13u, quad_list.size()); | 584 EXPECT_EQ(13u, quad_list.size()); |
| 679 EXPECT_NEAR( | |
| 680 occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 130000, 1); | |
| 681 EXPECT_NEAR( | |
| 682 occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); | |
| 683 EXPECT_NEAR( | |
| 684 occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), 0, 1); | |
| 685 } | 585 } |
| 686 | 586 |
| 687 // This test requires some explanation: here we are rotating the quads to be | 587 // This test requires some explanation: here we are rotating the quads to be |
| 688 // culled. The 2x2 tile child layer remains in the top-left corner, unrotated, | 588 // culled. The 2x2 tile child layer remains in the top-left corner, unrotated, |
| 689 // but the 3x3 tile parent layer is rotated by 1 degree. Of the four tiles the | 589 // but the 3x3 tile parent layer is rotated by 1 degree. Of the four tiles the |
| 690 // child would normally occlude, three will move (slightly) out from under the | 590 // child would normally occlude, three will move (slightly) out from under the |
| 691 // child layer, and one moves further under the child. Only this last tile | 591 // child layer, and one moves further under the child. Only this last tile |
| 692 // should be culled. | 592 // should be culled. |
| 693 TEST_F(QuadCullerTest, NonAxisAlignedQuadsSafelyCulled) { | 593 TEST_F(QuadCullerTest, NonAxisAlignedQuadsSafelyCulled) { |
| 694 DECLARE_AND_INITIALIZE_TEST_QUADS(); | 594 DECLARE_AND_INITIALIZE_TEST_QUADS(); |
| 695 | 595 |
| 696 // Use a small rotation so as to not disturb the geometry significantly. | 596 // Use a small rotation so as to not disturb the geometry significantly. |
| 697 gfx::Transform parent_transform; | 597 gfx::Transform parent_transform; |
| 698 parent_transform.Rotate(1); | 598 parent_transform.Rotate(1); |
| 699 | 599 |
| 700 scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, | 600 scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, |
| 701 parent_transform, | 601 parent_transform, |
| 702 root_rect, | 602 root_rect, |
| 703 1.f, | 603 1.f, |
| 704 true, | 604 true, |
| 705 gfx::Rect(), | 605 gfx::Rect(), |
| 706 render_surface_layer_list); | 606 render_surface_layer_list); |
| 707 scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), | 607 scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), |
| 708 gfx::Transform(), | 608 gfx::Transform(), |
| 709 child_rect, | 609 child_rect, |
| 710 1.f, | 610 1.f, |
| 711 true, | 611 true, |
| 712 gfx::Rect(), | 612 gfx::Rect(), |
| 713 render_surface_layer_list); | 613 render_surface_layer_list); |
| 714 bool record_metrics = true; | |
| 715 TestOcclusionTracker<LayerImpl> occlusion_tracker( | 614 TestOcclusionTracker<LayerImpl> occlusion_tracker( |
| 716 gfx::Rect(-100, -100, 1000, 1000), record_metrics); | 615 gfx::Rect(-100, -100, 1000, 1000)); |
| 717 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); | 616 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); |
| 718 | 617 |
| 719 AppendQuads(&quad_list, | 618 AppendQuads(&quad_list, |
| 720 &shared_state_list, | 619 &shared_state_list, |
| 721 child_layer.get(), | 620 child_layer.get(), |
| 722 &it, | 621 &it, |
| 723 &occlusion_tracker); | 622 &occlusion_tracker); |
| 724 AppendQuads(&quad_list, | 623 AppendQuads(&quad_list, |
| 725 &shared_state_list, | 624 &shared_state_list, |
| 726 root_layer.get(), | 625 root_layer.get(), |
| 727 &it, | 626 &it, |
| 728 &occlusion_tracker); | 627 &occlusion_tracker); |
| 729 EXPECT_EQ(12u, quad_list.size()); | 628 EXPECT_EQ(12u, quad_list.size()); |
| 730 EXPECT_NEAR( | |
| 731 occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque(), 100600, 1); | |
| 732 EXPECT_NEAR( | |
| 733 occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent(), 0, 1); | |
| 734 EXPECT_NEAR(occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing(), | |
| 735 29400, | |
| 736 1); | |
| 737 } | |
| 738 | |
| 739 TEST_F(QuadCullerTest, WithoutMetrics) { | |
| 740 DECLARE_AND_INITIALIZE_TEST_QUADS(); | |
| 741 scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL, | |
| 742 gfx::Transform(), | |
| 743 root_rect, | |
| 744 1.f, | |
| 745 true, | |
| 746 gfx::Rect(), | |
| 747 render_surface_layer_list); | |
| 748 scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(), | |
| 749 gfx::Transform(), | |
| 750 child_rect, | |
| 751 1.f, | |
| 752 true, | |
| 753 gfx::Rect(), | |
| 754 render_surface_layer_list); | |
| 755 bool record_metrics = false; | |
| 756 TestOcclusionTracker<LayerImpl> occlusion_tracker( | |
| 757 gfx::Rect(-100, -100, 1000, 1000), record_metrics); | |
| 758 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); | |
| 759 | |
| 760 AppendQuads(&quad_list, | |
| 761 &shared_state_list, | |
| 762 child_layer.get(), | |
| 763 &it, | |
| 764 &occlusion_tracker); | |
| 765 AppendQuads(&quad_list, | |
| 766 &shared_state_list, | |
| 767 root_layer.get(), | |
| 768 &it, | |
| 769 &occlusion_tracker); | |
| 770 EXPECT_EQ(9u, quad_list.size()); | |
| 771 EXPECT_EQ(0.f, | |
| 772 occlusion_tracker.overdraw_metrics()->pixels_drawn_opaque()); | |
| 773 EXPECT_EQ(0.f, | |
| 774 occlusion_tracker.overdraw_metrics()->pixels_drawn_translucent()); | |
| 775 EXPECT_EQ(0.f, | |
| 776 occlusion_tracker.overdraw_metrics()->pixels_culled_for_drawing()); | |
| 777 } | 629 } |
| 778 | 630 |
| 779 TEST_F(QuadCullerTest, PartialCullingNotDestroyed) { | 631 TEST_F(QuadCullerTest, PartialCullingNotDestroyed) { |
| 780 DECLARE_AND_INITIALIZE_TEST_QUADS(); | 632 DECLARE_AND_INITIALIZE_TEST_QUADS(); |
| 781 | 633 |
| 782 scoped_ptr<TiledLayerImpl> dummy_layer = MakeLayer(NULL, | 634 scoped_ptr<TiledLayerImpl> dummy_layer = MakeLayer(NULL, |
| 783 gfx::Transform(), | 635 gfx::Transform(), |
| 784 gfx::Rect(), | 636 gfx::Rect(), |
| 785 1.f, | 637 1.f, |
| 786 true, | 638 true, |
| 787 gfx::Rect(), | 639 gfx::Rect(), |
| 788 render_surface_layer_list); | 640 render_surface_layer_list); |
| 789 | 641 |
| 790 bool record_metrics = true; | 642 TestOcclusionTracker<LayerImpl> occlusion_tracker(gfx::Rect(1000, 1000)); |
| 791 TestOcclusionTracker<LayerImpl> occlusion_tracker(gfx::Rect(1000, 1000), | |
| 792 record_metrics); | |
| 793 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); | 643 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); |
| 794 | 644 |
| 795 QuadCuller culler(&quad_list, | 645 QuadCuller culler(&quad_list, |
| 796 &shared_state_list, | 646 &shared_state_list, |
| 797 dummy_layer.get(), | 647 dummy_layer.get(), |
| 798 occlusion_tracker, | 648 occlusion_tracker, |
| 799 false, | 649 false, |
| 800 false); | 650 false); |
| 801 | 651 |
| 802 SharedQuadState* sqs = culler.UseSharedQuadState(SharedQuadState::Create()); | 652 SharedQuadState* sqs = culler.UseSharedQuadState(SharedQuadState::Create()); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 859 DECLARE_AND_INITIALIZE_TEST_QUADS(); | 709 DECLARE_AND_INITIALIZE_TEST_QUADS(); |
| 860 | 710 |
| 861 scoped_ptr<TiledLayerImpl> dummy_layer = MakeLayer(NULL, | 711 scoped_ptr<TiledLayerImpl> dummy_layer = MakeLayer(NULL, |
| 862 gfx::Transform(), | 712 gfx::Transform(), |
| 863 gfx::Rect(), | 713 gfx::Rect(), |
| 864 1.f, | 714 1.f, |
| 865 true, | 715 true, |
| 866 gfx::Rect(), | 716 gfx::Rect(), |
| 867 render_surface_layer_list); | 717 render_surface_layer_list); |
| 868 | 718 |
| 869 bool record_metrics = true; | 719 TestOcclusionTracker<LayerImpl> occlusion_tracker(gfx::Rect(1000, 1000)); |
| 870 TestOcclusionTracker<LayerImpl> occlusion_tracker(gfx::Rect(1000, 1000), | |
| 871 record_metrics); | |
| 872 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); | 720 LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list); |
| 873 | 721 |
| 874 QuadCuller culler(&quad_list, | 722 QuadCuller culler(&quad_list, |
| 875 &shared_state_list, | 723 &shared_state_list, |
| 876 dummy_layer.get(), | 724 dummy_layer.get(), |
| 877 occlusion_tracker, | 725 occlusion_tracker, |
| 878 false, | 726 false, |
| 879 false); | 727 false); |
| 880 | 728 |
| 881 SharedQuadState* sqs = culler.UseSharedQuadState(SharedQuadState::Create()); | 729 SharedQuadState* sqs = culler.UseSharedQuadState(SharedQuadState::Create()); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 931 EXPECT_EQ(gfx::Rect(15, 10, 5, 11).ToString(), | 779 EXPECT_EQ(gfx::Rect(15, 10, 5, 11).ToString(), |
| 932 quad_list[0]->visible_rect.ToString()); | 780 quad_list[0]->visible_rect.ToString()); |
| 933 EXPECT_EQ(gfx::Rect(15, 20, 8, 14).ToString(), | 781 EXPECT_EQ(gfx::Rect(15, 20, 8, 14).ToString(), |
| 934 quad_list[1]->visible_rect.ToString()); | 782 quad_list[1]->visible_rect.ToString()); |
| 935 EXPECT_EQ(gfx::Rect(15, 30, 10, 16).ToString(), | 783 EXPECT_EQ(gfx::Rect(15, 30, 10, 16).ToString(), |
| 936 quad_list[2]->visible_rect.ToString()); | 784 quad_list[2]->visible_rect.ToString()); |
| 937 } | 785 } |
| 938 | 786 |
| 939 } // namespace | 787 } // namespace |
| 940 } // namespace cc | 788 } // namespace cc |
| OLD | NEW |