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 |