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

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

Issue 2614093002: Combine LayoutObject::previousPaintOffset and paintOffset in paint properties (Closed)
Patch Set: - 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/dom/DOMNodeIds.h"
8 #include "core/frame/FrameView.h" 8 #include "core/frame/FrameView.h"
9 #include "core/frame/LocalFrame.h" 9 #include "core/frame/LocalFrame.h"
10 #include "core/frame/Settings.h" 10 #include "core/frame/Settings.h"
(...skipping 551 matching lines...) Expand 10 before | Expand all | Expand 10 after
562 if (properties && properties->cssClip()) 562 if (properties && properties->cssClip())
563 context.current.clip = properties->cssClip(); 563 context.current.clip = properties->cssClip();
564 } 564 }
565 565
566 void PaintPropertyTreeBuilder::updateLocalBorderBoxContext( 566 void PaintPropertyTreeBuilder::updateLocalBorderBoxContext(
567 const LayoutObject& object, 567 const LayoutObject& object,
568 PaintPropertyTreeBuilderContext& context) { 568 PaintPropertyTreeBuilderContext& context) {
569 if (!object.needsPaintPropertyUpdate() && !context.forceSubtreeUpdate) 569 if (!object.needsPaintPropertyUpdate() && !context.forceSubtreeUpdate)
570 return; 570 return;
571 571
572 object.getMutableForPainting().setPaintOffset(context.current.paintOffset);
573
572 // Avoid adding an ObjectPaintProperties for non-boxes to save memory, since 574 // Avoid adding an ObjectPaintProperties for non-boxes to save memory, since
573 // we don't need them at the moment. 575 // we don't need them at the moment.
574 if (!object.isBox() && !object.hasLayer()) { 576 if (!object.isBox() && !object.hasLayer()) {
575 if (auto* properties = object.getMutableForPainting().paintProperties()) 577 if (auto* properties = object.getMutableForPainting().paintProperties())
576 properties->clearLocalBorderBoxProperties(); 578 properties->clearLocalBorderBoxProperties();
577 } else { 579 } else {
578 auto& properties = object.getMutableForPainting().ensurePaintProperties(); 580 auto& properties = object.getMutableForPainting().ensurePaintProperties();
579 properties.updateLocalBorderBoxProperties( 581 properties.updateLocalBorderBoxProperties(
580 context.current.paintOffset, context.current.transform, 582 context.current.transform, context.current.clip, context.currentEffect,
581 context.current.clip, context.currentEffect, context.current.scroll); 583 context.current.scroll);
582 } 584 }
583 } 585 }
584 586
585 // TODO(trchen): Remove this once we bake the paint offset into frameRect. 587 // TODO(trchen): Remove this once we bake the paint offset into frameRect.
586 void PaintPropertyTreeBuilder::updateScrollbarPaintOffset( 588 void PaintPropertyTreeBuilder::updateScrollbarPaintOffset(
587 const LayoutObject& object, 589 const LayoutObject& object,
588 PaintPropertyTreeBuilderContext& context) { 590 PaintPropertyTreeBuilderContext& context) {
589 if (!object.needsPaintPropertyUpdate() && !context.forceSubtreeUpdate) 591 if (!object.needsPaintPropertyUpdate() && !context.forceSubtreeUpdate)
590 return; 592 return;
591 593
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
873 // tree-walk order of "columns" -> spanner placeholder -> spanner -> absolute. 875 // tree-walk order of "columns" -> spanner placeholder -> spanner -> absolute.
874 // Here we rebuild a ContainingBlockContext based on the properties of 876 // Here we rebuild a ContainingBlockContext based on the properties of
875 // "relative" for "absolute". 877 // "relative" for "absolute".
876 static void overrideContainingBlockContextFromRealContainingBlock( 878 static void overrideContainingBlockContextFromRealContainingBlock(
877 const LayoutBlock& containingBlock, 879 const LayoutBlock& containingBlock,
878 PaintPropertyTreeBuilderContext::ContainingBlockContext& context) { 880 PaintPropertyTreeBuilderContext::ContainingBlockContext& context) {
879 const auto* properties = 881 const auto* properties =
880 containingBlock.paintProperties()->localBorderBoxProperties(); 882 containingBlock.paintProperties()->localBorderBoxProperties();
881 DCHECK(properties); 883 DCHECK(properties);
882 884
883 context.transform = properties->propertyTreeState.transform(); 885 context.transform = properties->transform();
884 context.paintOffset = properties->paintOffset; 886 context.paintOffset = containingBlock.paintOffset();
885 context.shouldFlattenInheritedTransform = 887 context.shouldFlattenInheritedTransform =
886 context.transform && context.transform->flattensInheritedTransform(); 888 context.transform && context.transform->flattensInheritedTransform();
887 context.renderingContextId = 889 context.renderingContextId =
888 context.transform ? context.transform->renderingContextId() : 0; 890 context.transform ? context.transform->renderingContextId() : 0;
889 context.clip = properties->propertyTreeState.clip(); 891 context.clip = properties->clip();
890 context.scroll = properties->propertyTreeState.scroll(); 892 context.scroll = properties->scroll();
891 } 893 }
892 894
893 void PaintPropertyTreeBuilder::updateContextForBoxPosition( 895 void PaintPropertyTreeBuilder::updateContextForBoxPosition(
894 const LayoutObject& object, 896 const LayoutObject& object,
895 PaintPropertyTreeBuilderContext& context) { 897 PaintPropertyTreeBuilderContext& context) {
896 if (!object.isBoxModelObject()) 898 if (!object.isBoxModelObject())
897 return; 899 return;
898 900
899 const LayoutBoxModelObject& boxModelObject = toLayoutBoxModelObject(object); 901 const LayoutBoxModelObject& boxModelObject = toLayoutBoxModelObject(object);
900 switch (object.styleRef().position()) { 902 switch (object.styleRef().position()) {
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
966 if (boxModelObject.isTableCell()) { 968 if (boxModelObject.isTableCell()) {
967 LayoutObject* parentRow = boxModelObject.parent(); 969 LayoutObject* parentRow = boxModelObject.parent();
968 DCHECK(parentRow && parentRow->isTableRow()); 970 DCHECK(parentRow && parentRow->isTableRow());
969 context.current.paintOffset.moveBy( 971 context.current.paintOffset.moveBy(
970 -toLayoutBox(parentRow)->physicalLocation()); 972 -toLayoutBox(parentRow)->physicalLocation());
971 } 973 }
972 } 974 }
973 975
974 // Many paint properties depend on paint offset so we force an update of 976 // Many paint properties depend on paint offset so we force an update of
975 // the entire subtree on paint offset changes. 977 // the entire subtree on paint offset changes.
976 if (object.previousPaintOffset() != context.current.paintOffset) 978 if (object.paintOffset() != context.current.paintOffset)
977 context.forceSubtreeUpdate = true; 979 context.forceSubtreeUpdate = true;
978 } 980 }
979 981
980 void PaintPropertyTreeBuilder::updatePropertiesForSelf( 982 void PaintPropertyTreeBuilder::updatePropertiesForSelf(
981 const LayoutObject& object, 983 const LayoutObject& object,
982 PaintPropertyTreeBuilderContext& context) { 984 PaintPropertyTreeBuilderContext& context) {
983 if (!object.isBoxModelObject() && !object.isSVG()) 985 if (!object.isBoxModelObject() && !object.isSVG()) {
986 object.getMutableForPainting().setPaintOffset(context.current.paintOffset);
pdr. 2017/01/06 18:27:42 Do we need to check that an update is needed too?
Xianzhu 2017/01/06 19:24:18 Done.
984 return; 987 return;
988 }
985 989
986 #if DCHECK_IS_ON() 990 #if DCHECK_IS_ON()
987 FindObjectPropertiesNeedingUpdateScope checkNeedsUpdateScope(object, context); 991 FindObjectPropertiesNeedingUpdateScope checkNeedsUpdateScope(object, context);
988 #endif 992 #endif
989 993
990 updatePaintOffsetTranslation(object, context); 994 updatePaintOffsetTranslation(object, context);
991 updateTransform(object, context); 995 updateTransform(object, context);
992 updateEffect(object, context); 996 updateEffect(object, context);
993 updateCssClip(object, context); 997 updateCssClip(object, context);
994 updateLocalBorderBoxContext(object, context); 998 updateLocalBorderBoxContext(object, context);
(...skipping 13 matching lines...) Expand all
1008 updateOverflowClip(object, context); 1012 updateOverflowClip(object, context);
1009 updatePerspective(object, context); 1013 updatePerspective(object, context);
1010 updateSvgLocalToBorderBoxTransform(object, context); 1014 updateSvgLocalToBorderBoxTransform(object, context);
1011 updateScrollAndScrollTranslation(object, context); 1015 updateScrollAndScrollTranslation(object, context);
1012 updateOutOfFlowContext(object, context); 1016 updateOutOfFlowContext(object, context);
1013 1017
1014 context.forceSubtreeUpdate |= object.subtreeNeedsPaintPropertyUpdate(); 1018 context.forceSubtreeUpdate |= object.subtreeNeedsPaintPropertyUpdate();
1015 } 1019 }
1016 1020
1017 } // namespace blink 1021 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698