| OLD | NEW |
| 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 "cc/layers/picture_layer_impl.h" | 5 #include "cc/layers/picture_layer_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <set> | 9 #include <set> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 312 scoped_refptr<FakePicturePileImpl> active_pile = | 312 scoped_refptr<FakePicturePileImpl> active_pile = |
| 313 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 313 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
| 314 | 314 |
| 315 SetupTrees(pending_pile, active_pile); | 315 SetupTrees(pending_pile, active_pile); |
| 316 | 316 |
| 317 Region invalidation; | 317 Region invalidation; |
| 318 AddDefaultTilingsWithInvalidation(invalidation); | 318 AddDefaultTilingsWithInvalidation(invalidation); |
| 319 SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, false); | 319 SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, false); |
| 320 | 320 |
| 321 // UpdateTiles with valid viewport. Should update tile viewport. | 321 // UpdateTiles with valid viewport. Should update tile viewport. |
| 322 bool valid_for_tile_management = true; | 322 // Note viewport is considered invalid if and only if in resourceless |
| 323 // software draw. |
| 324 bool resourceless_software_draw = false; |
| 323 gfx::Rect viewport = gfx::Rect(layer_bounds); | 325 gfx::Rect viewport = gfx::Rect(layer_bounds); |
| 324 gfx::Transform transform; | 326 gfx::Transform transform; |
| 325 host_impl_.SetExternalDrawConstraints( | 327 host_impl_.SetExternalDrawConstraints( |
| 326 transform, viewport, viewport, valid_for_tile_management); | 328 transform, viewport, viewport, resourceless_software_draw); |
| 327 active_layer_->draw_properties().visible_content_rect = viewport; | 329 active_layer_->draw_properties().visible_content_rect = viewport; |
| 328 active_layer_->draw_properties().screen_space_transform = transform; | 330 active_layer_->draw_properties().screen_space_transform = transform; |
| 329 active_layer_->UpdateTiles(NULL); | 331 active_layer_->UpdateTiles(NULL); |
| 330 | 332 |
| 331 gfx::Rect visible_rect_for_tile_priority = | 333 gfx::Rect visible_rect_for_tile_priority = |
| 332 active_layer_->visible_rect_for_tile_priority(); | 334 active_layer_->visible_rect_for_tile_priority(); |
| 333 EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty()); | 335 EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty()); |
| 334 gfx::Size viewport_size_for_tile_priority = | 336 gfx::Size viewport_size_for_tile_priority = |
| 335 active_layer_->viewport_size_for_tile_priority(); | 337 active_layer_->viewport_size_for_tile_priority(); |
| 336 EXPECT_FALSE(viewport_size_for_tile_priority.IsEmpty()); | 338 EXPECT_FALSE(viewport_size_for_tile_priority.IsEmpty()); |
| 337 gfx::Transform screen_space_transform_for_tile_priority = | 339 gfx::Transform screen_space_transform_for_tile_priority = |
| 338 active_layer_->screen_space_transform_for_tile_priority(); | 340 active_layer_->screen_space_transform_for_tile_priority(); |
| 339 | 341 |
| 340 // Expand viewport and set it as invalid for prioritizing tiles. | 342 // Expand viewport and set it as invalid for prioritizing tiles. |
| 341 // Should not update tile viewport. | 343 // Should not update tile viewport. |
| 342 time_ticks += base::TimeDelta::FromMilliseconds(200); | 344 time_ticks += base::TimeDelta::FromMilliseconds(200); |
| 343 host_impl_.SetCurrentFrameTimeTicks(time_ticks); | 345 host_impl_.SetCurrentFrameTimeTicks(time_ticks); |
| 344 valid_for_tile_management = false; | 346 resourceless_software_draw = true; |
| 345 viewport = gfx::ScaleToEnclosingRect(viewport, 2); | 347 viewport = gfx::ScaleToEnclosingRect(viewport, 2); |
| 346 transform.Translate(1.f, 1.f); | 348 transform.Translate(1.f, 1.f); |
| 347 active_layer_->draw_properties().visible_content_rect = viewport; | 349 active_layer_->draw_properties().visible_content_rect = viewport; |
| 348 active_layer_->draw_properties().screen_space_transform = transform; | 350 active_layer_->draw_properties().screen_space_transform = transform; |
| 349 host_impl_.SetExternalDrawConstraints( | 351 host_impl_.SetExternalDrawConstraints( |
| 350 transform, viewport, viewport, valid_for_tile_management); | 352 transform, viewport, viewport, resourceless_software_draw); |
| 351 active_layer_->UpdateTiles(NULL); | 353 active_layer_->UpdateTiles(NULL); |
| 352 | 354 |
| 353 EXPECT_RECT_EQ(visible_rect_for_tile_priority, | 355 EXPECT_RECT_EQ(visible_rect_for_tile_priority, |
| 354 active_layer_->visible_rect_for_tile_priority()); | 356 active_layer_->visible_rect_for_tile_priority()); |
| 355 EXPECT_SIZE_EQ(viewport_size_for_tile_priority, | 357 EXPECT_SIZE_EQ(viewport_size_for_tile_priority, |
| 356 active_layer_->viewport_size_for_tile_priority()); | 358 active_layer_->viewport_size_for_tile_priority()); |
| 357 EXPECT_TRANSFORMATION_MATRIX_EQ( | 359 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 358 screen_space_transform_for_tile_priority, | 360 screen_space_transform_for_tile_priority, |
| 359 active_layer_->screen_space_transform_for_tile_priority()); | 361 active_layer_->screen_space_transform_for_tile_priority()); |
| 360 | 362 |
| 361 // Keep expanded viewport but mark it valid. Should update tile viewport. | 363 // Keep expanded viewport but mark it valid. Should update tile viewport. |
| 362 time_ticks += base::TimeDelta::FromMilliseconds(200); | 364 time_ticks += base::TimeDelta::FromMilliseconds(200); |
| 363 host_impl_.SetCurrentFrameTimeTicks(time_ticks); | 365 host_impl_.SetCurrentFrameTimeTicks(time_ticks); |
| 364 valid_for_tile_management = true; | 366 resourceless_software_draw = false; |
| 365 host_impl_.SetExternalDrawConstraints( | 367 host_impl_.SetExternalDrawConstraints( |
| 366 transform, viewport, viewport, valid_for_tile_management); | 368 transform, viewport, viewport, resourceless_software_draw); |
| 367 active_layer_->UpdateTiles(NULL); | 369 active_layer_->UpdateTiles(NULL); |
| 368 | 370 |
| 369 EXPECT_FALSE(visible_rect_for_tile_priority == | 371 EXPECT_FALSE(visible_rect_for_tile_priority == |
| 370 active_layer_->visible_rect_for_tile_priority()); | 372 active_layer_->visible_rect_for_tile_priority()); |
| 371 EXPECT_FALSE(viewport_size_for_tile_priority == | 373 EXPECT_FALSE(viewport_size_for_tile_priority == |
| 372 active_layer_->viewport_size_for_tile_priority()); | 374 active_layer_->viewport_size_for_tile_priority()); |
| 373 EXPECT_FALSE(screen_space_transform_for_tile_priority == | 375 EXPECT_FALSE(screen_space_transform_for_tile_priority == |
| 374 active_layer_->screen_space_transform_for_tile_priority()); | 376 active_layer_->screen_space_transform_for_tile_priority()); |
| 375 } | 377 } |
| 376 | 378 |
| 377 TEST_F(PictureLayerImplTest, InvalidViewportAfterReleaseResources) { | 379 TEST_F(PictureLayerImplTest, InvalidViewportAfterReleaseResources) { |
| 378 base::TimeTicks time_ticks; | 380 base::TimeTicks time_ticks; |
| 379 host_impl_.SetCurrentFrameTimeTicks(time_ticks); | 381 host_impl_.SetCurrentFrameTimeTicks(time_ticks); |
| 380 | 382 |
| 381 gfx::Size tile_size(100, 100); | 383 gfx::Size tile_size(100, 100); |
| 382 gfx::Size layer_bounds(400, 400); | 384 gfx::Size layer_bounds(400, 400); |
| 383 | 385 |
| 384 scoped_refptr<FakePicturePileImpl> pending_pile = | 386 scoped_refptr<FakePicturePileImpl> pending_pile = |
| 385 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 387 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
| 386 scoped_refptr<FakePicturePileImpl> active_pile = | 388 scoped_refptr<FakePicturePileImpl> active_pile = |
| 387 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 389 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
| 388 | 390 |
| 389 SetupTrees(pending_pile, active_pile); | 391 SetupTrees(pending_pile, active_pile); |
| 390 | 392 |
| 391 Region invalidation; | 393 Region invalidation; |
| 392 AddDefaultTilingsWithInvalidation(invalidation); | 394 AddDefaultTilingsWithInvalidation(invalidation); |
| 393 | 395 |
| 394 bool valid_for_tile_management = false; | 396 bool resourceless_software_draw = true; |
| 395 gfx::Rect viewport = gfx::Rect(layer_bounds); | 397 gfx::Rect viewport = gfx::Rect(layer_bounds); |
| 396 host_impl_.SetExternalDrawConstraints( | 398 host_impl_.SetExternalDrawConstraints( |
| 397 gfx::Transform(), viewport, viewport, valid_for_tile_management); | 399 gfx::Transform(), viewport, viewport, resourceless_software_draw); |
| 398 ResetTilingsAndRasterScales(); | 400 ResetTilingsAndRasterScales(); |
| 399 host_impl_.pending_tree()->UpdateDrawProperties(); | 401 host_impl_.pending_tree()->UpdateDrawProperties(); |
| 400 host_impl_.active_tree()->UpdateDrawProperties(); | 402 host_impl_.active_tree()->UpdateDrawProperties(); |
| 401 EXPECT_TRUE(active_layer_->HighResTiling()); | 403 EXPECT_TRUE(active_layer_->HighResTiling()); |
| 402 | 404 |
| 403 size_t num_tilings = active_layer_->num_tilings(); | 405 size_t num_tilings = active_layer_->num_tilings(); |
| 404 active_layer_->UpdateTiles(NULL); | 406 active_layer_->UpdateTiles(NULL); |
| 405 pending_layer_->AddTiling(0.5f); | 407 pending_layer_->AddTiling(0.5f); |
| 406 EXPECT_EQ(num_tilings + 1, active_layer_->num_tilings()); | 408 EXPECT_EQ(num_tilings + 1, active_layer_->num_tilings()); |
| 407 } | 409 } |
| (...skipping 2003 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2411 scoped_refptr<FakePicturePileImpl> active_pile = | 2413 scoped_refptr<FakePicturePileImpl> active_pile = |
| 2412 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 2414 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
| 2413 | 2415 |
| 2414 SetupTrees(pending_pile, active_pile); | 2416 SetupTrees(pending_pile, active_pile); |
| 2415 | 2417 |
| 2416 Region invalidation; | 2418 Region invalidation; |
| 2417 AddDefaultTilingsWithInvalidation(invalidation); | 2419 AddDefaultTilingsWithInvalidation(invalidation); |
| 2418 SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, false); | 2420 SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, false); |
| 2419 | 2421 |
| 2420 // UpdateTiles with valid viewport. Should update tile viewport. | 2422 // UpdateTiles with valid viewport. Should update tile viewport. |
| 2421 bool valid_for_tile_management = true; | 2423 // Note viewport is considered invalid if and only if in resourceless |
| 2424 // software draw. |
| 2425 bool resourceless_software_draw = false; |
| 2422 gfx::Rect viewport = gfx::Rect(layer_bounds); | 2426 gfx::Rect viewport = gfx::Rect(layer_bounds); |
| 2423 gfx::Transform transform; | 2427 gfx::Transform transform; |
| 2424 host_impl_.SetExternalDrawConstraints( | 2428 host_impl_.SetExternalDrawConstraints( |
| 2425 transform, viewport, viewport, valid_for_tile_management); | 2429 transform, viewport, viewport, resourceless_software_draw); |
| 2426 active_layer_->draw_properties().visible_content_rect = viewport; | 2430 active_layer_->draw_properties().visible_content_rect = viewport; |
| 2427 active_layer_->draw_properties().screen_space_transform = transform; | 2431 active_layer_->draw_properties().screen_space_transform = transform; |
| 2428 active_layer_->UpdateTiles(NULL); | 2432 active_layer_->UpdateTiles(NULL); |
| 2429 | 2433 |
| 2430 gfx::Rect visible_rect_for_tile_priority = | 2434 gfx::Rect visible_rect_for_tile_priority = |
| 2431 active_layer_->visible_rect_for_tile_priority(); | 2435 active_layer_->visible_rect_for_tile_priority(); |
| 2432 EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty()); | 2436 EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty()); |
| 2433 gfx::Size viewport_size_for_tile_priority = | 2437 gfx::Size viewport_size_for_tile_priority = |
| 2434 active_layer_->viewport_size_for_tile_priority(); | 2438 active_layer_->viewport_size_for_tile_priority(); |
| 2435 EXPECT_FALSE(viewport_size_for_tile_priority.IsEmpty()); | 2439 EXPECT_FALSE(viewport_size_for_tile_priority.IsEmpty()); |
| 2436 gfx::Transform screen_space_transform_for_tile_priority = | 2440 gfx::Transform screen_space_transform_for_tile_priority = |
| 2437 active_layer_->screen_space_transform_for_tile_priority(); | 2441 active_layer_->screen_space_transform_for_tile_priority(); |
| 2438 | 2442 |
| 2439 // Expand viewport and set it as invalid for prioritizing tiles. | 2443 // Expand viewport and set it as invalid for prioritizing tiles. |
| 2440 // Should not update tile viewport. | 2444 // Should not update tile viewport. |
| 2441 time_ticks += base::TimeDelta::FromMilliseconds(200); | 2445 time_ticks += base::TimeDelta::FromMilliseconds(200); |
| 2442 host_impl_.SetCurrentFrameTimeTicks(time_ticks); | 2446 host_impl_.SetCurrentFrameTimeTicks(time_ticks); |
| 2443 valid_for_tile_management = false; | 2447 resourceless_software_draw = true; |
| 2444 viewport = gfx::ScaleToEnclosingRect(viewport, 2); | 2448 viewport = gfx::ScaleToEnclosingRect(viewport, 2); |
| 2445 transform.Translate(1.f, 1.f); | 2449 transform.Translate(1.f, 1.f); |
| 2446 active_layer_->draw_properties().visible_content_rect = viewport; | 2450 active_layer_->draw_properties().visible_content_rect = viewport; |
| 2447 active_layer_->draw_properties().screen_space_transform = transform; | 2451 active_layer_->draw_properties().screen_space_transform = transform; |
| 2448 host_impl_.SetExternalDrawConstraints( | 2452 host_impl_.SetExternalDrawConstraints( |
| 2449 transform, viewport, viewport, valid_for_tile_management); | 2453 transform, viewport, viewport, resourceless_software_draw); |
| 2450 active_layer_->UpdateTiles(NULL); | 2454 active_layer_->UpdateTiles(NULL); |
| 2451 | 2455 |
| 2452 EXPECT_RECT_EQ(visible_rect_for_tile_priority, | 2456 EXPECT_RECT_EQ(visible_rect_for_tile_priority, |
| 2453 active_layer_->visible_rect_for_tile_priority()); | 2457 active_layer_->visible_rect_for_tile_priority()); |
| 2454 EXPECT_SIZE_EQ(viewport_size_for_tile_priority, | 2458 EXPECT_SIZE_EQ(viewport_size_for_tile_priority, |
| 2455 active_layer_->viewport_size_for_tile_priority()); | 2459 active_layer_->viewport_size_for_tile_priority()); |
| 2456 EXPECT_TRANSFORMATION_MATRIX_EQ( | 2460 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 2457 screen_space_transform_for_tile_priority, | 2461 screen_space_transform_for_tile_priority, |
| 2458 active_layer_->screen_space_transform_for_tile_priority()); | 2462 active_layer_->screen_space_transform_for_tile_priority()); |
| 2459 | 2463 |
| 2460 // Keep expanded viewport but mark it valid. Should update tile viewport. | 2464 // Keep expanded viewport but mark it valid. Should update tile viewport. |
| 2461 time_ticks += base::TimeDelta::FromMilliseconds(200); | 2465 time_ticks += base::TimeDelta::FromMilliseconds(200); |
| 2462 host_impl_.SetCurrentFrameTimeTicks(time_ticks); | 2466 host_impl_.SetCurrentFrameTimeTicks(time_ticks); |
| 2463 valid_for_tile_management = true; | 2467 resourceless_software_draw = false; |
| 2464 host_impl_.SetExternalDrawConstraints( | 2468 host_impl_.SetExternalDrawConstraints( |
| 2465 transform, viewport, viewport, valid_for_tile_management); | 2469 transform, viewport, viewport, resourceless_software_draw); |
| 2466 active_layer_->UpdateTiles(NULL); | 2470 active_layer_->UpdateTiles(NULL); |
| 2467 | 2471 |
| 2468 EXPECT_FALSE(visible_rect_for_tile_priority == | 2472 EXPECT_FALSE(visible_rect_for_tile_priority == |
| 2469 active_layer_->visible_rect_for_tile_priority()); | 2473 active_layer_->visible_rect_for_tile_priority()); |
| 2470 EXPECT_FALSE(viewport_size_for_tile_priority == | 2474 EXPECT_FALSE(viewport_size_for_tile_priority == |
| 2471 active_layer_->viewport_size_for_tile_priority()); | 2475 active_layer_->viewport_size_for_tile_priority()); |
| 2472 EXPECT_FALSE(screen_space_transform_for_tile_priority == | 2476 EXPECT_FALSE(screen_space_transform_for_tile_priority == |
| 2473 active_layer_->screen_space_transform_for_tile_priority()); | 2477 active_layer_->screen_space_transform_for_tile_priority()); |
| 2474 } | 2478 } |
| 2475 | 2479 |
| 2476 TEST_F(NoLowResPictureLayerImplTest, InvalidViewportAfterReleaseResources) { | 2480 TEST_F(NoLowResPictureLayerImplTest, InvalidViewportAfterReleaseResources) { |
| 2477 base::TimeTicks time_ticks; | 2481 base::TimeTicks time_ticks; |
| 2478 host_impl_.SetCurrentFrameTimeTicks(time_ticks); | 2482 host_impl_.SetCurrentFrameTimeTicks(time_ticks); |
| 2479 | 2483 |
| 2480 gfx::Size tile_size(100, 100); | 2484 gfx::Size tile_size(100, 100); |
| 2481 gfx::Size layer_bounds(400, 400); | 2485 gfx::Size layer_bounds(400, 400); |
| 2482 | 2486 |
| 2483 scoped_refptr<FakePicturePileImpl> pending_pile = | 2487 scoped_refptr<FakePicturePileImpl> pending_pile = |
| 2484 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 2488 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
| 2485 scoped_refptr<FakePicturePileImpl> active_pile = | 2489 scoped_refptr<FakePicturePileImpl> active_pile = |
| 2486 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 2490 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
| 2487 | 2491 |
| 2488 SetupTrees(pending_pile, active_pile); | 2492 SetupTrees(pending_pile, active_pile); |
| 2489 | 2493 |
| 2490 Region invalidation; | 2494 Region invalidation; |
| 2491 AddDefaultTilingsWithInvalidation(invalidation); | 2495 AddDefaultTilingsWithInvalidation(invalidation); |
| 2492 | 2496 |
| 2493 bool valid_for_tile_management = false; | 2497 bool resourceless_software_draw = true; |
| 2494 gfx::Rect viewport = gfx::Rect(layer_bounds); | 2498 gfx::Rect viewport = gfx::Rect(layer_bounds); |
| 2495 host_impl_.SetExternalDrawConstraints( | 2499 host_impl_.SetExternalDrawConstraints( |
| 2496 gfx::Transform(), viewport, viewport, valid_for_tile_management); | 2500 gfx::Transform(), viewport, viewport, resourceless_software_draw); |
| 2497 ResetTilingsAndRasterScales(); | 2501 ResetTilingsAndRasterScales(); |
| 2498 host_impl_.pending_tree()->UpdateDrawProperties(); | 2502 host_impl_.pending_tree()->UpdateDrawProperties(); |
| 2499 host_impl_.active_tree()->UpdateDrawProperties(); | 2503 host_impl_.active_tree()->UpdateDrawProperties(); |
| 2500 EXPECT_TRUE(active_layer_->HighResTiling()); | 2504 EXPECT_TRUE(active_layer_->HighResTiling()); |
| 2501 | 2505 |
| 2502 size_t num_tilings = active_layer_->num_tilings(); | 2506 size_t num_tilings = active_layer_->num_tilings(); |
| 2503 active_layer_->UpdateTiles(NULL); | 2507 active_layer_->UpdateTiles(NULL); |
| 2504 pending_layer_->AddTiling(0.5f); | 2508 pending_layer_->AddTiling(0.5f); |
| 2505 EXPECT_EQ(num_tilings + 1, active_layer_->num_tilings()); | 2509 EXPECT_EQ(num_tilings + 1, active_layer_->num_tilings()); |
| 2506 } | 2510 } |
| (...skipping 692 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3199 // Unshared tiles are occluded on the active tree iff they lie beneath | 3203 // Unshared tiles are occluded on the active tree iff they lie beneath |
| 3200 // the occluding layer. | 3204 // the occluding layer. |
| 3201 EXPECT_EQ(tile->is_occluded(ACTIVE_TREE), | 3205 EXPECT_EQ(tile->is_occluded(ACTIVE_TREE), |
| 3202 scaled_content_rect.x() >= occluding_layer_position.x()); | 3206 scaled_content_rect.x() >= occluding_layer_position.x()); |
| 3203 } | 3207 } |
| 3204 } | 3208 } |
| 3205 } | 3209 } |
| 3206 } | 3210 } |
| 3207 } // namespace | 3211 } // namespace |
| 3208 } // namespace cc | 3212 } // namespace cc |
| OLD | NEW |