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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/compositing/PropertyTreeManager.cpp

Issue 2651093003: Make scroll translation transform nodes reference scroll nodes (Closed)
Patch Set: Add note about scroll tree differences Created 3 years, 10 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "platform/graphics/compositing/PropertyTreeManager.h" 5 #include "platform/graphics/compositing/PropertyTreeManager.h"
6 6
7 #include "cc/layers/layer.h" 7 #include "cc/layers/layer.h"
8 #include "cc/trees/clip_node.h" 8 #include "cc/trees/clip_node.h"
9 #include "cc/trees/effect_node.h" 9 #include "cc/trees/effect_node.h"
10 #include "cc/trees/property_tree.h" 10 #include "cc/trees/property_tree.h"
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 CompositorElementId compositorElementId = 190 CompositorElementId compositorElementId =
191 transformNode->compositorElementId(); 191 transformNode->compositorElementId();
192 if (compositorElementId) { 192 if (compositorElementId) {
193 m_propertyTrees.element_id_to_transform_node_index[compositorElementId] = 193 m_propertyTrees.element_id_to_transform_node_index[compositorElementId] =
194 id; 194 id;
195 } 195 }
196 196
197 auto result = m_transformNodeMap.set(transformNode, id); 197 auto result = m_transformNodeMap.set(transformNode, id);
198 DCHECK(result.isNewEntry); 198 DCHECK(result.isNewEntry);
199 transformTree().set_needs_update(true); 199 transformTree().set_needs_update(true);
200
201 if (transformNode->scrollNode())
202 updateScrollAndScrollTranslationNodes(transformNode);
203
200 return id; 204 return id;
201 } 205 }
202 206
203 int PropertyTreeManager::ensureCompositorClipNode( 207 int PropertyTreeManager::ensureCompositorClipNode(
204 const ClipPaintPropertyNode* clipNode) { 208 const ClipPaintPropertyNode* clipNode) {
205 DCHECK(clipNode); 209 DCHECK(clipNode);
206 // TODO(crbug.com/645615): Remove the failsafe here. 210 // TODO(crbug.com/645615): Remove the failsafe here.
207 if (!clipNode) 211 if (!clipNode)
208 return kSecondaryRootNodeId; 212 return kSecondaryRootNodeId;
209 213
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 compositorNode.scrollable = true; 271 compositorNode.scrollable = true;
268 272
269 compositorNode.scroll_clip_layer_bounds.SetSize(scrollNode->clip().width(), 273 compositorNode.scroll_clip_layer_bounds.SetSize(scrollNode->clip().width(),
270 scrollNode->clip().height()); 274 scrollNode->clip().height());
271 compositorNode.bounds.SetSize(scrollNode->bounds().width(), 275 compositorNode.bounds.SetSize(scrollNode->bounds().width(),
272 scrollNode->bounds().height()); 276 scrollNode->bounds().height());
273 compositorNode.user_scrollable_horizontal = 277 compositorNode.user_scrollable_horizontal =
274 scrollNode->userScrollableHorizontal(); 278 scrollNode->userScrollableHorizontal();
275 compositorNode.user_scrollable_vertical = 279 compositorNode.user_scrollable_vertical =
276 scrollNode->userScrollableVertical(); 280 scrollNode->userScrollableVertical();
277 compositorNode.transform_id =
278 ensureCompositorTransformNode(scrollNode->scrollOffsetTranslation());
279 compositorNode.main_thread_scrolling_reasons = 281 compositorNode.main_thread_scrolling_reasons =
280 scrollNode->mainThreadScrollingReasons(); 282 scrollNode->mainThreadScrollingReasons();
281 CompositorElementId compositorElementId = scrollNode->compositorElementId();
282 if (compositorElementId) {
283 compositorNode.element_id = compositorElementId;
284 m_propertyTrees.element_id_to_scroll_node_index[compositorElementId] = id;
285 }
286 283
287 auto result = m_scrollNodeMap.set(scrollNode, id); 284 auto result = m_scrollNodeMap.set(scrollNode, id);
288 DCHECK(result.isNewEntry); 285 DCHECK(result.isNewEntry);
289 scrollTree().set_needs_update(true); 286 scrollTree().set_needs_update(true);
290 287
291 return id; 288 return id;
292 } 289 }
293 290
294 void PropertyTreeManager::updateScrollOffset( 291 void PropertyTreeManager::updateScrollAndScrollTranslationNodes(
295 const ScrollPaintPropertyNode* scrollNode) { 292 const TransformPaintPropertyNode* scrollOffsetNode) {
296 int scrollNodeId = ensureCompositorScrollNode(scrollNode); 293 DCHECK(scrollOffsetNode->scrollNode());
297 cc::ScrollNode& compositorScrollNode = *scrollTree().Node(scrollNodeId); 294 int scrollNodeId = ensureCompositorScrollNode(scrollOffsetNode->scrollNode());
298 cc::TransformNode& compositorTransformNode = 295 auto& compositorScrollNode = *scrollTree().Node(scrollNodeId);
299 *transformTree().Node(compositorScrollNode.transform_id); 296 int transformNodeId = ensureCompositorTransformNode(scrollOffsetNode);
297 auto& compositorTransformNode = *transformTree().Node(transformNodeId);
298
299 auto compositorElementId = scrollOffsetNode->compositorElementId();
300 if (compositorElementId) {
301 compositorScrollNode.element_id = compositorElementId;
302 m_propertyTrees.element_id_to_scroll_node_index[compositorElementId] =
303 scrollNodeId;
304 }
305
306 compositorScrollNode.transform_id = transformNodeId;
300 307
301 // Blink creates a 2d transform node just for scroll offset whereas cc's 308 // Blink creates a 2d transform node just for scroll offset whereas cc's
302 // transform node has a special scroll offset field. To handle this we adjust 309 // transform node has a special scroll offset field. To handle this we adjust
303 // cc's transform node to remove the 2d scroll translation and instead set the 310 // cc's transform node to remove the 2d scroll translation and instead set the
304 // scroll_offset field. 311 // scroll_offset field.
305 auto* scrollOffsetTransform = scrollNode->scrollOffsetTranslation(); 312 auto scrollOffsetSize = scrollOffsetNode->matrix().to2DTranslation();
306 auto scrollOffsetSize = scrollOffsetTransform->matrix().to2DTranslation();
307 auto scrollOffset = 313 auto scrollOffset =
308 gfx::ScrollOffset(-scrollOffsetSize.width(), -scrollOffsetSize.height()); 314 gfx::ScrollOffset(-scrollOffsetSize.width(), -scrollOffsetSize.height());
309 DCHECK(compositorTransformNode.local.IsIdentityOr2DTranslation()); 315 DCHECK(compositorTransformNode.local.IsIdentityOr2DTranslation());
310 compositorTransformNode.scroll_offset = scrollOffset; 316 compositorTransformNode.scroll_offset = scrollOffset;
311 compositorTransformNode.local.MakeIdentity(); 317 compositorTransformNode.local.MakeIdentity();
312 compositorTransformNode.scrolls = true; 318 compositorTransformNode.scrolls = true;
313 transformTree().set_needs_update(true); 319 transformTree().set_needs_update(true);
314 // TODO(pdr): The scroll tree's scroll offset will need to be set here. 320 // TODO(pdr): The scroll tree's scroll offset will need to be set here.
315 } 321 }
316 322
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 m_effectStack.push_back(BlinkEffectAndCcIdPair{nextEffect, effectNode.id}); 410 m_effectStack.push_back(BlinkEffectAndCcIdPair{nextEffect, effectNode.id});
405 411
406 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber); 412 dummyLayer->set_property_tree_sequence_number(kPropertyTreeSequenceNumber);
407 dummyLayer->SetTransformTreeIndex(kSecondaryRootNodeId); 413 dummyLayer->SetTransformTreeIndex(kSecondaryRootNodeId);
408 dummyLayer->SetClipTreeIndex(outputClipId); 414 dummyLayer->SetClipTreeIndex(outputClipId);
409 dummyLayer->SetEffectTreeIndex(effectNode.id); 415 dummyLayer->SetEffectTreeIndex(effectNode.id);
410 dummyLayer->SetScrollTreeIndex(kRealRootNodeId); 416 dummyLayer->SetScrollTreeIndex(kRealRootNodeId);
411 } 417 }
412 418
413 } // namespace blink 419 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698