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 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 // Note viewport is considered invalid if and only if in resourceless | 322 // Note viewport is considered invalid if and only if in resourceless |
323 // software draw. | 323 // software draw. |
324 bool resourceless_software_draw = false; | 324 bool resourceless_software_draw = false; |
325 gfx::Rect viewport = gfx::Rect(layer_bounds); | 325 gfx::Rect viewport = gfx::Rect(layer_bounds); |
326 gfx::Transform transform; | 326 gfx::Transform transform; |
327 host_impl_.SetExternalDrawConstraints( | 327 host_impl_.SetExternalDrawConstraints(transform, |
328 transform, viewport, viewport, resourceless_software_draw); | 328 viewport, |
| 329 viewport, |
| 330 viewport, |
| 331 transform, |
| 332 resourceless_software_draw); |
329 active_layer_->draw_properties().visible_content_rect = viewport; | 333 active_layer_->draw_properties().visible_content_rect = viewport; |
330 active_layer_->draw_properties().screen_space_transform = transform; | 334 active_layer_->draw_properties().screen_space_transform = transform; |
331 active_layer_->UpdateTiles(NULL); | 335 active_layer_->UpdateTiles(NULL); |
332 | 336 |
333 gfx::Rect visible_rect_for_tile_priority = | 337 gfx::Rect visible_rect_for_tile_priority = |
334 active_layer_->visible_rect_for_tile_priority(); | 338 active_layer_->visible_rect_for_tile_priority(); |
335 EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty()); | 339 EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty()); |
336 gfx::Size viewport_size_for_tile_priority = | 340 gfx::Rect viewport_rect_for_tile_priority = |
337 active_layer_->viewport_size_for_tile_priority(); | 341 active_layer_->viewport_rect_for_tile_priority(); |
338 EXPECT_FALSE(viewport_size_for_tile_priority.IsEmpty()); | 342 EXPECT_FALSE(viewport_rect_for_tile_priority.IsEmpty()); |
339 gfx::Transform screen_space_transform_for_tile_priority = | 343 gfx::Transform screen_space_transform_for_tile_priority = |
340 active_layer_->screen_space_transform_for_tile_priority(); | 344 active_layer_->screen_space_transform_for_tile_priority(); |
341 | 345 |
342 // Expand viewport and set it as invalid for prioritizing tiles. | 346 // Expand viewport and set it as invalid for prioritizing tiles. |
343 // Should not update tile viewport. | 347 // Should not update tile viewport. |
344 time_ticks += base::TimeDelta::FromMilliseconds(200); | 348 time_ticks += base::TimeDelta::FromMilliseconds(200); |
345 host_impl_.SetCurrentFrameTimeTicks(time_ticks); | 349 host_impl_.SetCurrentFrameTimeTicks(time_ticks); |
346 resourceless_software_draw = true; | 350 resourceless_software_draw = true; |
347 viewport = gfx::ScaleToEnclosingRect(viewport, 2); | 351 viewport = gfx::ScaleToEnclosingRect(viewport, 2); |
348 transform.Translate(1.f, 1.f); | 352 transform.Translate(1.f, 1.f); |
349 active_layer_->draw_properties().visible_content_rect = viewport; | 353 active_layer_->draw_properties().visible_content_rect = viewport; |
350 active_layer_->draw_properties().screen_space_transform = transform; | 354 active_layer_->draw_properties().screen_space_transform = transform; |
351 host_impl_.SetExternalDrawConstraints( | 355 host_impl_.SetExternalDrawConstraints(transform, |
352 transform, viewport, viewport, resourceless_software_draw); | 356 viewport, |
| 357 viewport, |
| 358 viewport, |
| 359 transform, |
| 360 resourceless_software_draw); |
353 active_layer_->UpdateTiles(NULL); | 361 active_layer_->UpdateTiles(NULL); |
354 | 362 |
355 EXPECT_RECT_EQ(visible_rect_for_tile_priority, | 363 EXPECT_RECT_EQ(visible_rect_for_tile_priority, |
356 active_layer_->visible_rect_for_tile_priority()); | 364 active_layer_->visible_rect_for_tile_priority()); |
357 EXPECT_SIZE_EQ(viewport_size_for_tile_priority, | 365 EXPECT_RECT_EQ(viewport_rect_for_tile_priority, |
358 active_layer_->viewport_size_for_tile_priority()); | 366 active_layer_->viewport_rect_for_tile_priority()); |
359 EXPECT_TRANSFORMATION_MATRIX_EQ( | 367 EXPECT_TRANSFORMATION_MATRIX_EQ( |
360 screen_space_transform_for_tile_priority, | 368 screen_space_transform_for_tile_priority, |
361 active_layer_->screen_space_transform_for_tile_priority()); | 369 active_layer_->screen_space_transform_for_tile_priority()); |
362 | 370 |
363 // Keep expanded viewport but mark it valid. Should update tile viewport. | 371 // Keep expanded viewport but mark it valid. Should update tile viewport. |
364 time_ticks += base::TimeDelta::FromMilliseconds(200); | 372 time_ticks += base::TimeDelta::FromMilliseconds(200); |
365 host_impl_.SetCurrentFrameTimeTicks(time_ticks); | 373 host_impl_.SetCurrentFrameTimeTicks(time_ticks); |
366 resourceless_software_draw = false; | 374 resourceless_software_draw = false; |
367 host_impl_.SetExternalDrawConstraints( | 375 host_impl_.SetExternalDrawConstraints(transform, |
368 transform, viewport, viewport, resourceless_software_draw); | 376 viewport, |
| 377 viewport, |
| 378 viewport, |
| 379 transform, |
| 380 resourceless_software_draw); |
369 active_layer_->UpdateTiles(NULL); | 381 active_layer_->UpdateTiles(NULL); |
370 | 382 |
371 EXPECT_FALSE(visible_rect_for_tile_priority == | 383 EXPECT_FALSE(visible_rect_for_tile_priority == |
372 active_layer_->visible_rect_for_tile_priority()); | 384 active_layer_->visible_rect_for_tile_priority()); |
373 EXPECT_FALSE(viewport_size_for_tile_priority == | 385 EXPECT_FALSE(viewport_rect_for_tile_priority == |
374 active_layer_->viewport_size_for_tile_priority()); | 386 active_layer_->viewport_rect_for_tile_priority()); |
375 EXPECT_FALSE(screen_space_transform_for_tile_priority == | 387 EXPECT_FALSE(screen_space_transform_for_tile_priority == |
376 active_layer_->screen_space_transform_for_tile_priority()); | 388 active_layer_->screen_space_transform_for_tile_priority()); |
377 } | 389 } |
378 | 390 |
379 TEST_F(PictureLayerImplTest, InvalidViewportAfterReleaseResources) { | 391 TEST_F(PictureLayerImplTest, InvalidViewportAfterReleaseResources) { |
380 base::TimeTicks time_ticks; | 392 base::TimeTicks time_ticks; |
381 host_impl_.SetCurrentFrameTimeTicks(time_ticks); | 393 host_impl_.SetCurrentFrameTimeTicks(time_ticks); |
382 | 394 |
383 gfx::Size tile_size(100, 100); | 395 gfx::Size tile_size(100, 100); |
384 gfx::Size layer_bounds(400, 400); | 396 gfx::Size layer_bounds(400, 400); |
385 | 397 |
386 scoped_refptr<FakePicturePileImpl> pending_pile = | 398 scoped_refptr<FakePicturePileImpl> pending_pile = |
387 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 399 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
388 scoped_refptr<FakePicturePileImpl> active_pile = | 400 scoped_refptr<FakePicturePileImpl> active_pile = |
389 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 401 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
390 | 402 |
391 SetupTrees(pending_pile, active_pile); | 403 SetupTrees(pending_pile, active_pile); |
392 | 404 |
393 Region invalidation; | 405 Region invalidation; |
394 AddDefaultTilingsWithInvalidation(invalidation); | 406 AddDefaultTilingsWithInvalidation(invalidation); |
395 | 407 |
396 bool resourceless_software_draw = true; | 408 bool resourceless_software_draw = true; |
397 gfx::Rect viewport = gfx::Rect(layer_bounds); | 409 gfx::Rect viewport = gfx::Rect(layer_bounds); |
398 host_impl_.SetExternalDrawConstraints( | 410 gfx::Transform identity = gfx::Transform(); |
399 gfx::Transform(), viewport, viewport, resourceless_software_draw); | 411 host_impl_.SetExternalDrawConstraints(identity, |
| 412 viewport, |
| 413 viewport, |
| 414 viewport, |
| 415 identity, |
| 416 resourceless_software_draw); |
400 ResetTilingsAndRasterScales(); | 417 ResetTilingsAndRasterScales(); |
401 host_impl_.pending_tree()->UpdateDrawProperties(); | 418 host_impl_.pending_tree()->UpdateDrawProperties(); |
402 host_impl_.active_tree()->UpdateDrawProperties(); | 419 host_impl_.active_tree()->UpdateDrawProperties(); |
403 EXPECT_TRUE(active_layer_->HighResTiling()); | 420 EXPECT_TRUE(active_layer_->HighResTiling()); |
404 | 421 |
405 size_t num_tilings = active_layer_->num_tilings(); | 422 size_t num_tilings = active_layer_->num_tilings(); |
406 active_layer_->UpdateTiles(NULL); | 423 active_layer_->UpdateTiles(NULL); |
407 pending_layer_->AddTiling(0.5f); | 424 pending_layer_->AddTiling(0.5f); |
408 EXPECT_EQ(num_tilings + 1, active_layer_->num_tilings()); | 425 EXPECT_EQ(num_tilings + 1, active_layer_->num_tilings()); |
409 } | 426 } |
(...skipping 2098 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2508 Region invalidation; | 2525 Region invalidation; |
2509 AddDefaultTilingsWithInvalidation(invalidation); | 2526 AddDefaultTilingsWithInvalidation(invalidation); |
2510 SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, false); | 2527 SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, false); |
2511 | 2528 |
2512 // UpdateTiles with valid viewport. Should update tile viewport. | 2529 // UpdateTiles with valid viewport. Should update tile viewport. |
2513 // Note viewport is considered invalid if and only if in resourceless | 2530 // Note viewport is considered invalid if and only if in resourceless |
2514 // software draw. | 2531 // software draw. |
2515 bool resourceless_software_draw = false; | 2532 bool resourceless_software_draw = false; |
2516 gfx::Rect viewport = gfx::Rect(layer_bounds); | 2533 gfx::Rect viewport = gfx::Rect(layer_bounds); |
2517 gfx::Transform transform; | 2534 gfx::Transform transform; |
2518 host_impl_.SetExternalDrawConstraints( | 2535 host_impl_.SetExternalDrawConstraints(transform, |
2519 transform, viewport, viewport, resourceless_software_draw); | 2536 viewport, |
| 2537 viewport, |
| 2538 viewport, |
| 2539 transform, |
| 2540 resourceless_software_draw); |
2520 active_layer_->draw_properties().visible_content_rect = viewport; | 2541 active_layer_->draw_properties().visible_content_rect = viewport; |
2521 active_layer_->draw_properties().screen_space_transform = transform; | 2542 active_layer_->draw_properties().screen_space_transform = transform; |
2522 active_layer_->UpdateTiles(NULL); | 2543 active_layer_->UpdateTiles(NULL); |
2523 | 2544 |
2524 gfx::Rect visible_rect_for_tile_priority = | 2545 gfx::Rect visible_rect_for_tile_priority = |
2525 active_layer_->visible_rect_for_tile_priority(); | 2546 active_layer_->visible_rect_for_tile_priority(); |
2526 EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty()); | 2547 EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty()); |
2527 gfx::Size viewport_size_for_tile_priority = | 2548 gfx::Rect viewport_rect_for_tile_priority = |
2528 active_layer_->viewport_size_for_tile_priority(); | 2549 active_layer_->viewport_rect_for_tile_priority(); |
2529 EXPECT_FALSE(viewport_size_for_tile_priority.IsEmpty()); | 2550 EXPECT_FALSE(viewport_rect_for_tile_priority.IsEmpty()); |
2530 gfx::Transform screen_space_transform_for_tile_priority = | 2551 gfx::Transform screen_space_transform_for_tile_priority = |
2531 active_layer_->screen_space_transform_for_tile_priority(); | 2552 active_layer_->screen_space_transform_for_tile_priority(); |
2532 | 2553 |
2533 // Expand viewport and set it as invalid for prioritizing tiles. | 2554 // Expand viewport and set it as invalid for prioritizing tiles. |
2534 // Should not update tile viewport. | 2555 // Should not update tile viewport. |
2535 time_ticks += base::TimeDelta::FromMilliseconds(200); | 2556 time_ticks += base::TimeDelta::FromMilliseconds(200); |
2536 host_impl_.SetCurrentFrameTimeTicks(time_ticks); | 2557 host_impl_.SetCurrentFrameTimeTicks(time_ticks); |
2537 resourceless_software_draw = true; | 2558 resourceless_software_draw = true; |
2538 viewport = gfx::ScaleToEnclosingRect(viewport, 2); | 2559 viewport = gfx::ScaleToEnclosingRect(viewport, 2); |
2539 transform.Translate(1.f, 1.f); | 2560 transform.Translate(1.f, 1.f); |
2540 active_layer_->draw_properties().visible_content_rect = viewport; | 2561 active_layer_->draw_properties().visible_content_rect = viewport; |
2541 active_layer_->draw_properties().screen_space_transform = transform; | 2562 active_layer_->draw_properties().screen_space_transform = transform; |
2542 host_impl_.SetExternalDrawConstraints( | 2563 host_impl_.SetExternalDrawConstraints(transform, |
2543 transform, viewport, viewport, resourceless_software_draw); | 2564 viewport, |
| 2565 viewport, |
| 2566 viewport, |
| 2567 transform, |
| 2568 resourceless_software_draw); |
2544 active_layer_->UpdateTiles(NULL); | 2569 active_layer_->UpdateTiles(NULL); |
2545 | 2570 |
2546 EXPECT_RECT_EQ(visible_rect_for_tile_priority, | 2571 EXPECT_RECT_EQ(visible_rect_for_tile_priority, |
2547 active_layer_->visible_rect_for_tile_priority()); | 2572 active_layer_->visible_rect_for_tile_priority()); |
2548 EXPECT_SIZE_EQ(viewport_size_for_tile_priority, | 2573 EXPECT_RECT_EQ(viewport_rect_for_tile_priority, |
2549 active_layer_->viewport_size_for_tile_priority()); | 2574 active_layer_->viewport_rect_for_tile_priority()); |
2550 EXPECT_TRANSFORMATION_MATRIX_EQ( | 2575 EXPECT_TRANSFORMATION_MATRIX_EQ( |
2551 screen_space_transform_for_tile_priority, | 2576 screen_space_transform_for_tile_priority, |
2552 active_layer_->screen_space_transform_for_tile_priority()); | 2577 active_layer_->screen_space_transform_for_tile_priority()); |
2553 | 2578 |
2554 // Keep expanded viewport but mark it valid. Should update tile viewport. | 2579 // Keep expanded viewport but mark it valid. Should update tile viewport. |
2555 time_ticks += base::TimeDelta::FromMilliseconds(200); | 2580 time_ticks += base::TimeDelta::FromMilliseconds(200); |
2556 host_impl_.SetCurrentFrameTimeTicks(time_ticks); | 2581 host_impl_.SetCurrentFrameTimeTicks(time_ticks); |
2557 resourceless_software_draw = false; | 2582 resourceless_software_draw = false; |
2558 host_impl_.SetExternalDrawConstraints( | 2583 host_impl_.SetExternalDrawConstraints(transform, |
2559 transform, viewport, viewport, resourceless_software_draw); | 2584 viewport, |
| 2585 viewport, |
| 2586 viewport, |
| 2587 transform, |
| 2588 resourceless_software_draw); |
2560 active_layer_->UpdateTiles(NULL); | 2589 active_layer_->UpdateTiles(NULL); |
2561 | 2590 |
2562 EXPECT_FALSE(visible_rect_for_tile_priority == | 2591 EXPECT_FALSE(visible_rect_for_tile_priority == |
2563 active_layer_->visible_rect_for_tile_priority()); | 2592 active_layer_->visible_rect_for_tile_priority()); |
2564 EXPECT_FALSE(viewport_size_for_tile_priority == | 2593 EXPECT_FALSE(viewport_rect_for_tile_priority == |
2565 active_layer_->viewport_size_for_tile_priority()); | 2594 active_layer_->viewport_rect_for_tile_priority()); |
2566 EXPECT_FALSE(screen_space_transform_for_tile_priority == | 2595 EXPECT_FALSE(screen_space_transform_for_tile_priority == |
2567 active_layer_->screen_space_transform_for_tile_priority()); | 2596 active_layer_->screen_space_transform_for_tile_priority()); |
2568 } | 2597 } |
2569 | 2598 |
2570 TEST_F(NoLowResPictureLayerImplTest, InvalidViewportAfterReleaseResources) { | 2599 TEST_F(NoLowResPictureLayerImplTest, InvalidViewportAfterReleaseResources) { |
2571 base::TimeTicks time_ticks; | 2600 base::TimeTicks time_ticks; |
2572 host_impl_.SetCurrentFrameTimeTicks(time_ticks); | 2601 host_impl_.SetCurrentFrameTimeTicks(time_ticks); |
2573 | 2602 |
2574 gfx::Size tile_size(100, 100); | 2603 gfx::Size tile_size(100, 100); |
2575 gfx::Size layer_bounds(400, 400); | 2604 gfx::Size layer_bounds(400, 400); |
2576 | 2605 |
2577 scoped_refptr<FakePicturePileImpl> pending_pile = | 2606 scoped_refptr<FakePicturePileImpl> pending_pile = |
2578 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 2607 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
2579 scoped_refptr<FakePicturePileImpl> active_pile = | 2608 scoped_refptr<FakePicturePileImpl> active_pile = |
2580 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 2609 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
2581 | 2610 |
2582 SetupTrees(pending_pile, active_pile); | 2611 SetupTrees(pending_pile, active_pile); |
2583 | 2612 |
2584 Region invalidation; | 2613 Region invalidation; |
2585 AddDefaultTilingsWithInvalidation(invalidation); | 2614 AddDefaultTilingsWithInvalidation(invalidation); |
2586 | 2615 |
2587 bool resourceless_software_draw = true; | 2616 bool resourceless_software_draw = true; |
2588 gfx::Rect viewport = gfx::Rect(layer_bounds); | 2617 gfx::Rect viewport = gfx::Rect(layer_bounds); |
2589 host_impl_.SetExternalDrawConstraints( | 2618 gfx::Transform identity = gfx::Transform(); |
2590 gfx::Transform(), viewport, viewport, resourceless_software_draw); | 2619 host_impl_.SetExternalDrawConstraints(identity, |
| 2620 viewport, |
| 2621 viewport, |
| 2622 viewport, |
| 2623 identity, |
| 2624 resourceless_software_draw); |
2591 ResetTilingsAndRasterScales(); | 2625 ResetTilingsAndRasterScales(); |
2592 host_impl_.pending_tree()->UpdateDrawProperties(); | 2626 host_impl_.pending_tree()->UpdateDrawProperties(); |
2593 host_impl_.active_tree()->UpdateDrawProperties(); | 2627 host_impl_.active_tree()->UpdateDrawProperties(); |
2594 EXPECT_TRUE(active_layer_->HighResTiling()); | 2628 EXPECT_TRUE(active_layer_->HighResTiling()); |
2595 | 2629 |
2596 size_t num_tilings = active_layer_->num_tilings(); | 2630 size_t num_tilings = active_layer_->num_tilings(); |
2597 active_layer_->UpdateTiles(NULL); | 2631 active_layer_->UpdateTiles(NULL); |
2598 pending_layer_->AddTiling(0.5f); | 2632 pending_layer_->AddTiling(0.5f); |
2599 EXPECT_EQ(num_tilings + 1, active_layer_->num_tilings()); | 2633 EXPECT_EQ(num_tilings + 1, active_layer_->num_tilings()); |
2600 } | 2634 } |
(...skipping 705 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3306 // Unshared tiles are occluded on the active tree iff they lie beneath | 3340 // Unshared tiles are occluded on the active tree iff they lie beneath |
3307 // the occluding layer. | 3341 // the occluding layer. |
3308 EXPECT_EQ(tile->is_occluded(ACTIVE_TREE), | 3342 EXPECT_EQ(tile->is_occluded(ACTIVE_TREE), |
3309 scaled_content_rect.x() >= occluding_layer_position.x()); | 3343 scaled_content_rect.x() >= occluding_layer_position.x()); |
3310 } | 3344 } |
3311 } | 3345 } |
3312 } | 3346 } |
3313 } | 3347 } |
3314 } // namespace | 3348 } // namespace |
3315 } // namespace cc | 3349 } // namespace cc |
OLD | NEW |