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

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: Add tests 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
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())
enne (OOO) 2013/09/03 16:58:47 If you're going to early out here, can you also DC
aelias_OOO_until_Jul13 2013/09/03 19:52:09 Done.
297 return;
298
296 if (!tilings_->num_tilings()) 299 if (!tilings_->num_tilings())
297 return; 300 return;
298 301
299 double current_frame_time_in_seconds = 302 double current_frame_time_in_seconds =
300 (layer_tree_impl()->CurrentFrameTimeTicks() - 303 (layer_tree_impl()->CurrentFrameTimeTicks() -
301 base::TimeTicks()).InSecondsF(); 304 base::TimeTicks()).InSecondsF();
302 305
303 bool tiling_needs_update = false; 306 bool tiling_needs_update = false;
304 for (size_t i = 0; i < tilings_->num_tilings(); ++i) { 307 for (size_t i = 0; i < tilings_->num_tilings(); ++i) {
305 if (tilings_->tiling_at(i)->NeedsUpdateForFrameAtTime( 308 if (tilings_->tiling_at(i)->NeedsUpdateForFrameAtTime(
306 current_frame_time_in_seconds)) { 309 current_frame_time_in_seconds)) {
307 tiling_needs_update = true; 310 tiling_needs_update = true;
308 break; 311 break;
309 } 312 }
310 } 313 }
311 if (!tiling_needs_update) 314 if (!tiling_needs_update)
312 return; 315 return;
313 316
314 // At this point, tile priorities are going to be modified. 317 // At this point, tile priorities are going to be modified.
315 layer_tree_impl()->WillModifyTilePriorities(); 318 layer_tree_impl()->WillModifyTilePriorities();
316 319
317 UpdateLCDTextStatus(can_use_lcd_text()); 320 UpdateLCDTextStatus(can_use_lcd_text());
318 321
319 gfx::Transform current_screen_space_transform = screen_space_transform(); 322 gfx::Transform current_screen_space_transform = screen_space_transform();
320 323
324 gfx::Size device_viewport_size = layer_tree_impl()->DeviceViewport().size();
enne (OOO) 2013/09/03 16:58:47 Can you either use DeviceViewport() directly witho
aelias_OOO_until_Jul13 2013/09/03 19:52:09 This is a pretty subtle question but I've convince
enne (OOO) 2013/09/03 21:47:31 Aha! Thanks, I really appreciate the explanation
aelias_OOO_until_Jul13 2013/09/04 01:22:23 OK, I went with "DrawViewportSize" and "DeviceView
321 gfx::Rect viewport_in_content_space; 325 gfx::Rect viewport_in_content_space;
322 gfx::Transform screen_to_layer(gfx::Transform::kSkipInitialization); 326 gfx::Transform screen_to_layer(gfx::Transform::kSkipInitialization);
323 if (screen_space_transform().GetInverse(&screen_to_layer)) { 327 if (screen_space_transform().GetInverse(&screen_to_layer)) {
324 gfx::Rect device_viewport(layer_tree_impl()->device_viewport_size()); 328 viewport_in_content_space =
325 viewport_in_content_space = gfx::ToEnclosingRect( 329 gfx::ToEnclosingRect(MathUtil::ProjectClippedRect(
326 MathUtil::ProjectClippedRect(screen_to_layer, device_viewport)); 330 screen_to_layer, gfx::Rect(device_viewport_size)));
327 } 331 }
328 332
329 WhichTree tree = 333 WhichTree tree =
330 layer_tree_impl()->IsActiveTree() ? ACTIVE_TREE : PENDING_TREE; 334 layer_tree_impl()->IsActiveTree() ? ACTIVE_TREE : PENDING_TREE;
331 size_t max_tiles_for_interest_area = 335 size_t max_tiles_for_interest_area =
332 layer_tree_impl()->settings().max_tiles_for_interest_area; 336 layer_tree_impl()->settings().max_tiles_for_interest_area;
333 tilings_->UpdateTilePriorities( 337 tilings_->UpdateTilePriorities(
334 tree, 338 tree,
335 layer_tree_impl()->device_viewport_size(), 339 device_viewport_size,
336 viewport_in_content_space, 340 viewport_in_content_space,
337 visible_content_rect(), 341 visible_content_rect(),
338 last_bounds_, 342 last_bounds_,
339 bounds(), 343 bounds(),
340 last_content_scale_, 344 last_content_scale_,
341 contents_scale_x(), 345 contents_scale_x(),
342 last_screen_space_transform_, 346 last_screen_space_transform_,
343 current_screen_space_transform, 347 current_screen_space_transform,
344 current_frame_time_in_seconds, 348 current_frame_time_in_seconds,
345 max_tiles_for_interest_area); 349 max_tiles_for_interest_area);
(...skipping 713 matching lines...) Expand 10 before | Expand all | Expand 10 after
1059 coverage_tiles->Append(tile_data.release()); 1063 coverage_tiles->Append(tile_data.release());
1060 } 1064 }
1061 state->Set("coverage_tiles", coverage_tiles.release()); 1065 state->Set("coverage_tiles", coverage_tiles.release());
1062 } 1066 }
1063 1067
1064 size_t PictureLayerImpl::GPUMemoryUsageInBytes() const { 1068 size_t PictureLayerImpl::GPUMemoryUsageInBytes() const {
1065 return tilings_->GPUMemoryUsageInBytes(); 1069 return tilings_->GPUMemoryUsageInBytes();
1066 } 1070 }
1067 1071
1068 } // namespace cc 1072 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698