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/resources/picture_layer_tiling.h" | 5 #include "cc/resources/picture_layer_tiling.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cmath> | 8 #include <cmath> |
9 #include <limits> | 9 #include <limits> |
10 #include <set> | 10 #include <set> |
(...skipping 15 matching lines...) Expand all Loading... |
26 const float kSoonBorderDistanceViewportPercentage = 0.15f; | 26 const float kSoonBorderDistanceViewportPercentage = 0.15f; |
27 const float kMaxSoonBorderDistanceInScreenPixels = 312.f; | 27 const float kMaxSoonBorderDistanceInScreenPixels = 312.f; |
28 | 28 |
29 } // namespace | 29 } // namespace |
30 | 30 |
31 scoped_ptr<PictureLayerTiling> PictureLayerTiling::Create( | 31 scoped_ptr<PictureLayerTiling> PictureLayerTiling::Create( |
32 WhichTree tree, | 32 WhichTree tree, |
33 float contents_scale, | 33 float contents_scale, |
34 scoped_refptr<RasterSource> raster_source, | 34 scoped_refptr<RasterSource> raster_source, |
35 PictureLayerTilingClient* client, | 35 PictureLayerTilingClient* client, |
36 size_t max_tiles_for_interest_area, | 36 float tiling_interest_area_viewport_multiplier, |
37 float skewport_target_time_in_seconds, | 37 float skewport_target_time_in_seconds, |
38 int skewport_extrapolation_limit_in_content_pixels) { | 38 int skewport_extrapolation_limit_in_content_pixels) { |
39 return make_scoped_ptr(new PictureLayerTiling( | 39 return make_scoped_ptr(new PictureLayerTiling( |
40 tree, contents_scale, raster_source, client, max_tiles_for_interest_area, | 40 tree, contents_scale, raster_source, client, |
41 skewport_target_time_in_seconds, | 41 tiling_interest_area_viewport_multiplier, skewport_target_time_in_seconds, |
42 skewport_extrapolation_limit_in_content_pixels)); | 42 skewport_extrapolation_limit_in_content_pixels)); |
43 } | 43 } |
44 | 44 |
45 PictureLayerTiling::PictureLayerTiling( | 45 PictureLayerTiling::PictureLayerTiling( |
46 WhichTree tree, | 46 WhichTree tree, |
47 float contents_scale, | 47 float contents_scale, |
48 scoped_refptr<RasterSource> raster_source, | 48 scoped_refptr<RasterSource> raster_source, |
49 PictureLayerTilingClient* client, | 49 PictureLayerTilingClient* client, |
50 size_t max_tiles_for_interest_area, | 50 float tiling_interest_area_viewport_multiplier, |
51 float skewport_target_time_in_seconds, | 51 float skewport_target_time_in_seconds, |
52 int skewport_extrapolation_limit_in_content_pixels) | 52 int skewport_extrapolation_limit_in_content_pixels) |
53 : max_tiles_for_interest_area_(max_tiles_for_interest_area), | 53 : tiling_interest_area_viewport_multiplier_( |
| 54 tiling_interest_area_viewport_multiplier), |
54 skewport_target_time_in_seconds_(skewport_target_time_in_seconds), | 55 skewport_target_time_in_seconds_(skewport_target_time_in_seconds), |
55 skewport_extrapolation_limit_in_content_pixels_( | 56 skewport_extrapolation_limit_in_content_pixels_( |
56 skewport_extrapolation_limit_in_content_pixels), | 57 skewport_extrapolation_limit_in_content_pixels), |
57 contents_scale_(contents_scale), | 58 contents_scale_(contents_scale), |
58 client_(client), | 59 client_(client), |
59 tree_(tree), | 60 tree_(tree), |
60 raster_source_(raster_source), | 61 raster_source_(raster_source), |
61 resolution_(NON_IDEAL_RESOLUTION), | 62 resolution_(NON_IDEAL_RESOLUTION), |
62 tiling_data_(gfx::Size(), gfx::Size(), kBorderTexels), | 63 tiling_data_(gfx::Size(), gfx::Size(), kBorderTexels), |
63 can_require_tiles_for_activation_(false), | 64 can_require_tiles_for_activation_(false), |
(...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
568 const gfx::Rect& viewport_in_layer_space, | 569 const gfx::Rect& viewport_in_layer_space, |
569 float ideal_contents_scale, | 570 float ideal_contents_scale, |
570 double current_frame_time_in_seconds, | 571 double current_frame_time_in_seconds, |
571 const Occlusion& occlusion_in_layer_space) { | 572 const Occlusion& occlusion_in_layer_space) { |
572 if (!NeedsUpdateForFrameAtTimeAndViewport(current_frame_time_in_seconds, | 573 if (!NeedsUpdateForFrameAtTimeAndViewport(current_frame_time_in_seconds, |
573 viewport_in_layer_space)) { | 574 viewport_in_layer_space)) { |
574 // This should never be zero for the purposes of has_ever_been_updated(). | 575 // This should never be zero for the purposes of has_ever_been_updated(). |
575 DCHECK_NE(current_frame_time_in_seconds, 0.0); | 576 DCHECK_NE(current_frame_time_in_seconds, 0.0); |
576 return false; | 577 return false; |
577 } | 578 } |
578 | |
579 gfx::Rect visible_rect_in_content_space = | 579 gfx::Rect visible_rect_in_content_space = |
580 gfx::ScaleToEnclosingRect(viewport_in_layer_space, contents_scale_); | 580 gfx::ScaleToEnclosingRect(viewport_in_layer_space, contents_scale_); |
581 | 581 |
582 if (tiling_size().IsEmpty()) { | 582 if (tiling_size().IsEmpty()) { |
583 UpdateVisibleRectHistory(current_frame_time_in_seconds, | 583 UpdateVisibleRectHistory(current_frame_time_in_seconds, |
584 visible_rect_in_content_space); | 584 visible_rect_in_content_space); |
585 last_viewport_in_layer_space_ = viewport_in_layer_space; | 585 last_viewport_in_layer_space_ = viewport_in_layer_space; |
586 return false; | 586 return false; |
587 } | 587 } |
588 | 588 |
589 // Calculate the skewport. | 589 // Calculate the skewport. |
590 gfx::Rect skewport = ComputeSkewport(current_frame_time_in_seconds, | 590 gfx::Rect skewport = ComputeSkewport(current_frame_time_in_seconds, |
591 visible_rect_in_content_space); | 591 visible_rect_in_content_space); |
592 DCHECK(skewport.Contains(visible_rect_in_content_space)); | 592 DCHECK(skewport.Contains(visible_rect_in_content_space)); |
593 | 593 |
594 // Calculate the eventually/live tiles rect. | 594 // Calculate the eventually/live tiles rect. |
595 gfx::Size tile_size = tiling_data_.max_texture_size(); | 595 int64 eventually_rect_area = tiling_interest_area_viewport_multiplier_ * |
596 int64 eventually_rect_area = | 596 visible_rect_in_content_space.width() * |
597 max_tiles_for_interest_area_ * tile_size.width() * tile_size.height(); | 597 visible_rect_in_content_space.height(); |
598 | 598 |
599 gfx::Rect eventually_rect = | 599 gfx::Rect eventually_rect = |
600 ExpandRectEquallyToAreaBoundedBy(visible_rect_in_content_space, | 600 ExpandRectEquallyToAreaBoundedBy(visible_rect_in_content_space, |
601 eventually_rect_area, | 601 eventually_rect_area, |
602 gfx::Rect(tiling_size()), | 602 gfx::Rect(tiling_size()), |
603 &expansion_cache_); | 603 &expansion_cache_); |
604 | 604 |
605 DCHECK(eventually_rect.IsEmpty() || | 605 DCHECK(eventually_rect.IsEmpty() || |
606 gfx::Rect(tiling_size()).Contains(eventually_rect)) | 606 gfx::Rect(tiling_size()).Contains(eventually_rect)) |
607 << "tiling_size: " << tiling_size().ToString() | 607 << "tiling_size: " << tiling_size().ToString() |
(...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1035 break; | 1035 break; |
1036 } | 1036 } |
1037 | 1037 |
1038 gfx::Rect result(origin_x, origin_y, width, height); | 1038 gfx::Rect result(origin_x, origin_y, width, height); |
1039 if (cache) | 1039 if (cache) |
1040 cache->previous_result = result; | 1040 cache->previous_result = result; |
1041 return result; | 1041 return result; |
1042 } | 1042 } |
1043 | 1043 |
1044 } // namespace cc | 1044 } // namespace cc |
OLD | NEW |