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(gfx::Transform(), |
397 gfx::Transform(), viewport, viewport, valid_for_tile_management); | 399 viewport, |
| 400 viewport, |
| 401 resourceless_software_draw); |
398 ResetTilingsAndRasterScales(); | 402 ResetTilingsAndRasterScales(); |
399 host_impl_.pending_tree()->UpdateDrawProperties(); | 403 host_impl_.pending_tree()->UpdateDrawProperties(); |
400 host_impl_.active_tree()->UpdateDrawProperties(); | 404 host_impl_.active_tree()->UpdateDrawProperties(); |
401 EXPECT_TRUE(active_layer_->HighResTiling()); | 405 EXPECT_TRUE(active_layer_->HighResTiling()); |
402 | 406 |
403 size_t num_tilings = active_layer_->num_tilings(); | 407 size_t num_tilings = active_layer_->num_tilings(); |
404 active_layer_->UpdateTiles(NULL); | 408 active_layer_->UpdateTiles(NULL); |
405 pending_layer_->AddTiling(0.5f); | 409 pending_layer_->AddTiling(0.5f); |
406 EXPECT_EQ(num_tilings + 1, active_layer_->num_tilings()); | 410 EXPECT_EQ(num_tilings + 1, active_layer_->num_tilings()); |
407 } | 411 } |
(...skipping 2003 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2411 scoped_refptr<FakePicturePileImpl> active_pile = | 2415 scoped_refptr<FakePicturePileImpl> active_pile = |
2412 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 2416 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
2413 | 2417 |
2414 SetupTrees(pending_pile, active_pile); | 2418 SetupTrees(pending_pile, active_pile); |
2415 | 2419 |
2416 Region invalidation; | 2420 Region invalidation; |
2417 AddDefaultTilingsWithInvalidation(invalidation); | 2421 AddDefaultTilingsWithInvalidation(invalidation); |
2418 SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, false); | 2422 SetupDrawPropertiesAndUpdateTiles(active_layer_, 1.f, 1.f, 1.f, 1.f, false); |
2419 | 2423 |
2420 // UpdateTiles with valid viewport. Should update tile viewport. | 2424 // UpdateTiles with valid viewport. Should update tile viewport. |
2421 bool valid_for_tile_management = true; | 2425 // Note viewport is considered invalid if and only if in resourceless |
| 2426 // software draw. |
| 2427 bool resourceless_software_draw = false; |
2422 gfx::Rect viewport = gfx::Rect(layer_bounds); | 2428 gfx::Rect viewport = gfx::Rect(layer_bounds); |
2423 gfx::Transform transform; | 2429 gfx::Transform transform; |
2424 host_impl_.SetExternalDrawConstraints( | 2430 host_impl_.SetExternalDrawConstraints( |
2425 transform, viewport, viewport, valid_for_tile_management); | 2431 transform, viewport, viewport, resourceless_software_draw); |
2426 active_layer_->draw_properties().visible_content_rect = viewport; | 2432 active_layer_->draw_properties().visible_content_rect = viewport; |
2427 active_layer_->draw_properties().screen_space_transform = transform; | 2433 active_layer_->draw_properties().screen_space_transform = transform; |
2428 active_layer_->UpdateTiles(NULL); | 2434 active_layer_->UpdateTiles(NULL); |
2429 | 2435 |
2430 gfx::Rect visible_rect_for_tile_priority = | 2436 gfx::Rect visible_rect_for_tile_priority = |
2431 active_layer_->visible_rect_for_tile_priority(); | 2437 active_layer_->visible_rect_for_tile_priority(); |
2432 EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty()); | 2438 EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty()); |
2433 gfx::Size viewport_size_for_tile_priority = | 2439 gfx::Size viewport_size_for_tile_priority = |
2434 active_layer_->viewport_size_for_tile_priority(); | 2440 active_layer_->viewport_size_for_tile_priority(); |
2435 EXPECT_FALSE(viewport_size_for_tile_priority.IsEmpty()); | 2441 EXPECT_FALSE(viewport_size_for_tile_priority.IsEmpty()); |
2436 gfx::Transform screen_space_transform_for_tile_priority = | 2442 gfx::Transform screen_space_transform_for_tile_priority = |
2437 active_layer_->screen_space_transform_for_tile_priority(); | 2443 active_layer_->screen_space_transform_for_tile_priority(); |
2438 | 2444 |
2439 // Expand viewport and set it as invalid for prioritizing tiles. | 2445 // Expand viewport and set it as invalid for prioritizing tiles. |
2440 // Should not update tile viewport. | 2446 // Should not update tile viewport. |
2441 time_ticks += base::TimeDelta::FromMilliseconds(200); | 2447 time_ticks += base::TimeDelta::FromMilliseconds(200); |
2442 host_impl_.SetCurrentFrameTimeTicks(time_ticks); | 2448 host_impl_.SetCurrentFrameTimeTicks(time_ticks); |
2443 valid_for_tile_management = false; | 2449 resourceless_software_draw = true; |
2444 viewport = gfx::ScaleToEnclosingRect(viewport, 2); | 2450 viewport = gfx::ScaleToEnclosingRect(viewport, 2); |
2445 transform.Translate(1.f, 1.f); | 2451 transform.Translate(1.f, 1.f); |
2446 active_layer_->draw_properties().visible_content_rect = viewport; | 2452 active_layer_->draw_properties().visible_content_rect = viewport; |
2447 active_layer_->draw_properties().screen_space_transform = transform; | 2453 active_layer_->draw_properties().screen_space_transform = transform; |
2448 host_impl_.SetExternalDrawConstraints( | 2454 host_impl_.SetExternalDrawConstraints( |
2449 transform, viewport, viewport, valid_for_tile_management); | 2455 transform, viewport, viewport, resourceless_software_draw); |
2450 active_layer_->UpdateTiles(NULL); | 2456 active_layer_->UpdateTiles(NULL); |
2451 | 2457 |
2452 EXPECT_RECT_EQ(visible_rect_for_tile_priority, | 2458 EXPECT_RECT_EQ(visible_rect_for_tile_priority, |
2453 active_layer_->visible_rect_for_tile_priority()); | 2459 active_layer_->visible_rect_for_tile_priority()); |
2454 EXPECT_SIZE_EQ(viewport_size_for_tile_priority, | 2460 EXPECT_SIZE_EQ(viewport_size_for_tile_priority, |
2455 active_layer_->viewport_size_for_tile_priority()); | 2461 active_layer_->viewport_size_for_tile_priority()); |
2456 EXPECT_TRANSFORMATION_MATRIX_EQ( | 2462 EXPECT_TRANSFORMATION_MATRIX_EQ( |
2457 screen_space_transform_for_tile_priority, | 2463 screen_space_transform_for_tile_priority, |
2458 active_layer_->screen_space_transform_for_tile_priority()); | 2464 active_layer_->screen_space_transform_for_tile_priority()); |
2459 | 2465 |
2460 // Keep expanded viewport but mark it valid. Should update tile viewport. | 2466 // Keep expanded viewport but mark it valid. Should update tile viewport. |
2461 time_ticks += base::TimeDelta::FromMilliseconds(200); | 2467 time_ticks += base::TimeDelta::FromMilliseconds(200); |
2462 host_impl_.SetCurrentFrameTimeTicks(time_ticks); | 2468 host_impl_.SetCurrentFrameTimeTicks(time_ticks); |
2463 valid_for_tile_management = true; | 2469 resourceless_software_draw = false; |
2464 host_impl_.SetExternalDrawConstraints( | 2470 host_impl_.SetExternalDrawConstraints( |
2465 transform, viewport, viewport, valid_for_tile_management); | 2471 transform, viewport, viewport, resourceless_software_draw); |
2466 active_layer_->UpdateTiles(NULL); | 2472 active_layer_->UpdateTiles(NULL); |
2467 | 2473 |
2468 EXPECT_FALSE(visible_rect_for_tile_priority == | 2474 EXPECT_FALSE(visible_rect_for_tile_priority == |
2469 active_layer_->visible_rect_for_tile_priority()); | 2475 active_layer_->visible_rect_for_tile_priority()); |
2470 EXPECT_FALSE(viewport_size_for_tile_priority == | 2476 EXPECT_FALSE(viewport_size_for_tile_priority == |
2471 active_layer_->viewport_size_for_tile_priority()); | 2477 active_layer_->viewport_size_for_tile_priority()); |
2472 EXPECT_FALSE(screen_space_transform_for_tile_priority == | 2478 EXPECT_FALSE(screen_space_transform_for_tile_priority == |
2473 active_layer_->screen_space_transform_for_tile_priority()); | 2479 active_layer_->screen_space_transform_for_tile_priority()); |
2474 } | 2480 } |
2475 | 2481 |
2476 TEST_F(NoLowResPictureLayerImplTest, InvalidViewportAfterReleaseResources) { | 2482 TEST_F(NoLowResPictureLayerImplTest, InvalidViewportAfterReleaseResources) { |
2477 base::TimeTicks time_ticks; | 2483 base::TimeTicks time_ticks; |
2478 host_impl_.SetCurrentFrameTimeTicks(time_ticks); | 2484 host_impl_.SetCurrentFrameTimeTicks(time_ticks); |
2479 | 2485 |
2480 gfx::Size tile_size(100, 100); | 2486 gfx::Size tile_size(100, 100); |
2481 gfx::Size layer_bounds(400, 400); | 2487 gfx::Size layer_bounds(400, 400); |
2482 | 2488 |
2483 scoped_refptr<FakePicturePileImpl> pending_pile = | 2489 scoped_refptr<FakePicturePileImpl> pending_pile = |
2484 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 2490 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
2485 scoped_refptr<FakePicturePileImpl> active_pile = | 2491 scoped_refptr<FakePicturePileImpl> active_pile = |
2486 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); | 2492 FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds); |
2487 | 2493 |
2488 SetupTrees(pending_pile, active_pile); | 2494 SetupTrees(pending_pile, active_pile); |
2489 | 2495 |
2490 Region invalidation; | 2496 Region invalidation; |
2491 AddDefaultTilingsWithInvalidation(invalidation); | 2497 AddDefaultTilingsWithInvalidation(invalidation); |
2492 | 2498 |
2493 bool valid_for_tile_management = false; | 2499 bool resourceless_software_draw = true; |
2494 gfx::Rect viewport = gfx::Rect(layer_bounds); | 2500 gfx::Rect viewport = gfx::Rect(layer_bounds); |
2495 host_impl_.SetExternalDrawConstraints( | 2501 host_impl_.SetExternalDrawConstraints( |
2496 gfx::Transform(), viewport, viewport, valid_for_tile_management); | 2502 gfx::Transform(), viewport, viewport, resourceless_software_draw); |
2497 ResetTilingsAndRasterScales(); | 2503 ResetTilingsAndRasterScales(); |
2498 host_impl_.pending_tree()->UpdateDrawProperties(); | 2504 host_impl_.pending_tree()->UpdateDrawProperties(); |
2499 host_impl_.active_tree()->UpdateDrawProperties(); | 2505 host_impl_.active_tree()->UpdateDrawProperties(); |
2500 EXPECT_TRUE(active_layer_->HighResTiling()); | 2506 EXPECT_TRUE(active_layer_->HighResTiling()); |
2501 | 2507 |
2502 size_t num_tilings = active_layer_->num_tilings(); | 2508 size_t num_tilings = active_layer_->num_tilings(); |
2503 active_layer_->UpdateTiles(NULL); | 2509 active_layer_->UpdateTiles(NULL); |
2504 pending_layer_->AddTiling(0.5f); | 2510 pending_layer_->AddTiling(0.5f); |
2505 EXPECT_EQ(num_tilings + 1, active_layer_->num_tilings()); | 2511 EXPECT_EQ(num_tilings + 1, active_layer_->num_tilings()); |
2506 } | 2512 } |
(...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 | 3205 // Unshared tiles are occluded on the active tree iff they lie beneath |
3200 // the occluding layer. | 3206 // the occluding layer. |
3201 EXPECT_EQ(tile->is_occluded(ACTIVE_TREE), | 3207 EXPECT_EQ(tile->is_occluded(ACTIVE_TREE), |
3202 scaled_content_rect.x() >= occluding_layer_position.x()); | 3208 scaled_content_rect.x() >= occluding_layer_position.x()); |
3203 } | 3209 } |
3204 } | 3210 } |
3205 } | 3211 } |
3206 } | 3212 } |
3207 } // namespace | 3213 } // namespace |
3208 } // namespace cc | 3214 } // namespace cc |
OLD | NEW |