| 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 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 153 float page_scale_factor, | 153 float page_scale_factor, |
| 154 float maximum_animation_contents_scale, | 154 float maximum_animation_contents_scale, |
| 155 bool animating_transform_to_screen) { | 155 bool animating_transform_to_screen) { |
| 156 layer->draw_properties().ideal_contents_scale = ideal_contents_scale; | 156 layer->draw_properties().ideal_contents_scale = ideal_contents_scale; |
| 157 layer->draw_properties().device_scale_factor = device_scale_factor; | 157 layer->draw_properties().device_scale_factor = device_scale_factor; |
| 158 layer->draw_properties().page_scale_factor = page_scale_factor; | 158 layer->draw_properties().page_scale_factor = page_scale_factor; |
| 159 layer->draw_properties().maximum_animation_contents_scale = | 159 layer->draw_properties().maximum_animation_contents_scale = |
| 160 maximum_animation_contents_scale; | 160 maximum_animation_contents_scale; |
| 161 layer->draw_properties().screen_space_transform_is_animating = | 161 layer->draw_properties().screen_space_transform_is_animating = |
| 162 animating_transform_to_screen; | 162 animating_transform_to_screen; |
| 163 layer->UpdateTiles(Occlusion()); | 163 layer->UpdateTiles(NULL); |
| 164 } | 164 } |
| 165 static void VerifyAllTilesExistAndHavePile( | 165 static void VerifyAllTilesExistAndHavePile( |
| 166 const PictureLayerTiling* tiling, | 166 const PictureLayerTiling* tiling, |
| 167 PicturePileImpl* pile) { | 167 PicturePileImpl* pile) { |
| 168 for (PictureLayerTiling::CoverageIterator iter( | 168 for (PictureLayerTiling::CoverageIterator iter( |
| 169 tiling, | 169 tiling, |
| 170 tiling->contents_scale(), | 170 tiling->contents_scale(), |
| 171 gfx::Rect(tiling->tiling_size())); | 171 gfx::Rect(tiling->tiling_size())); |
| 172 iter; | 172 iter; |
| 173 ++iter) { | 173 ++iter) { |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 341 gfx::Transform transform, transform_for_tile_priority; | 341 gfx::Transform transform, transform_for_tile_priority; |
| 342 | 342 |
| 343 host_impl_.SetExternalDrawConstraints(transform, | 343 host_impl_.SetExternalDrawConstraints(transform, |
| 344 viewport, | 344 viewport, |
| 345 viewport, | 345 viewport, |
| 346 viewport_rect_for_tile_priority, | 346 viewport_rect_for_tile_priority, |
| 347 transform_for_tile_priority, | 347 transform_for_tile_priority, |
| 348 resourceless_software_draw); | 348 resourceless_software_draw); |
| 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 active_layer_->UpdateTiles(Occlusion()); | 351 active_layer_->UpdateTiles(NULL); |
| 352 | 352 |
| 353 gfx::Rect viewport_rect_for_tile_priority_in_view_space = | 353 gfx::Rect viewport_rect_for_tile_priority_in_view_space = |
| 354 viewport_rect_for_tile_priority; | 354 viewport_rect_for_tile_priority; |
| 355 | 355 |
| 356 // Verify the viewport rect for tile priority is used in picture layer impl. | 356 // Verify the viewport rect for tile priority is used in picture layer impl. |
| 357 EXPECT_EQ(active_layer_->viewport_rect_for_tile_priority(), | 357 EXPECT_EQ(active_layer_->viewport_rect_for_tile_priority(), |
| 358 viewport_rect_for_tile_priority_in_view_space); | 358 viewport_rect_for_tile_priority_in_view_space); |
| 359 | 359 |
| 360 // Verify the viewport rect for tile priority is used in picture layer tiling. | 360 // Verify the viewport rect for tile priority is used in picture layer tiling. |
| 361 PictureLayerTilingSet* tilings = active_layer_->tilings(); | 361 PictureLayerTilingSet* tilings = active_layer_->tilings(); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 379 transform_for_tile_priority.Translate(100, 100); | 379 transform_for_tile_priority.Translate(100, 100); |
| 380 transform_for_tile_priority.Rotate(45); | 380 transform_for_tile_priority.Rotate(45); |
| 381 host_impl_.SetExternalDrawConstraints(transform, | 381 host_impl_.SetExternalDrawConstraints(transform, |
| 382 viewport, | 382 viewport, |
| 383 viewport, | 383 viewport, |
| 384 viewport_rect_for_tile_priority, | 384 viewport_rect_for_tile_priority, |
| 385 transform_for_tile_priority, | 385 transform_for_tile_priority, |
| 386 resourceless_software_draw); | 386 resourceless_software_draw); |
| 387 active_layer_->draw_properties().visible_content_rect = viewport; | 387 active_layer_->draw_properties().visible_content_rect = viewport; |
| 388 active_layer_->draw_properties().screen_space_transform = transform; | 388 active_layer_->draw_properties().screen_space_transform = transform; |
| 389 active_layer_->UpdateTiles(Occlusion()); | 389 active_layer_->UpdateTiles(NULL); |
| 390 | 390 |
| 391 gfx::Transform screen_to_view(gfx::Transform::kSkipInitialization); | 391 gfx::Transform screen_to_view(gfx::Transform::kSkipInitialization); |
| 392 bool success = transform_for_tile_priority.GetInverse(&screen_to_view); | 392 bool success = transform_for_tile_priority.GetInverse(&screen_to_view); |
| 393 EXPECT_TRUE(success); | 393 EXPECT_TRUE(success); |
| 394 | 394 |
| 395 viewport_rect_for_tile_priority_in_view_space = | 395 viewport_rect_for_tile_priority_in_view_space = |
| 396 gfx::ToEnclosingRect(MathUtil::ProjectClippedRect( | 396 gfx::ToEnclosingRect(MathUtil::ProjectClippedRect( |
| 397 screen_to_view, viewport_rect_for_tile_priority)); | 397 screen_to_view, viewport_rect_for_tile_priority)); |
| 398 | 398 |
| 399 // Verify the viewport rect for tile priority is used in PictureLayerImpl. | 399 // Verify the viewport rect for tile priority is used in PictureLayerImpl. |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 440 gfx::Rect viewport = gfx::Rect(layer_bounds); | 440 gfx::Rect viewport = gfx::Rect(layer_bounds); |
| 441 gfx::Transform transform; | 441 gfx::Transform transform; |
| 442 host_impl_.SetExternalDrawConstraints(transform, | 442 host_impl_.SetExternalDrawConstraints(transform, |
| 443 viewport, | 443 viewport, |
| 444 viewport, | 444 viewport, |
| 445 viewport, | 445 viewport, |
| 446 transform, | 446 transform, |
| 447 resourceless_software_draw); | 447 resourceless_software_draw); |
| 448 active_layer_->draw_properties().visible_content_rect = viewport; | 448 active_layer_->draw_properties().visible_content_rect = viewport; |
| 449 active_layer_->draw_properties().screen_space_transform = transform; | 449 active_layer_->draw_properties().screen_space_transform = transform; |
| 450 active_layer_->UpdateTiles(Occlusion()); | 450 active_layer_->UpdateTiles(NULL); |
| 451 | 451 |
| 452 gfx::Rect visible_rect_for_tile_priority = | 452 gfx::Rect visible_rect_for_tile_priority = |
| 453 active_layer_->visible_rect_for_tile_priority(); | 453 active_layer_->visible_rect_for_tile_priority(); |
| 454 EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty()); | 454 EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty()); |
| 455 gfx::Rect viewport_rect_for_tile_priority = | 455 gfx::Rect viewport_rect_for_tile_priority = |
| 456 active_layer_->viewport_rect_for_tile_priority(); | 456 active_layer_->viewport_rect_for_tile_priority(); |
| 457 EXPECT_FALSE(viewport_rect_for_tile_priority.IsEmpty()); | 457 EXPECT_FALSE(viewport_rect_for_tile_priority.IsEmpty()); |
| 458 gfx::Transform screen_space_transform_for_tile_priority = | 458 gfx::Transform screen_space_transform_for_tile_priority = |
| 459 active_layer_->screen_space_transform_for_tile_priority(); | 459 active_layer_->screen_space_transform_for_tile_priority(); |
| 460 | 460 |
| 461 // PictureLayerImpl does not make a special case for | 461 // PictureLayerImpl does not make a special case for |
| 462 // resource_less_software_draw, so the tile viewport and matrix should be | 462 // resource_less_software_draw, so the tile viewport and matrix should be |
| 463 // respected. | 463 // respected. |
| 464 time_ticks += base::TimeDelta::FromMilliseconds(200); | 464 time_ticks += base::TimeDelta::FromMilliseconds(200); |
| 465 host_impl_.SetCurrentBeginFrameArgs( | 465 host_impl_.SetCurrentBeginFrameArgs( |
| 466 CreateBeginFrameArgsForTesting(time_ticks)); | 466 CreateBeginFrameArgsForTesting(time_ticks)); |
| 467 resourceless_software_draw = true; | 467 resourceless_software_draw = true; |
| 468 viewport = gfx::ScaleToEnclosingRect(viewport, 2); | 468 viewport = gfx::ScaleToEnclosingRect(viewport, 2); |
| 469 transform.Translate(1.f, 1.f); | 469 transform.Translate(1.f, 1.f); |
| 470 active_layer_->draw_properties().visible_content_rect = viewport; | 470 active_layer_->draw_properties().visible_content_rect = viewport; |
| 471 active_layer_->draw_properties().screen_space_transform = transform; | 471 active_layer_->draw_properties().screen_space_transform = transform; |
| 472 host_impl_.SetExternalDrawConstraints(transform, | 472 host_impl_.SetExternalDrawConstraints(transform, |
| 473 viewport, | 473 viewport, |
| 474 viewport, | 474 viewport, |
| 475 viewport, | 475 viewport, |
| 476 transform, | 476 transform, |
| 477 resourceless_software_draw); | 477 resourceless_software_draw); |
| 478 active_layer_->UpdateTiles(Occlusion()); | 478 active_layer_->UpdateTiles(NULL); |
| 479 | 479 |
| 480 visible_rect_for_tile_priority = | 480 visible_rect_for_tile_priority = |
| 481 gfx::ScaleToEnclosingRect(visible_rect_for_tile_priority, 2); | 481 gfx::ScaleToEnclosingRect(visible_rect_for_tile_priority, 2); |
| 482 viewport_rect_for_tile_priority = | 482 viewport_rect_for_tile_priority = |
| 483 gfx::ScaleToEnclosingRect(viewport_rect_for_tile_priority, 2); | 483 gfx::ScaleToEnclosingRect(viewport_rect_for_tile_priority, 2); |
| 484 screen_space_transform_for_tile_priority = transform; | 484 screen_space_transform_for_tile_priority = transform; |
| 485 EXPECT_RECT_EQ(visible_rect_for_tile_priority, | 485 EXPECT_RECT_EQ(visible_rect_for_tile_priority, |
| 486 active_layer_->visible_rect_for_tile_priority()); | 486 active_layer_->visible_rect_for_tile_priority()); |
| 487 EXPECT_RECT_EQ(viewport_rect_for_tile_priority, | 487 EXPECT_RECT_EQ(viewport_rect_for_tile_priority, |
| 488 active_layer_->viewport_rect_for_tile_priority()); | 488 active_layer_->viewport_rect_for_tile_priority()); |
| (...skipping 1012 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1501 transform_for_tile_priority, | 1501 transform_for_tile_priority, |
| 1502 resourceless_software_draw); | 1502 resourceless_software_draw); |
| 1503 host_impl_.pending_tree()->UpdateDrawProperties(); | 1503 host_impl_.pending_tree()->UpdateDrawProperties(); |
| 1504 | 1504 |
| 1505 // Set visible content rect that is different from | 1505 // Set visible content rect that is different from |
| 1506 // external_viewport_for_tile_priority. | 1506 // external_viewport_for_tile_priority. |
| 1507 pending_layer_->draw_properties().visible_content_rect = visible_content_rect; | 1507 pending_layer_->draw_properties().visible_content_rect = visible_content_rect; |
| 1508 time_ticks += base::TimeDelta::FromMilliseconds(200); | 1508 time_ticks += base::TimeDelta::FromMilliseconds(200); |
| 1509 host_impl_.SetCurrentBeginFrameArgs( | 1509 host_impl_.SetCurrentBeginFrameArgs( |
| 1510 CreateBeginFrameArgsForTesting(time_ticks)); | 1510 CreateBeginFrameArgsForTesting(time_ticks)); |
| 1511 pending_layer_->UpdateTiles(Occlusion()); | 1511 pending_layer_->UpdateTiles(NULL); |
| 1512 | 1512 |
| 1513 pending_layer_->MarkVisibleResourcesAsRequired(); | 1513 pending_layer_->MarkVisibleResourcesAsRequired(); |
| 1514 | 1514 |
| 1515 // Intersect the two rects. Any tile outside should not be required for | 1515 // Intersect the two rects. Any tile outside should not be required for |
| 1516 // activation. | 1516 // activation. |
| 1517 gfx::Rect viewport_for_tile_priority = | 1517 gfx::Rect viewport_for_tile_priority = |
| 1518 pending_layer_->GetViewportForTilePriorityInContentSpace(); | 1518 pending_layer_->GetViewportForTilePriorityInContentSpace(); |
| 1519 viewport_for_tile_priority.Intersect(pending_layer_->visible_content_rect()); | 1519 viewport_for_tile_priority.Intersect(pending_layer_->visible_content_rect()); |
| 1520 | 1520 |
| 1521 int num_inside = 0; | 1521 int num_inside = 0; |
| (...skipping 1596 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3118 gfx::Rect viewport = gfx::Rect(layer_bounds); | 3118 gfx::Rect viewport = gfx::Rect(layer_bounds); |
| 3119 gfx::Transform transform; | 3119 gfx::Transform transform; |
| 3120 host_impl_.SetExternalDrawConstraints(transform, | 3120 host_impl_.SetExternalDrawConstraints(transform, |
| 3121 viewport, | 3121 viewport, |
| 3122 viewport, | 3122 viewport, |
| 3123 viewport, | 3123 viewport, |
| 3124 transform, | 3124 transform, |
| 3125 resourceless_software_draw); | 3125 resourceless_software_draw); |
| 3126 active_layer_->draw_properties().visible_content_rect = viewport; | 3126 active_layer_->draw_properties().visible_content_rect = viewport; |
| 3127 active_layer_->draw_properties().screen_space_transform = transform; | 3127 active_layer_->draw_properties().screen_space_transform = transform; |
| 3128 active_layer_->UpdateTiles(Occlusion()); | 3128 active_layer_->UpdateTiles(NULL); |
| 3129 | 3129 |
| 3130 gfx::Rect visible_rect_for_tile_priority = | 3130 gfx::Rect visible_rect_for_tile_priority = |
| 3131 active_layer_->visible_rect_for_tile_priority(); | 3131 active_layer_->visible_rect_for_tile_priority(); |
| 3132 EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty()); | 3132 EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty()); |
| 3133 gfx::Rect viewport_rect_for_tile_priority = | 3133 gfx::Rect viewport_rect_for_tile_priority = |
| 3134 active_layer_->viewport_rect_for_tile_priority(); | 3134 active_layer_->viewport_rect_for_tile_priority(); |
| 3135 EXPECT_FALSE(viewport_rect_for_tile_priority.IsEmpty()); | 3135 EXPECT_FALSE(viewport_rect_for_tile_priority.IsEmpty()); |
| 3136 gfx::Transform screen_space_transform_for_tile_priority = | 3136 gfx::Transform screen_space_transform_for_tile_priority = |
| 3137 active_layer_->screen_space_transform_for_tile_priority(); | 3137 active_layer_->screen_space_transform_for_tile_priority(); |
| 3138 | 3138 |
| 3139 // PictureLayerImpl does not make a special case for | 3139 // PictureLayerImpl does not make a special case for |
| 3140 // resource_less_software_draw, so the tile viewport and matrix should be | 3140 // resource_less_software_draw, so the tile viewport and matrix should be |
| 3141 // respected. | 3141 // respected. |
| 3142 time_ticks += base::TimeDelta::FromMilliseconds(200); | 3142 time_ticks += base::TimeDelta::FromMilliseconds(200); |
| 3143 host_impl_.SetCurrentBeginFrameArgs( | 3143 host_impl_.SetCurrentBeginFrameArgs( |
| 3144 CreateBeginFrameArgsForTesting(time_ticks)); | 3144 CreateBeginFrameArgsForTesting(time_ticks)); |
| 3145 resourceless_software_draw = true; | 3145 resourceless_software_draw = true; |
| 3146 viewport = gfx::ScaleToEnclosingRect(viewport, 2); | 3146 viewport = gfx::ScaleToEnclosingRect(viewport, 2); |
| 3147 transform.Translate(1.f, 1.f); | 3147 transform.Translate(1.f, 1.f); |
| 3148 active_layer_->draw_properties().visible_content_rect = viewport; | 3148 active_layer_->draw_properties().visible_content_rect = viewport; |
| 3149 active_layer_->draw_properties().screen_space_transform = transform; | 3149 active_layer_->draw_properties().screen_space_transform = transform; |
| 3150 host_impl_.SetExternalDrawConstraints(transform, | 3150 host_impl_.SetExternalDrawConstraints(transform, |
| 3151 viewport, | 3151 viewport, |
| 3152 viewport, | 3152 viewport, |
| 3153 viewport, | 3153 viewport, |
| 3154 transform, | 3154 transform, |
| 3155 resourceless_software_draw); | 3155 resourceless_software_draw); |
| 3156 active_layer_->UpdateTiles(Occlusion()); | 3156 active_layer_->UpdateTiles(NULL); |
| 3157 | 3157 |
| 3158 visible_rect_for_tile_priority = | 3158 visible_rect_for_tile_priority = |
| 3159 gfx::ScaleToEnclosingRect(visible_rect_for_tile_priority, 2); | 3159 gfx::ScaleToEnclosingRect(visible_rect_for_tile_priority, 2); |
| 3160 viewport_rect_for_tile_priority = | 3160 viewport_rect_for_tile_priority = |
| 3161 gfx::ScaleToEnclosingRect(viewport_rect_for_tile_priority, 2); | 3161 gfx::ScaleToEnclosingRect(viewport_rect_for_tile_priority, 2); |
| 3162 screen_space_transform_for_tile_priority = transform; | 3162 screen_space_transform_for_tile_priority = transform; |
| 3163 | 3163 |
| 3164 EXPECT_RECT_EQ(visible_rect_for_tile_priority, | 3164 EXPECT_RECT_EQ(visible_rect_for_tile_priority, |
| 3165 active_layer_->visible_rect_for_tile_priority()); | 3165 active_layer_->visible_rect_for_tile_priority()); |
| 3166 EXPECT_RECT_EQ(viewport_rect_for_tile_priority, | 3166 EXPECT_RECT_EQ(viewport_rect_for_tile_priority, |
| (...skipping 1006 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4173 ActivateTree(); | 4173 ActivateTree(); |
| 4174 EXPECT_TRUE(active_layer_->GetRecycledTwinLayer()); | 4174 EXPECT_TRUE(active_layer_->GetRecycledTwinLayer()); |
| 4175 EXPECT_EQ(old_pending_layer_, active_layer_->GetRecycledTwinLayer()); | 4175 EXPECT_EQ(old_pending_layer_, active_layer_->GetRecycledTwinLayer()); |
| 4176 | 4176 |
| 4177 host_impl_.ResetRecycleTreeForTesting(); | 4177 host_impl_.ResetRecycleTreeForTesting(); |
| 4178 EXPECT_FALSE(active_layer_->GetRecycledTwinLayer()); | 4178 EXPECT_FALSE(active_layer_->GetRecycledTwinLayer()); |
| 4179 } | 4179 } |
| 4180 | 4180 |
| 4181 } // namespace | 4181 } // namespace |
| 4182 } // namespace cc | 4182 } // namespace cc |
| OLD | NEW |