| 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/picture_layer_impl.h" | 5 #include "cc/picture_layer_impl.h" |
| 6 | 6 |
| 7 #include "base/time.h" | 7 #include "base/time.h" |
| 8 #include "cc/append_quads_data.h" | 8 #include "cc/append_quads_data.h" |
| 9 #include "cc/checkerboard_draw_quad.h" | 9 #include "cc/checkerboard_draw_quad.h" |
| 10 #include "cc/debug_border_draw_quad.h" | 10 #include "cc/debug_border_draw_quad.h" |
| (...skipping 576 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 587 | 587 |
| 588 void PictureLayerImpl::ManageTilings(bool animating_transform_to_screen) { | 588 void PictureLayerImpl::ManageTilings(bool animating_transform_to_screen) { |
| 589 DCHECK(ideal_contents_scale_); | 589 DCHECK(ideal_contents_scale_); |
| 590 DCHECK(ideal_page_scale_); | 590 DCHECK(ideal_page_scale_); |
| 591 DCHECK(ideal_device_scale_); | 591 DCHECK(ideal_device_scale_); |
| 592 DCHECK(ideal_source_scale_); | 592 DCHECK(ideal_source_scale_); |
| 593 | 593 |
| 594 if (pile_->recorded_region().IsEmpty()) | 594 if (pile_->recorded_region().IsEmpty()) |
| 595 return; | 595 return; |
| 596 | 596 |
| 597 float low_res_factor = layerTreeImpl()->settings().lowResContentsScaleFactor; | |
| 598 | |
| 599 bool is_active_layer = layerTreeImpl()->IsActiveTree(); | 597 bool is_active_layer = layerTreeImpl()->IsActiveTree(); |
| 600 bool is_pinching = layerTreeImpl()->PinchGestureActive(); | 598 bool is_pinching = layerTreeImpl()->PinchGestureActive(); |
| 601 | 599 |
| 602 bool change_target_tiling = false; | 600 bool change_target_tiling = false; |
| 603 | 601 |
| 604 if (!raster_page_scale_ || !raster_device_scale_ || !raster_source_scale_) | 602 if (!raster_page_scale_ || !raster_device_scale_ || !raster_source_scale_) |
| 605 change_target_tiling = true; | 603 change_target_tiling = true; |
| 606 | 604 |
| 607 // TODO(danakj): Adjust raster_source_scale_ closer to ideal_source_scale_ at | 605 // TODO(danakj): Adjust raster_source_scale_ closer to ideal_source_scale_ at |
| 608 // a throttled rate. Possibly make use of invalidation_.IsEmpty() on pending | 606 // a throttled rate. Possibly make use of invalidation_.IsEmpty() on pending |
| (...skipping 24 matching lines...) Expand all Loading... |
| 633 if (raster_device_scale_ != ideal_device_scale_) | 631 if (raster_device_scale_ != ideal_device_scale_) |
| 634 change_target_tiling = true; | 632 change_target_tiling = true; |
| 635 | 633 |
| 636 if (!change_target_tiling) | 634 if (!change_target_tiling) |
| 637 return; | 635 return; |
| 638 | 636 |
| 639 raster_page_scale_ = ideal_page_scale_; | 637 raster_page_scale_ = ideal_page_scale_; |
| 640 raster_device_scale_ = ideal_device_scale_; | 638 raster_device_scale_ = ideal_device_scale_; |
| 641 raster_source_scale_ = ideal_source_scale_; | 639 raster_source_scale_ = ideal_source_scale_; |
| 642 | 640 |
| 643 float raster_contents_scale = ideal_contents_scale_; | 641 float raster_contents_scale; |
| 644 | 642 float low_res_raster_contents_scale; |
| 645 // Don't allow animating CSS scales to drop below 1. | 643 CalculateRasterContentsScale(animating_transform_to_screen, |
| 646 if (animating_transform_to_screen) { | 644 &raster_contents_scale, |
| 647 raster_contents_scale = std::max( | 645 &low_res_raster_contents_scale); |
| 648 raster_contents_scale, 1.f * ideal_page_scale_ * ideal_device_scale_); | |
| 649 } | |
| 650 | |
| 651 float low_res_raster_contents_scale = std::max( | |
| 652 raster_contents_scale * low_res_factor, | |
| 653 layerTreeImpl()->settings().minimumContentsScale); | |
| 654 | 646 |
| 655 PictureLayerTiling* high_res = NULL; | 647 PictureLayerTiling* high_res = NULL; |
| 656 PictureLayerTiling* low_res = NULL; | 648 PictureLayerTiling* low_res = NULL; |
| 657 | 649 |
| 658 for (size_t i = 0; i < tilings_->num_tilings(); ++i) { | 650 for (size_t i = 0; i < tilings_->num_tilings(); ++i) { |
| 659 PictureLayerTiling* tiling = tilings_->tiling_at(i); | 651 PictureLayerTiling* tiling = tilings_->tiling_at(i); |
| 660 if (tiling->contents_scale() == raster_contents_scale) | 652 if (tiling->contents_scale() == raster_contents_scale) |
| 661 high_res = tiling; | 653 high_res = tiling; |
| 662 if (tiling->contents_scale() == low_res_raster_contents_scale) | 654 if (tiling->contents_scale() == low_res_raster_contents_scale) |
| 663 low_res = tiling; | 655 low_res = tiling; |
| 664 | 656 |
| 665 // Reset all tilings to non-ideal until the end of this function. | 657 // Reset all tilings to non-ideal until the end of this function. |
| 666 tiling->set_resolution(NON_IDEAL_RESOLUTION); | 658 tiling->set_resolution(NON_IDEAL_RESOLUTION); |
| 667 } | 659 } |
| 668 | 660 |
| 669 if (!high_res) | 661 if (!high_res) { |
| 670 high_res = AddTiling(raster_contents_scale); | 662 high_res = AddTiling(raster_contents_scale); |
| 663 if (raster_contents_scale == low_res_raster_contents_scale) |
| 664 low_res = high_res; |
| 665 } |
| 671 if (!low_res && low_res != high_res) | 666 if (!low_res && low_res != high_res) |
| 672 low_res = AddTiling(low_res_raster_contents_scale); | 667 low_res = AddTiling(low_res_raster_contents_scale); |
| 673 | 668 |
| 674 if (high_res) | 669 if (high_res) |
| 675 high_res->set_resolution(HIGH_RESOLUTION); | 670 high_res->set_resolution(HIGH_RESOLUTION); |
| 676 if (low_res && low_res != high_res) | 671 if (low_res && low_res != high_res) |
| 677 low_res->set_resolution(LOW_RESOLUTION); | 672 low_res->set_resolution(LOW_RESOLUTION); |
| 678 } | 673 } |
| 679 | 674 |
| 675 void PictureLayerImpl::CalculateRasterContentsScale( |
| 676 bool animating_transform_to_screen, |
| 677 float* raster_contents_scale, |
| 678 float* low_res_raster_contents_scale) { |
| 679 *raster_contents_scale = ideal_contents_scale_; |
| 680 |
| 681 // Don't allow animating CSS scales to drop below 1. |
| 682 if (animating_transform_to_screen) { |
| 683 *raster_contents_scale = std::max( |
| 684 *raster_contents_scale, 1.f * ideal_page_scale_ * ideal_device_scale_); |
| 685 } |
| 686 |
| 687 float low_res_factor = layerTreeImpl()->settings().lowResContentsScaleFactor; |
| 688 *low_res_raster_contents_scale = std::max( |
| 689 *raster_contents_scale * low_res_factor, |
| 690 layerTreeImpl()->settings().minimumContentsScale); |
| 691 } |
| 692 |
| 680 void PictureLayerImpl::CleanUpTilingsOnActiveLayer( | 693 void PictureLayerImpl::CleanUpTilingsOnActiveLayer( |
| 681 std::vector<PictureLayerTiling*> used_tilings) { | 694 std::vector<PictureLayerTiling*> used_tilings) { |
| 682 DCHECK(layerTreeImpl()->IsActiveTree()); | 695 DCHECK(layerTreeImpl()->IsActiveTree()); |
| 683 | 696 |
| 684 float raster_contents_scale = | 697 float raster_contents_scale = |
| 685 raster_page_scale_ * raster_device_scale_ * raster_source_scale_; | 698 raster_page_scale_ * raster_device_scale_ * raster_source_scale_; |
| 686 | 699 |
| 687 float min_acceptable_high_res_scale = std::min( | 700 float min_acceptable_high_res_scale = std::min( |
| 688 raster_contents_scale, ideal_contents_scale_); | 701 raster_contents_scale, ideal_contents_scale_); |
| 689 float max_acceptable_high_res_scale = std::max( | 702 float max_acceptable_high_res_scale = std::max( |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 758 return twin; | 771 return twin; |
| 759 } | 772 } |
| 760 | 773 |
| 761 void PictureLayerImpl::getDebugBorderProperties( | 774 void PictureLayerImpl::getDebugBorderProperties( |
| 762 SkColor* color, float* width) const { | 775 SkColor* color, float* width) const { |
| 763 *color = DebugColors::TiledContentLayerBorderColor(); | 776 *color = DebugColors::TiledContentLayerBorderColor(); |
| 764 *width = DebugColors::TiledContentLayerBorderWidth(layerTreeImpl()); | 777 *width = DebugColors::TiledContentLayerBorderWidth(layerTreeImpl()); |
| 765 } | 778 } |
| 766 | 779 |
| 767 } // namespace cc | 780 } // namespace cc |
| OLD | NEW |