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