Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(389)

Side by Side Diff: cc/layers/picture_layer_impl.cc

Issue 23171014: Fix UpdateTilePriorities viewport in Android WebView. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase to 221292 Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/debug/overdraw_metrics.cc ('k') | cc/layers/picture_layer_impl_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « cc/debug/overdraw_metrics.cc ('k') | cc/layers/picture_layer_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698