Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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/trees/layer_tree_host_common.h" | 5 #include "cc/trees/layer_tree_host_common.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/debug/trace_event.h" | 9 #include "base/debug/trace_event.h" |
| 10 #include "cc/base/math_util.h" | 10 #include "cc/base/math_util.h" |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 245 // If the opacity is being animated then the opacity on the main thread is | 245 // If the opacity is being animated then the opacity on the main thread is |
| 246 // unreliable (since the impl thread may be using a different opacity), so it | 246 // unreliable (since the impl thread may be using a different opacity), so it |
| 247 // should not be trusted. | 247 // should not be trusted. |
| 248 // In particular, it should not cause the subtree to be skipped. | 248 // In particular, it should not cause the subtree to be skipped. |
| 249 // Similarly, for layers that might animate opacity using an impl-only | 249 // Similarly, for layers that might animate opacity using an impl-only |
| 250 // animation, their subtree should also not be skipped. | 250 // animation, their subtree should also not be skipped. |
| 251 return !layer->opacity() && !layer->OpacityIsAnimating() && | 251 return !layer->opacity() && !layer->OpacityIsAnimating() && |
| 252 !layer->OpacityCanAnimateOnImplThread(); | 252 !layer->OpacityCanAnimateOnImplThread(); |
| 253 } | 253 } |
| 254 | 254 |
| 255 static inline bool NeedsFirstTimeUpdateTilePrioritiesForLayer( | |
| 256 LayerImpl* layer) { | |
| 257 return layer->NeedsFirstTimeUpdateTilePriorities(); | |
| 258 } | |
| 259 | |
| 260 static inline bool NeedsFirstTimeUpdateTilePrioritiesForLayer(Layer* layer) { | |
| 261 return false; | |
| 262 } | |
| 263 | |
| 255 // Called on each layer that could be drawn after all information from | 264 // Called on each layer that could be drawn after all information from |
| 256 // CalcDrawProperties has been updated on that layer. May have some false | 265 // CalcDrawProperties has been updated on that layer. May have some false |
| 257 // positives (e.g. layers get this called on them but don't actually get drawn). | 266 // positives (e.g. layers get this called on them but don't actually get drawn). |
| 258 static inline void UpdateTilePrioritiesForLayer(LayerImpl* layer) { | 267 static inline void UpdateTilePrioritiesForLayer(LayerImpl* layer) { |
| 259 layer->UpdateTilePriorities(); | 268 layer->UpdateTilePriorities(); |
| 260 | 269 |
| 261 // Mask layers don't get this call, so explicitly update them so they can | 270 // Mask layers don't get this call, so explicitly update them so they can |
| 262 // kick off tile rasterization. | 271 // kick off tile rasterization. |
| 263 if (layer->mask_layer()) | 272 if (layer->mask_layer()) |
| 264 layer->mask_layer()->UpdateTilePriorities(); | 273 layer->mask_layer()->UpdateTilePriorities(); |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 405 // Note: Again, Concat is used to conver the result coordinate space from | 414 // Note: Again, Concat is used to conver the result coordinate space from |
| 406 // the container render surface to the container layer. | 415 // the container render surface to the container layer. |
| 407 target_surface_space_to_container_layer_space.ConcatTransform( | 416 target_surface_space_to_container_layer_space.ConcatTransform( |
| 408 container_target_surface_space_to_container_layer_space); | 417 container_target_surface_space_to_container_layer_space); |
| 409 } | 418 } |
| 410 } | 419 } |
| 411 | 420 |
| 412 // Apply step 3 | 421 // Apply step 3 |
| 413 gfx::Transform container_layer_space_to_target_surface_space; | 422 gfx::Transform container_layer_space_to_target_surface_space; |
| 414 if (target_surface_space_to_container_layer_space.GetInverse( | 423 if (target_surface_space_to_container_layer_space.GetInverse( |
| 415 &container_layer_space_to_target_surface_space)) | 424 &container_layer_space_to_target_surface_space)) { |
| 416 result_transform.PreconcatTransform( | 425 result_transform.PreconcatTransform( |
| 417 container_layer_space_to_target_surface_space); | 426 container_layer_space_to_target_surface_space); |
| 418 else { | 427 } else { |
| 419 // FIXME: A non-invertible matrix could still make meaningful projection. | 428 // FIXME: A non-invertible matrix could still make meaningful projection. |
| 420 // For example ScaleZ(0) is non-invertible but the layer is still visible. | 429 // For example ScaleZ(0) is non-invertible but the layer is still visible. |
| 421 return gfx::Transform(); | 430 return gfx::Transform(); |
| 422 } | 431 } |
| 423 | 432 |
| 424 // Apply step 2 | 433 // Apply step 2 |
| 425 result_transform.Translate(position_offset.x(), position_offset.y()); | 434 result_transform.Translate(position_offset.x(), position_offset.y()); |
| 426 | 435 |
| 427 // Apply step 1 | 436 // Apply step 1 |
| 428 result_transform.PreconcatTransform( | 437 result_transform.PreconcatTransform( |
| 429 target_surface_space_to_container_layer_space); | 438 target_surface_space_to_container_layer_space); |
| 430 | 439 |
| 431 return result_transform; | 440 return result_transform; |
| 432 } | 441 } |
| 433 | 442 |
| 434 void ApplyPositionAdjustment( | 443 void ApplyPositionAdjustment( |
| 435 Layer* layer, | 444 Layer* layer, |
| 436 Layer* container, | 445 Layer* container, |
| 437 const gfx::Transform& scroll_compensation, | 446 const gfx::Transform& scroll_compensation, |
| 438 gfx::Transform* combined_transform) { } | 447 gfx::Transform* combined_transform) { } |
| 439 void ApplyPositionAdjustment( | 448 void ApplyPositionAdjustment( |
| 440 LayerImpl* layer, | 449 LayerImpl* layer, |
| 441 LayerImpl* container, | 450 LayerImpl* container, |
| 442 const gfx::Transform& scroll_compensation, | 451 const gfx::Transform& scroll_compensation, |
| 443 gfx::Transform* combined_transform) | 452 gfx::Transform* combined_transform) { |
| 444 { | |
| 445 if (!layer->position_constraint().is_fixed_position()) | 453 if (!layer->position_constraint().is_fixed_position()) |
| 446 return; | 454 return; |
| 447 | 455 |
| 448 // Special case: this layer is a composited fixed-position layer; we need to | 456 // Special case: this layer is a composited fixed-position layer; we need to |
| 449 // explicitly compensate for all ancestors' nonzero scroll_deltas to keep | 457 // explicitly compensate for all ancestors' nonzero scroll_deltas to keep |
| 450 // this layer fixed correctly. | 458 // this layer fixed correctly. |
| 451 // Note carefully: this is Concat, not Preconcat | 459 // Note carefully: this is Concat, not Preconcat |
| 452 // (current_scroll_compensation * combined_transform). | 460 // (current_scroll_compensation * combined_transform). |
| 453 combined_transform->ConcatTransform(scroll_compensation); | 461 combined_transform->ConcatTransform(scroll_compensation); |
| 454 | 462 |
| (...skipping 929 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1384 // Compute the replica's "screen_space_transform" that maps from the | 1392 // Compute the replica's "screen_space_transform" that maps from the |
| 1385 // replica's origin space to the screen's origin space. | 1393 // replica's origin space to the screen's origin space. |
| 1386 gfx::Transform replica_screen_space_transform = | 1394 gfx::Transform replica_screen_space_transform = |
| 1387 layer->render_surface()->screen_space_transform() * | 1395 layer->render_surface()->screen_space_transform() * |
| 1388 surface_origin_to_replica_origin_transform; | 1396 surface_origin_to_replica_origin_transform; |
| 1389 render_surface->SetReplicaScreenSpaceTransform( | 1397 render_surface->SetReplicaScreenSpaceTransform( |
| 1390 replica_screen_space_transform); | 1398 replica_screen_space_transform); |
| 1391 } | 1399 } |
| 1392 } | 1400 } |
| 1393 | 1401 |
| 1394 if (update_tile_priorities) | 1402 if (update_tile_priorities || |
| 1403 NeedsFirstTimeUpdateTilePrioritiesForLayer(layer)) | |
|
enne (OOO)
2013/04/22 17:03:48
I'm a little ಠ_ಠ at adding yet another virtual fun
danakj
2013/04/22 18:37:30
I could certainly call the current function always
enne (OOO)
2013/04/22 18:44:13
You have LayerTreeImpl::frame_time_last_update_til
danakj
2013/04/22 18:59:38
Hm... right. Okay! Just using that now.
PTAL.
| |
| 1395 UpdateTilePrioritiesForLayer(layer); | 1404 UpdateTilePrioritiesForLayer(layer); |
| 1396 | 1405 |
| 1397 // If neither this layer nor any of its children were added, early out. | 1406 // If neither this layer nor any of its children were added, early out. |
| 1398 if (sorting_start_index == descendants.size()) | 1407 if (sorting_start_index == descendants.size()) |
| 1399 return; | 1408 return; |
| 1400 | 1409 |
| 1401 // If preserves-3d then sort all the descendants in 3D so that they can be | 1410 // If preserves-3d then sort all the descendants in 3D so that they can be |
| 1402 // drawn from back to front. If the preserves-3d property is also set on the | 1411 // drawn from back to front. If the preserves-3d property is also set on the |
| 1403 // parent then skip the sorting as the parent will sort all the descendants | 1412 // parent then skip the sorting as the parent will sort all the descendants |
| 1404 // anyway. | 1413 // anyway. |
| (...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1715 // At this point, we think the point does hit the touch event handler region | 1724 // At this point, we think the point does hit the touch event handler region |
| 1716 // on the layer, but we need to walk up the parents to ensure that the layer | 1725 // on the layer, but we need to walk up the parents to ensure that the layer |
| 1717 // was not clipped in such a way that the hit point actually should not hit | 1726 // was not clipped in such a way that the hit point actually should not hit |
| 1718 // the layer. | 1727 // the layer. |
| 1719 if (PointIsClippedBySurfaceOrClipRect(screen_space_point, layer_impl)) | 1728 if (PointIsClippedBySurfaceOrClipRect(screen_space_point, layer_impl)) |
| 1720 return false; | 1729 return false; |
| 1721 | 1730 |
| 1722 return true; | 1731 return true; |
| 1723 } | 1732 } |
| 1724 } // namespace cc | 1733 } // namespace cc |
| OLD | NEW |