| 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 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 | 52 |
| 53 private: | 53 private: |
| 54 TreePriority tree_priority_; | 54 TreePriority tree_priority_; |
| 55 }; | 55 }; |
| 56 | 56 |
| 57 } // namespace | 57 } // namespace |
| 58 | 58 |
| 59 scoped_ptr<PictureLayerTiling> PictureLayerTiling::Create( | 59 scoped_ptr<PictureLayerTiling> PictureLayerTiling::Create( |
| 60 float contents_scale, | 60 float contents_scale, |
| 61 const gfx::Size& layer_bounds, | 61 const gfx::Size& layer_bounds, |
| 62 PictureLayerTilingClient* client) { | 62 PictureLayerTilingClient* client, |
| 63 return make_scoped_ptr(new PictureLayerTiling(contents_scale, | 63 size_t max_tiles_for_interest_area, |
| 64 layer_bounds, | 64 float skewport_target_time_in_seconds, |
| 65 client)); | 65 int skewport_extrapolation_limit_in_content_pixels) { |
| 66 return make_scoped_ptr(new PictureLayerTiling( |
| 67 contents_scale, layer_bounds, client, max_tiles_for_interest_area, |
| 68 skewport_target_time_in_seconds, |
| 69 skewport_extrapolation_limit_in_content_pixels)); |
| 66 } | 70 } |
| 67 | 71 |
| 68 PictureLayerTiling::PictureLayerTiling(float contents_scale, | 72 PictureLayerTiling::PictureLayerTiling( |
| 69 const gfx::Size& layer_bounds, | 73 float contents_scale, |
| 70 PictureLayerTilingClient* client) | 74 const gfx::Size& layer_bounds, |
| 71 : contents_scale_(contents_scale), | 75 PictureLayerTilingClient* client, |
| 76 size_t max_tiles_for_interest_area, |
| 77 float skewport_target_time_in_seconds, |
| 78 int skewport_extrapolation_limit_in_content_pixels) |
| 79 : max_tiles_for_interest_area_(max_tiles_for_interest_area), |
| 80 skewport_target_time_in_seconds_(skewport_target_time_in_seconds), |
| 81 skewport_extrapolation_limit_in_content_pixels_( |
| 82 skewport_extrapolation_limit_in_content_pixels), |
| 83 contents_scale_(contents_scale), |
| 72 layer_bounds_(layer_bounds), | 84 layer_bounds_(layer_bounds), |
| 73 resolution_(NON_IDEAL_RESOLUTION), | 85 resolution_(NON_IDEAL_RESOLUTION), |
| 74 client_(client), | 86 client_(client), |
| 75 tiling_data_(gfx::Size(), gfx::Size(), kBorderTexels), | 87 tiling_data_(gfx::Size(), gfx::Size(), kBorderTexels), |
| 76 last_impl_frame_time_in_seconds_(0.0), | 88 last_impl_frame_time_in_seconds_(0.0), |
| 77 content_to_screen_scale_(0.f), | 89 content_to_screen_scale_(0.f), |
| 78 can_require_tiles_for_activation_(false), | 90 can_require_tiles_for_activation_(false), |
| 79 has_visible_rect_tiles_(false), | 91 has_visible_rect_tiles_(false), |
| 80 has_skewport_rect_tiles_(false), | 92 has_skewport_rect_tiles_(false), |
| 81 has_soon_border_rect_tiles_(false), | 93 has_soon_border_rect_tiles_(false), |
| (...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 493 const gfx::Rect& visible_rect_in_content_space) const { | 505 const gfx::Rect& visible_rect_in_content_space) const { |
| 494 gfx::Rect skewport = visible_rect_in_content_space; | 506 gfx::Rect skewport = visible_rect_in_content_space; |
| 495 if (last_impl_frame_time_in_seconds_ == 0.0) | 507 if (last_impl_frame_time_in_seconds_ == 0.0) |
| 496 return skewport; | 508 return skewport; |
| 497 | 509 |
| 498 double time_delta = | 510 double time_delta = |
| 499 current_frame_time_in_seconds - last_impl_frame_time_in_seconds_; | 511 current_frame_time_in_seconds - last_impl_frame_time_in_seconds_; |
| 500 if (time_delta == 0.0) | 512 if (time_delta == 0.0) |
| 501 return skewport; | 513 return skewport; |
| 502 | 514 |
| 503 float skewport_target_time_in_seconds = | |
| 504 client_->GetSkewportTargetTimeInSeconds(); | |
| 505 double extrapolation_multiplier = | 515 double extrapolation_multiplier = |
| 506 skewport_target_time_in_seconds / time_delta; | 516 skewport_target_time_in_seconds_ / time_delta; |
| 507 | 517 |
| 508 int old_x = last_visible_rect_in_content_space_.x(); | 518 int old_x = last_visible_rect_in_content_space_.x(); |
| 509 int old_y = last_visible_rect_in_content_space_.y(); | 519 int old_y = last_visible_rect_in_content_space_.y(); |
| 510 int old_right = last_visible_rect_in_content_space_.right(); | 520 int old_right = last_visible_rect_in_content_space_.right(); |
| 511 int old_bottom = last_visible_rect_in_content_space_.bottom(); | 521 int old_bottom = last_visible_rect_in_content_space_.bottom(); |
| 512 | 522 |
| 513 int new_x = visible_rect_in_content_space.x(); | 523 int new_x = visible_rect_in_content_space.x(); |
| 514 int new_y = visible_rect_in_content_space.y(); | 524 int new_y = visible_rect_in_content_space.y(); |
| 515 int new_right = visible_rect_in_content_space.right(); | 525 int new_right = visible_rect_in_content_space.right(); |
| 516 int new_bottom = visible_rect_in_content_space.bottom(); | 526 int new_bottom = visible_rect_in_content_space.bottom(); |
| 517 | 527 |
| 518 int skewport_limit = client_->GetSkewportExtrapolationLimitInContentPixels(); | 528 // Compute the maximum skewport based on |
| 519 | 529 // |skewport_extrapolation_limit_in_content_pixels_|. |
| 520 // Compute the maximum skewport based on |skewport_limit|. | |
| 521 gfx::Rect max_skewport = skewport; | 530 gfx::Rect max_skewport = skewport; |
| 522 max_skewport.Inset( | 531 max_skewport.Inset(-skewport_extrapolation_limit_in_content_pixels_, |
| 523 -skewport_limit, -skewport_limit, -skewport_limit, -skewport_limit); | 532 -skewport_extrapolation_limit_in_content_pixels_); |
| 524 | 533 |
| 525 // Inset the skewport by the needed adjustment. | 534 // Inset the skewport by the needed adjustment. |
| 526 skewport.Inset(extrapolation_multiplier * (new_x - old_x), | 535 skewport.Inset(extrapolation_multiplier * (new_x - old_x), |
| 527 extrapolation_multiplier * (new_y - old_y), | 536 extrapolation_multiplier * (new_y - old_y), |
| 528 extrapolation_multiplier * (old_right - new_right), | 537 extrapolation_multiplier * (old_right - new_right), |
| 529 extrapolation_multiplier * (old_bottom - new_bottom)); | 538 extrapolation_multiplier * (old_bottom - new_bottom)); |
| 530 | 539 |
| 531 // Clip the skewport to |max_skewport|. | 540 // Clip the skewport to |max_skewport|. |
| 532 skewport.Intersect(max_skewport); | 541 skewport.Intersect(max_skewport); |
| 533 | 542 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 557 last_visible_rect_in_content_space_ = visible_rect_in_content_space; | 566 last_visible_rect_in_content_space_ = visible_rect_in_content_space; |
| 558 return; | 567 return; |
| 559 } | 568 } |
| 560 | 569 |
| 561 // Calculate the skewport. | 570 // Calculate the skewport. |
| 562 gfx::Rect skewport = ComputeSkewport(current_frame_time_in_seconds, | 571 gfx::Rect skewport = ComputeSkewport(current_frame_time_in_seconds, |
| 563 visible_rect_in_content_space); | 572 visible_rect_in_content_space); |
| 564 DCHECK(skewport.Contains(visible_rect_in_content_space)); | 573 DCHECK(skewport.Contains(visible_rect_in_content_space)); |
| 565 | 574 |
| 566 // Calculate the eventually/live tiles rect. | 575 // Calculate the eventually/live tiles rect. |
| 567 size_t max_tiles_for_interest_area = client_->GetMaxTilesForInterestArea(); | |
| 568 | |
| 569 gfx::Size tile_size = tiling_data_.max_texture_size(); | 576 gfx::Size tile_size = tiling_data_.max_texture_size(); |
| 570 int64 eventually_rect_area = | 577 int64 eventually_rect_area = |
| 571 max_tiles_for_interest_area * tile_size.width() * tile_size.height(); | 578 max_tiles_for_interest_area_ * tile_size.width() * tile_size.height(); |
| 572 | 579 |
| 573 gfx::Rect eventually_rect = | 580 gfx::Rect eventually_rect = |
| 574 ExpandRectEquallyToAreaBoundedBy(visible_rect_in_content_space, | 581 ExpandRectEquallyToAreaBoundedBy(visible_rect_in_content_space, |
| 575 eventually_rect_area, | 582 eventually_rect_area, |
| 576 gfx::Rect(tiling_size()), | 583 gfx::Rect(tiling_size()), |
| 577 &expansion_cache_); | 584 &expansion_cache_); |
| 578 | 585 |
| 579 DCHECK(eventually_rect.IsEmpty() || | 586 DCHECK(eventually_rect.IsEmpty() || |
| 580 gfx::Rect(tiling_size()).Contains(eventually_rect)) | 587 gfx::Rect(tiling_size()).Contains(eventually_rect)) |
| 581 << "tiling_size: " << tiling_size().ToString() | 588 << "tiling_size: " << tiling_size().ToString() |
| (...skipping 628 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1210 } | 1217 } |
| 1211 current_tile_ = tiling_->TileAt(next_index.first, next_index.second); | 1218 current_tile_ = tiling_->TileAt(next_index.first, next_index.second); |
| 1212 } | 1219 } |
| 1213 | 1220 |
| 1214 if (current_tile_) | 1221 if (current_tile_) |
| 1215 tiling_->UpdateTileAndTwinPriority(current_tile_); | 1222 tiling_->UpdateTileAndTwinPriority(current_tile_); |
| 1216 return *this; | 1223 return *this; |
| 1217 } | 1224 } |
| 1218 | 1225 |
| 1219 } // namespace cc | 1226 } // namespace cc |
| OLD | NEW |