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 <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/time/time.h" | 9 #include "base/time/time.h" |
10 #include "cc/base/math_util.h" | 10 #include "cc/base/math_util.h" |
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
286 | 286 |
287 // Aggressively remove any tilings that are not seen to save memory. Note | 287 // Aggressively remove any tilings that are not seen to save memory. Note |
288 // that this is at the expense of doing cause more frequent re-painting. A | 288 // that this is at the expense of doing cause more frequent re-painting. A |
289 // better scheme would be to maintain a tighter visible_content_rect for the | 289 // better scheme would be to maintain a tighter visible_content_rect for the |
290 // finer tilings. | 290 // finer tilings. |
291 CleanUpTilingsOnActiveLayer(seen_tilings); | 291 CleanUpTilingsOnActiveLayer(seen_tilings); |
292 } | 292 } |
293 | 293 |
294 void PictureLayerImpl::UpdateTilePriorities() { | 294 void PictureLayerImpl::UpdateTilePriorities() { |
295 DCHECK(!needs_post_commit_initialization_); | 295 DCHECK(!needs_post_commit_initialization_); |
| 296 if (!layer_tree_impl()->device_viewport_valid_for_tile_management()) { |
| 297 for (size_t i = 0; i < tilings_->num_tilings(); ++i) |
| 298 DCHECK(tilings_->tiling_at(i)->has_ever_been_updated()); |
| 299 return; |
| 300 } |
| 301 |
296 if (!tilings_->num_tilings()) | 302 if (!tilings_->num_tilings()) |
297 return; | 303 return; |
298 | 304 |
299 double current_frame_time_in_seconds = | 305 double current_frame_time_in_seconds = |
300 (layer_tree_impl()->CurrentFrameTimeTicks() - | 306 (layer_tree_impl()->CurrentFrameTimeTicks() - |
301 base::TimeTicks()).InSecondsF(); | 307 base::TimeTicks()).InSecondsF(); |
302 | 308 |
303 bool tiling_needs_update = false; | 309 bool tiling_needs_update = false; |
304 for (size_t i = 0; i < tilings_->num_tilings(); ++i) { | 310 for (size_t i = 0; i < tilings_->num_tilings(); ++i) { |
305 if (tilings_->tiling_at(i)->NeedsUpdateForFrameAtTime( | 311 if (tilings_->tiling_at(i)->NeedsUpdateForFrameAtTime( |
306 current_frame_time_in_seconds)) { | 312 current_frame_time_in_seconds)) { |
307 tiling_needs_update = true; | 313 tiling_needs_update = true; |
308 break; | 314 break; |
309 } | 315 } |
310 } | 316 } |
311 if (!tiling_needs_update) | 317 if (!tiling_needs_update) |
312 return; | 318 return; |
313 | 319 |
314 // At this point, tile priorities are going to be modified. | 320 // At this point, tile priorities are going to be modified. |
315 layer_tree_impl()->WillModifyTilePriorities(); | 321 layer_tree_impl()->WillModifyTilePriorities(); |
316 | 322 |
317 UpdateLCDTextStatus(can_use_lcd_text()); | 323 UpdateLCDTextStatus(can_use_lcd_text()); |
318 | 324 |
319 gfx::Transform current_screen_space_transform = screen_space_transform(); | 325 gfx::Transform current_screen_space_transform = screen_space_transform(); |
320 | 326 |
| 327 gfx::Size viewport_size = layer_tree_impl()->DrawViewportSize(); |
321 gfx::Rect viewport_in_content_space; | 328 gfx::Rect viewport_in_content_space; |
322 gfx::Transform screen_to_layer(gfx::Transform::kSkipInitialization); | 329 gfx::Transform screen_to_layer(gfx::Transform::kSkipInitialization); |
323 if (screen_space_transform().GetInverse(&screen_to_layer)) { | 330 if (screen_space_transform().GetInverse(&screen_to_layer)) { |
324 gfx::Rect device_viewport(layer_tree_impl()->device_viewport_size()); | 331 viewport_in_content_space = |
325 viewport_in_content_space = gfx::ToEnclosingRect( | 332 gfx::ToEnclosingRect(MathUtil::ProjectClippedRect( |
326 MathUtil::ProjectClippedRect(screen_to_layer, device_viewport)); | 333 screen_to_layer, gfx::Rect(viewport_size))); |
327 } | 334 } |
328 | 335 |
329 WhichTree tree = | 336 WhichTree tree = |
330 layer_tree_impl()->IsActiveTree() ? ACTIVE_TREE : PENDING_TREE; | 337 layer_tree_impl()->IsActiveTree() ? ACTIVE_TREE : PENDING_TREE; |
331 size_t max_tiles_for_interest_area = | 338 size_t max_tiles_for_interest_area = |
332 layer_tree_impl()->settings().max_tiles_for_interest_area; | 339 layer_tree_impl()->settings().max_tiles_for_interest_area; |
333 tilings_->UpdateTilePriorities( | 340 tilings_->UpdateTilePriorities( |
334 tree, | 341 tree, |
335 layer_tree_impl()->device_viewport_size(), | 342 viewport_size, |
336 viewport_in_content_space, | 343 viewport_in_content_space, |
337 visible_content_rect(), | 344 visible_content_rect(), |
338 last_bounds_, | 345 last_bounds_, |
339 bounds(), | 346 bounds(), |
340 last_content_scale_, | 347 last_content_scale_, |
341 contents_scale_x(), | 348 contents_scale_x(), |
342 last_screen_space_transform_, | 349 last_screen_space_transform_, |
343 current_screen_space_transform, | 350 current_screen_space_transform, |
344 current_frame_time_in_seconds, | 351 current_frame_time_in_seconds, |
345 max_tiles_for_interest_area); | 352 max_tiles_for_interest_area); |
(...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
791 raster_contents_scale_ == 0.f || | 798 raster_contents_scale_ == 0.f || |
792 low_res_raster_contents_scale_ == 0.f || | 799 low_res_raster_contents_scale_ == 0.f || |
793 ShouldAdjustRasterScale(animating_transform_to_screen); | 800 ShouldAdjustRasterScale(animating_transform_to_screen); |
794 | 801 |
795 // Store the value for the next time ShouldAdjustRasterScale is called. | 802 // Store the value for the next time ShouldAdjustRasterScale is called. |
796 raster_source_scale_was_animating_ = animating_transform_to_screen; | 803 raster_source_scale_was_animating_ = animating_transform_to_screen; |
797 | 804 |
798 if (!change_target_tiling) | 805 if (!change_target_tiling) |
799 return; | 806 return; |
800 | 807 |
| 808 if (!layer_tree_impl()->device_viewport_valid_for_tile_management()) |
| 809 return; |
| 810 |
801 raster_page_scale_ = ideal_page_scale_; | 811 raster_page_scale_ = ideal_page_scale_; |
802 raster_device_scale_ = ideal_device_scale_; | 812 raster_device_scale_ = ideal_device_scale_; |
803 raster_source_scale_ = ideal_source_scale_; | 813 raster_source_scale_ = ideal_source_scale_; |
804 | 814 |
805 CalculateRasterContentsScale(animating_transform_to_screen, | 815 CalculateRasterContentsScale(animating_transform_to_screen, |
806 &raster_contents_scale_, | 816 &raster_contents_scale_, |
807 &low_res_raster_contents_scale_); | 817 &low_res_raster_contents_scale_); |
808 | 818 |
809 PictureLayerTiling* high_res = NULL; | 819 PictureLayerTiling* high_res = NULL; |
810 PictureLayerTiling* low_res = NULL; | 820 PictureLayerTiling* low_res = NULL; |
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1059 coverage_tiles->Append(tile_data.release()); | 1069 coverage_tiles->Append(tile_data.release()); |
1060 } | 1070 } |
1061 state->Set("coverage_tiles", coverage_tiles.release()); | 1071 state->Set("coverage_tiles", coverage_tiles.release()); |
1062 } | 1072 } |
1063 | 1073 |
1064 size_t PictureLayerImpl::GPUMemoryUsageInBytes() const { | 1074 size_t PictureLayerImpl::GPUMemoryUsageInBytes() const { |
1065 return tilings_->GPUMemoryUsageInBytes(); | 1075 return tilings_->GPUMemoryUsageInBytes(); |
1066 } | 1076 } |
1067 | 1077 |
1068 } // namespace cc | 1078 } // namespace cc |
OLD | NEW |