OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
405 on_demand_missing_tile_count); | 405 on_demand_missing_tile_count); |
406 } | 406 } |
407 | 407 |
408 // Aggressively remove any tilings that are not seen to save memory. Note | 408 // Aggressively remove any tilings that are not seen to save memory. Note |
409 // that this is at the expense of doing cause more frequent re-painting. A | 409 // that this is at the expense of doing cause more frequent re-painting. A |
410 // better scheme would be to maintain a tighter visible_layer_rect for the | 410 // better scheme would be to maintain a tighter visible_layer_rect for the |
411 // finer tilings. | 411 // finer tilings. |
412 CleanUpTilingsOnActiveLayer(last_append_quads_tilings_); | 412 CleanUpTilingsOnActiveLayer(last_append_quads_tilings_); |
413 } | 413 } |
414 | 414 |
415 bool PictureLayerImpl::UpdateTiles(bool resourceless_software_draw) { | 415 bool PictureLayerImpl::UpdateTiles() { |
416 if (!resourceless_software_draw) { | |
417 visible_rect_for_tile_priority_ = visible_layer_rect(); | |
418 screen_space_transform_for_tile_priority_ = ScreenSpaceTransform(); | |
419 } | |
420 | |
421 if (!CanHaveTilings()) { | 416 if (!CanHaveTilings()) { |
422 ideal_page_scale_ = 0.f; | 417 ideal_page_scale_ = 0.f; |
423 ideal_device_scale_ = 0.f; | 418 ideal_device_scale_ = 0.f; |
424 ideal_contents_scale_ = 0.f; | 419 ideal_contents_scale_ = 0.f; |
425 ideal_source_scale_ = 0.f; | 420 ideal_source_scale_ = 0.f; |
426 SanityCheckTilingState(); | 421 SanityCheckTilingState(); |
427 return false; | 422 return false; |
428 } | 423 } |
429 | 424 |
430 // Remove any non-ideal tilings that were not used last time we generated | 425 // Remove any non-ideal tilings that were not used last time we generated |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
487 // Pass |occlusion_in_content_space| for |occlusion_in_layer_space| since | 482 // Pass |occlusion_in_content_space| for |occlusion_in_layer_space| since |
488 // they are the same space in picture layer, as contents scale is always 1. | 483 // they are the same space in picture layer, as contents scale is always 1. |
489 bool updated = tilings_->UpdateTilePriorities( | 484 bool updated = tilings_->UpdateTilePriorities( |
490 viewport_rect_for_tile_priority_in_content_space_, ideal_contents_scale_, | 485 viewport_rect_for_tile_priority_in_content_space_, ideal_contents_scale_, |
491 current_frame_time_in_seconds, occlusion_in_content_space, | 486 current_frame_time_in_seconds, occlusion_in_content_space, |
492 can_require_tiles_for_activation); | 487 can_require_tiles_for_activation); |
493 return updated; | 488 return updated; |
494 } | 489 } |
495 | 490 |
496 void PictureLayerImpl::UpdateViewportRectForTilePriorityInContentSpace() { | 491 void PictureLayerImpl::UpdateViewportRectForTilePriorityInContentSpace() { |
497 // If visible_rect_for_tile_priority_ is empty or | 492 // If visible_layer_rect() is empty or viewport_rect_for_tile_priority is |
498 // viewport_rect_for_tile_priority is set to be different from the device | 493 // set to be different from the device viewport, try to inverse project the |
499 // viewport, try to inverse project the viewport into layer space and use | 494 // viewport into layer space and use that. Otherwise just use |
500 // that. Otherwise just use visible_rect_for_tile_priority_ | 495 // visible_layer_rect(). |
501 gfx::Rect visible_rect_in_content_space = visible_rect_for_tile_priority_; | 496 gfx::Rect visible_rect_in_content_space = visible_layer_rect(); |
502 gfx::Rect viewport_rect_for_tile_priority = | 497 gfx::Rect viewport_rect_for_tile_priority = |
503 layer_tree_impl()->ViewportRectForTilePriority(); | 498 layer_tree_impl()->ViewportRectForTilePriority(); |
504 if (visible_rect_in_content_space.IsEmpty() || | 499 if (visible_rect_in_content_space.IsEmpty() || |
505 layer_tree_impl()->DeviceViewport() != viewport_rect_for_tile_priority) { | 500 layer_tree_impl()->DeviceViewport() != viewport_rect_for_tile_priority) { |
506 gfx::Transform view_to_layer(gfx::Transform::kSkipInitialization); | 501 gfx::Transform view_to_layer(gfx::Transform::kSkipInitialization); |
507 if (screen_space_transform_for_tile_priority_.GetInverse(&view_to_layer)) { | 502 if (ScreenSpaceTransform().GetInverse(&view_to_layer)) { |
508 // Transform from view space to content space. | 503 // Transform from view space to content space. |
509 visible_rect_in_content_space = MathUtil::ProjectEnclosingClippedRect( | 504 visible_rect_in_content_space = MathUtil::ProjectEnclosingClippedRect( |
510 view_to_layer, viewport_rect_for_tile_priority); | 505 view_to_layer, viewport_rect_for_tile_priority); |
511 | 506 |
512 // We have to allow for a viewport that is outside of the layer bounds in | 507 // We have to allow for a viewport that is outside of the layer bounds in |
513 // order to compute tile priorities correctly for offscreen content that | 508 // order to compute tile priorities correctly for offscreen content that |
514 // is going to make it on screen. However, we also have to limit the | 509 // is going to make it on screen. However, we also have to limit the |
515 // viewport since it can be very large due to screen_space_transforms. As | 510 // viewport since it can be very large due to screen_space_transforms. As |
516 // a heuristic, we clip to bounds padded by skewport_extrapolation_limit * | 511 // a heuristic, we clip to bounds padded by skewport_extrapolation_limit * |
517 // maximum tiling scale, since this should allow sufficient room for | 512 // maximum tiling scale, since this should allow sufficient room for |
(...skipping 743 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1261 | 1256 |
1262 bool PictureLayerImpl::IsOnActiveOrPendingTree() const { | 1257 bool PictureLayerImpl::IsOnActiveOrPendingTree() const { |
1263 return !layer_tree_impl()->IsRecycleTree(); | 1258 return !layer_tree_impl()->IsRecycleTree(); |
1264 } | 1259 } |
1265 | 1260 |
1266 bool PictureLayerImpl::HasValidTilePriorities() const { | 1261 bool PictureLayerImpl::HasValidTilePriorities() const { |
1267 return IsOnActiveOrPendingTree() && IsDrawnRenderSurfaceLayerListMember(); | 1262 return IsOnActiveOrPendingTree() && IsDrawnRenderSurfaceLayerListMember(); |
1268 } | 1263 } |
1269 | 1264 |
1270 } // namespace cc | 1265 } // namespace cc |
OLD | NEW |