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 |