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

Side by Side Diff: third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp

Issue 2608543002: Store compositor element id in paint properties for animated objects. (Closed)
Patch Set: Move element id to paint property nodes. Created 3 years, 11 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 "core/paint/PaintPropertyTreeBuilder.h" 5 #include "core/paint/PaintPropertyTreeBuilder.h"
6 6
7 #include "core/dom/DOMNodeIds.h"
7 #include "core/frame/FrameView.h" 8 #include "core/frame/FrameView.h"
8 #include "core/frame/LocalFrame.h" 9 #include "core/frame/LocalFrame.h"
9 #include "core/frame/Settings.h" 10 #include "core/frame/Settings.h"
10 #include "core/layout/LayoutInline.h" 11 #include "core/layout/LayoutInline.h"
11 #include "core/layout/LayoutView.h" 12 #include "core/layout/LayoutView.h"
12 #include "core/layout/compositing/CompositingReasonFinder.h" 13 #include "core/layout/compositing/CompositingReasonFinder.h"
13 #include "core/layout/svg/LayoutSVGRoot.h" 14 #include "core/layout/svg/LayoutSVGRoot.h"
14 #include "core/layout/svg/SVGLayoutSupport.h" 15 #include "core/layout/svg/SVGLayoutSupport.h"
15 #include "core/paint/FindPropertiesNeedingUpdate.h" 16 #include "core/paint/FindPropertiesNeedingUpdate.h"
16 #include "core/paint/ObjectPaintProperties.h" 17 #include "core/paint/ObjectPaintProperties.h"
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 369
369 // TODO(trchen): transform-style should only be respected if a 370 // TODO(trchen): transform-style should only be respected if a
370 // PaintLayer 371 // PaintLayer
371 // is created. 372 // is created.
372 // If a node with transform-style: preserve-3d does not exist in an 373 // If a node with transform-style: preserve-3d does not exist in an
373 // existing rendering context, it establishes a new one. 374 // existing rendering context, it establishes a new one.
374 unsigned renderingContextID = context.current.renderingContextID; 375 unsigned renderingContextID = context.current.renderingContextID;
375 if (style.preserves3D() && !renderingContextID) 376 if (style.preserves3D() && !renderingContextID)
376 renderingContextID = PtrHash<const LayoutObject>::hash(&object); 377 renderingContextID = PtrHash<const LayoutObject>::hash(&object);
377 378
379 CompositorElementId compositorElementId;
380 if (style.hasCurrentTransformAnimation()) {
wkorman 2016/12/29 20:22:54 To call out, I made a judgement call here (and sam
Xianzhu 2016/12/29 20:40:38 Is there any extra cost for a paint property node
wkorman 2016/12/29 20:59:15 Yes, we use DOMNodeIds::idForNode() which uses a W
381 updateCompositorElementId(object, compositorElementId);
382 }
383
378 auto& properties = 384 auto& properties =
379 object.getMutableForPainting().ensurePaintProperties(); 385 object.getMutableForPainting().ensurePaintProperties();
380 context.forceSubtreeUpdate |= properties.updateTransform( 386 context.forceSubtreeUpdate |= properties.updateTransform(
381 context.current.transform, matrix, transformOrigin(box), 387 context.current.transform, matrix, transformOrigin(box),
382 context.current.shouldFlattenInheritedTransform, renderingContextID, 388 context.current.shouldFlattenInheritedTransform, renderingContextID,
383 compositingReasons); 389 compositingReasons, compositorElementId);
384 hasTransform = true; 390 hasTransform = true;
385 } 391 }
386 } 392 }
387 if (!hasTransform) { 393 if (!hasTransform) {
388 if (auto* properties = object.getMutableForPainting().paintProperties()) 394 if (auto* properties = object.getMutableForPainting().paintProperties())
389 context.forceSubtreeUpdate |= properties->clearTransform(); 395 context.forceSubtreeUpdate |= properties->clearTransform();
390 } 396 }
391 } 397 }
392 398
393 const auto* properties = object.paintProperties(); 399 const auto* properties = object.paintProperties();
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 if (!filter.isEmpty()) { 483 if (!filter.isEmpty()) {
478 effectNodeNeeded = true; 484 effectNodeNeeded = true;
479 outputClip = context.current.clip; 485 outputClip = context.current.clip;
480 486
481 // TODO(trchen): A filter may contain spatial operations such that an 487 // TODO(trchen): A filter may contain spatial operations such that an
482 // output pixel may depend on an input pixel outside of the output clip. 488 // output pixel may depend on an input pixel outside of the output clip.
483 // We should generate a special clip node to represent this expansion. 489 // We should generate a special clip node to represent this expansion.
484 } 490 }
485 491
486 CompositingReasons compositingReasons = 492 CompositingReasons compositingReasons =
487 CompositingReasonFinder::requiresCompositingForEffectAnimation( 493 CompositingReasonFinder::requiresCompositingForEffectAnimation(style);
488 object.styleRef());
489 if (compositingReasons != CompositingReasonNone) 494 if (compositingReasons != CompositingReasonNone)
490 effectNodeNeeded = true; 495 effectNodeNeeded = true;
491 496
497 CompositorElementId compositorElementId;
498 if (style.hasCurrentOpacityAnimation() ||
499 style.hasCurrentFilterAnimation() ||
500 style.hasCurrentBackdropFilterAnimation()) {
501 updateCompositorElementId(object, compositorElementId);
502 }
503
492 if (effectNodeNeeded) { 504 if (effectNodeNeeded) {
493 auto& properties = object.getMutableForPainting().ensurePaintProperties(); 505 auto& properties = object.getMutableForPainting().ensurePaintProperties();
494 context.forceSubtreeUpdate |= properties.updateEffect( 506 context.forceSubtreeUpdate |= properties.updateEffect(
495 context.currentEffect, context.current.transform, outputClip, 507 context.currentEffect, context.current.transform, outputClip,
496 std::move(filter), opacity, blendMode, compositingReasons); 508 std::move(filter), opacity, blendMode, compositingReasons,
509 compositorElementId);
497 } else { 510 } else {
498 if (auto* properties = object.getMutableForPainting().paintProperties()) 511 if (auto* properties = object.getMutableForPainting().paintProperties())
499 context.forceSubtreeUpdate |= properties->clearEffect(); 512 context.forceSubtreeUpdate |= properties->clearEffect();
500 } 513 }
501 } 514 }
502 515
503 const auto* properties = object.paintProperties(); 516 const auto* properties = object.paintProperties();
504 if (properties && properties->effect()) { 517 if (properties && properties->effect()) {
505 context.currentEffect = properties->effect(); 518 context.currentEffect = properties->effect();
506 if (!properties->effect()->filter().isEmpty()) { 519 if (!properties->effect()->filter().isEmpty()) {
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after
828 return; 841 return;
829 } 842 }
830 } 843 }
831 844
832 if (object.needsPaintPropertyUpdate() || context.forceSubtreeUpdate) { 845 if (object.needsPaintPropertyUpdate() || context.forceSubtreeUpdate) {
833 if (auto* properties = object.getMutableForPainting().paintProperties()) 846 if (auto* properties = object.getMutableForPainting().paintProperties())
834 context.forceSubtreeUpdate |= properties->clearCssClipFixedPosition(); 847 context.forceSubtreeUpdate |= properties->clearCssClipFixedPosition();
835 } 848 }
836 } 849 }
837 850
851 void PaintPropertyTreeBuilder::updateCompositorElementId(
852 const LayoutObject& object,
853 CompositorElementId& compositorElementId) {
854 compositorElementId = createCompositorElementId(
855 DOMNodeIds::idForNode(object.node()), CompositorSubElementId::Primary);
856 }
857
838 // Override ContainingBlockContext based on the properties of a containing block 858 // Override ContainingBlockContext based on the properties of a containing block
839 // that was previously walked in a subtree other than the current subtree being 859 // that was previously walked in a subtree other than the current subtree being
840 // walked. Used for out-of-flow positioned descendants of multi-column spanner 860 // walked. Used for out-of-flow positioned descendants of multi-column spanner
841 // when the containing block is not in the normal tree walk order. 861 // when the containing block is not in the normal tree walk order.
842 // For example: 862 // For example:
843 // <div id="columns" style="columns: 2"> 863 // <div id="columns" style="columns: 2">
844 // <div id="relative" style="position: relative"> 864 // <div id="relative" style="position: relative">
845 // <div id="spanner" style="column-span: all"> 865 // <div id="spanner" style="column-span: all">
846 // <div id="absolute" style="position: absolute"></div> 866 // <div id="absolute" style="position: absolute"></div>
847 // </div> 867 // </div>
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
986 updateOverflowClip(object, context); 1006 updateOverflowClip(object, context);
987 updatePerspective(object, context); 1007 updatePerspective(object, context);
988 updateSvgLocalToBorderBoxTransform(object, context); 1008 updateSvgLocalToBorderBoxTransform(object, context);
989 updateScrollAndScrollTranslation(object, context); 1009 updateScrollAndScrollTranslation(object, context);
990 updateOutOfFlowContext(object, context); 1010 updateOutOfFlowContext(object, context);
991 1011
992 context.forceSubtreeUpdate |= object.subtreeNeedsPaintPropertyUpdate(); 1012 context.forceSubtreeUpdate |= object.subtreeNeedsPaintPropertyUpdate();
993 } 1013 }
994 1014
995 } // namespace blink 1015 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698