Chromium Code Reviews| Index: cc/trees/layer_tree_host_common.cc |
| diff --git a/cc/trees/layer_tree_host_common.cc b/cc/trees/layer_tree_host_common.cc |
| index 01875e93ba0e3b1c44aef386b9839e82749db29b..45cd672912331e698d7a5b5266e453b9c1ba548a 100644 |
| --- a/cc/trees/layer_tree_host_common.cc |
| +++ b/cc/trees/layer_tree_host_common.cc |
| @@ -619,10 +619,8 @@ static float TranslationFromActiveTreeLayerScreenSpaceTransform( |
| // A layer jitters if its screen space transform is same on two successive |
| // commits, but has changed in between the commits. CalculateFrameJitter |
| -// computes the jitter in the entire frame. |
| +// computes the jitter for the layer. |
| int LayerTreeHostCommon::CalculateFrameJitter(LayerImpl* layer) { |
|
ajuma
2016/03/29 14:24:02
"CalculateLayerJitter" or "CalculateJitter"?
jaydasika
2016/03/29 15:57:24
Done.
|
| - if (!layer) |
| - return 0.f; |
| float jitter = 0.f; |
| layer->performance_properties().translation_from_last_frame = 0.f; |
| layer->performance_properties().last_commit_screen_space_transform = |
| @@ -651,15 +649,6 @@ int LayerTreeHostCommon::CalculateFrameJitter(LayerImpl* layer) { |
| } |
| } |
| } |
| - // Descendants of jittering layer will not contribute to unique jitter. |
| - if (jitter > 0.f) |
| - return jitter; |
| - |
| - for (size_t i = 0; i < layer->children().size(); ++i) { |
| - LayerImpl* child_layer = |
| - LayerTreeHostCommon::get_layer_as_raw_ptr(layer->children(), i); |
| - jitter += CalculateFrameJitter(child_layer); |
| - } |
| return jitter; |
| } |
| @@ -1084,9 +1073,22 @@ void LayerTreeHostCommon::CalculateDrawProperties( |
| layer_tree_impl->FindActiveTreeLayerById(inputs->root_layer->id()); |
| float jitter = 0.f; |
| if (active_tree_root) { |
| - LayerImpl* last_scrolled_layer = layer_tree_impl->LayerById( |
| - active_tree_root->layer_tree_impl()->LastScrolledLayerId()); |
| - jitter = CalculateFrameJitter(last_scrolled_layer); |
| + std::unordered_set<int> jitter_nodes; |
| + const int last_scrolled_scroll_node_id = |
| + layer_tree_impl->LastScrolledScrollNodeId(); |
| + for (auto* layer : *layer_tree_impl) { |
| + // Layers that have the same scroll tree index jitter together. So, it |
| + // is enough to calculate jitter on one of these layers. |
|
ajuma
2016/03/29 14:24:02
Please clarify this comment to say that once we've
jaydasika
2016/03/29 15:57:24
Done.
|
| + int scroll_tree_index = layer->scroll_tree_index(); |
| + if (last_scrolled_scroll_node_id <= scroll_tree_index && |
| + jitter_nodes.find(scroll_tree_index) == jitter_nodes.end()) { |
| + float layer_jitter = CalculateFrameJitter(layer); |
| + if (layer_jitter > 0.f) { |
| + jitter_nodes.insert(layer->scroll_tree_index()); |
| + jitter += layer_jitter; |
| + } |
| + } |
| + } |
| } |
| TRACE_EVENT_ASYNC_BEGIN1( |
| "cdp.perf", "jitter", |