Chromium Code Reviews| 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/picture_layer_tiling.h" | 5 #include "cc/picture_layer_tiling.h" |
| 6 | 6 |
| 7 #include "cc/math_util.h" | 7 #include "cc/math_util.h" |
| 8 #include "ui/gfx/rect_conversions.h" | 8 #include "ui/gfx/rect_conversions.h" |
| 9 #include "ui/gfx/size_conversions.h" | 9 #include "ui/gfx/size_conversions.h" |
| 10 | 10 |
| (...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 274 float last_layer_contents_scale, | 274 float last_layer_contents_scale, |
| 275 float current_layer_contents_scale, | 275 float current_layer_contents_scale, |
| 276 const gfx::Transform& last_screen_transform, | 276 const gfx::Transform& last_screen_transform, |
| 277 const gfx::Transform& current_screen_transform, | 277 const gfx::Transform& current_screen_transform, |
| 278 double time_delta) { | 278 double time_delta) { |
| 279 gfx::Rect content_rect = ContentRect(); | 279 gfx::Rect content_rect = ContentRect(); |
| 280 if (content_rect.IsEmpty()) | 280 if (content_rect.IsEmpty()) |
| 281 return; | 281 return; |
| 282 | 282 |
| 283 gfx::Rect view_rect(gfx::Point(), device_viewport); | 283 gfx::Rect view_rect(gfx::Point(), device_viewport); |
| 284 int right = tiling_data_.TileXIndexFromSrcCoord(content_rect.width() - 1); | 284 float current_scale = current_layer_contents_scale / contents_scale_; |
| 285 int bottom = tiling_data_.TileYIndexFromSrcCoord(content_rect.height() - 1); | 285 float last_scale = last_layer_contents_scale / contents_scale_; |
| 286 | 286 |
| 287 for (TileMap::const_iterator it = tiles_.begin(); it != tiles_.end(); ++it) { | 287 if (last_screen_transform.IsIdentityOrTranslation() && |
| 288 TileMapKey key = it->first; | 288 current_screen_transform.IsIdentityOrTranslation()) |
| 289 TilePriority priority; | 289 { |
| 290 priority.resolution = resolution_; | 290 gfx::Vector2dF current_offset( |
| 291 if (key.first > right || key.second > bottom) { | 291 current_screen_transform.matrix().get(0, 3), |
| 292 priority.distance_to_visible_in_pixels = std::numeric_limits<int>::max(); | 292 current_screen_transform.matrix().get(1, 3)); |
| 293 gfx::Vector2dF last_offset( | |
| 294 last_screen_transform.matrix().get(0, 3), | |
| 295 last_screen_transform.matrix().get(1, 3)); | |
| 296 | |
| 297 for (TileMap::const_iterator it = tiles_.begin(); | |
|
enne (OOO)
2013/01/28 22:55:10
This was already applied in your last UpdateTilePr
| |
| 298 it != tiles_.end(); ++it) { | |
| 299 TileMapKey key = it->first; | |
| 300 TilePriority priority; | |
| 301 priority.resolution = resolution_; | |
| 302 | |
| 303 gfx::Rect tile_bound = tiling_data_.TileBounds(key.first, key.second); | |
| 304 gfx::RectF current_screen_rect = gfx::ScaleRect( | |
| 305 tile_bound, | |
| 306 current_scale, | |
| 307 current_scale) + current_offset; | |
| 308 gfx::RectF last_screen_rect = gfx::ScaleRect( | |
| 309 tile_bound, | |
| 310 last_scale, | |
| 311 last_scale) + last_offset; | |
| 312 | |
| 313 priority.distance_to_visible_in_pixels = | |
| 314 TilePriority::manhattanDistance(current_screen_rect, view_rect); | |
| 315 | |
| 293 priority.time_to_visible_in_seconds = | 316 priority.time_to_visible_in_seconds = |
| 294 TilePriority::kMaxTimeToVisibleInSeconds; | 317 TilePriority::TimeForBoundsToIntersect( |
| 318 last_screen_rect, current_screen_rect, time_delta, view_rect); | |
| 295 it->second->set_priority(tree, priority); | 319 it->second->set_priority(tree, priority); |
| 296 continue; | |
| 297 } | 320 } |
| 321 } | |
| 322 else | |
| 323 { | |
| 324 for (TileMap::const_iterator it = tiles_.begin(); | |
| 325 it != tiles_.end(); ++it) { | |
| 326 TileMapKey key = it->first; | |
| 327 TilePriority priority; | |
| 328 priority.resolution = resolution_; | |
| 298 | 329 |
| 299 gfx::Rect tile_bound = tiling_data_.TileBounds(key.first, key.second); | 330 gfx::Rect tile_bound = tiling_data_.TileBounds(key.first, key.second); |
| 300 gfx::RectF current_layer_content_rect = gfx::ScaleRect( | 331 gfx::RectF current_layer_content_rect = gfx::ScaleRect( |
| 301 tile_bound, | 332 tile_bound, |
| 302 current_layer_contents_scale / contents_scale_, | 333 current_scale, |
| 303 current_layer_contents_scale / contents_scale_); | 334 current_scale); |
| 304 gfx::RectF current_screen_rect = MathUtil::mapClippedRect( | 335 gfx::RectF current_screen_rect = MathUtil::mapClippedRect( |
| 305 current_screen_transform, current_layer_content_rect); | 336 current_screen_transform, current_layer_content_rect); |
| 306 gfx::RectF last_layer_content_rect = gfx::ScaleRect( | 337 gfx::RectF last_layer_content_rect = gfx::ScaleRect( |
| 307 tile_bound, | 338 tile_bound, |
| 308 last_layer_contents_scale / contents_scale_, | 339 last_scale, |
| 309 last_layer_contents_scale / contents_scale_); | 340 last_scale); |
| 310 gfx::RectF last_screen_rect = MathUtil::mapClippedRect( | 341 gfx::RectF last_screen_rect = MathUtil::mapClippedRect( |
| 311 last_screen_transform, last_layer_content_rect); | 342 last_screen_transform, last_layer_content_rect); |
| 312 | 343 |
| 313 priority.time_to_visible_in_seconds = | 344 priority.time_to_visible_in_seconds = |
| 314 TilePriority::TimeForBoundsToIntersect( | 345 TilePriority::TimeForBoundsToIntersect( |
| 315 last_screen_rect, current_screen_rect, time_delta, view_rect); | 346 last_screen_rect, current_screen_rect, time_delta, view_rect); |
| 316 | 347 |
| 317 priority.distance_to_visible_in_pixels = | 348 priority.distance_to_visible_in_pixels = |
| 318 TilePriority::manhattanDistance(current_screen_rect, view_rect); | 349 TilePriority::manhattanDistance(current_screen_rect, view_rect); |
| 319 it->second->set_priority(tree, priority); | 350 it->second->set_priority(tree, priority); |
| 351 } | |
| 320 } | 352 } |
| 321 } | 353 } |
| 322 | 354 |
| 323 void PictureLayerTiling::DidBecomeActive() { | 355 void PictureLayerTiling::DidBecomeActive() { |
| 324 for (TileMap::const_iterator it = tiles_.begin(); it != tiles_.end(); ++it) { | 356 for (TileMap::const_iterator it = tiles_.begin(); it != tiles_.end(); ++it) { |
| 325 it->second->set_priority(ACTIVE_TREE, it->second->priority(PENDING_TREE)); | 357 it->second->set_priority(ACTIVE_TREE, it->second->priority(PENDING_TREE)); |
| 326 it->second->set_priority(PENDING_TREE, TilePriority()); | 358 it->second->set_priority(PENDING_TREE, TilePriority()); |
| 327 | 359 |
| 328 // Tile holds a ref onto a picture pile. If the tile never gets invalidated | 360 // Tile holds a ref onto a picture pile. If the tile never gets invalidated |
| 329 // and recreated, then that picture pile ref could exist indefinitely. To | 361 // and recreated, then that picture pile ref could exist indefinitely. To |
| 330 // prevent this, ask the client to update the pile to its own ref. This | 362 // prevent this, ask the client to update the pile to its own ref. This |
| 331 // will cause PicturePileImpls and their clones to get deleted once the | 363 // will cause PicturePileImpls and their clones to get deleted once the |
| 332 // corresponding PictureLayerImpl and any in flight raster jobs go out of | 364 // corresponding PictureLayerImpl and any in flight raster jobs go out of |
| 333 // scope. | 365 // scope. |
| 334 client_->UpdatePile(it->second); | 366 client_->UpdatePile(it->second); |
| 335 } | 367 } |
| 336 } | 368 } |
| 337 | 369 |
| 338 } // namespace cc | 370 } // namespace cc |
| OLD | NEW |