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

Side by Side Diff: Source/core/rendering/RenderObject.cpp

Issue 202683005: optimizing layout performance when only transform3d matrix changed by Base URL: http://src.chromium.org/blink/trunk/
Patch Set: Created 6 years, 9 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 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2000 Dirk Mueller (mueller@kde.org) 4 * (C) 2000 Dirk Mueller (mueller@kde.org)
5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) 5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserv ed. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserv ed.
7 * Copyright (C) 2009 Google Inc. All rights reserved. 7 * Copyright (C) 2009 Google Inc. All rights reserved.
8 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/) 8 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/)
9 * 9 *
10 * This library is free software; you can redistribute it and/or 10 * This library is free software; you can redistribute it and/or
(...skipping 1808 matching lines...) Expand 10 before | Expand all | Expand 10 after
1819 // FIXME: when transforms are taken into account for overflow, we will n eed to do a layout. 1819 // FIXME: when transforms are taken into account for overflow, we will n eed to do a layout.
1820 if (!isText() && (!hasLayer() || !toRenderLayerModelObject(this)->layer( )->hasDirectReasonsForCompositing())) { 1820 if (!isText() && (!hasLayer() || !toRenderLayerModelObject(this)->layer( )->hasDirectReasonsForCompositing())) {
1821 // We need to set at least SimplifiedLayout, but if PositionedMoveme ntOnly is already set 1821 // We need to set at least SimplifiedLayout, but if PositionedMoveme ntOnly is already set
1822 // then we actually need SimplifiedLayoutAndPositionedMovement. 1822 // then we actually need SimplifiedLayoutAndPositionedMovement.
1823 if (!hasLayer()) 1823 if (!hasLayer())
1824 diff = StyleDifferenceLayout; // FIXME: Do this for now since Si mplifiedLayout cannot handle updating floating objects lists. 1824 diff = StyleDifferenceLayout; // FIXME: Do this for now since Si mplifiedLayout cannot handle updating floating objects lists.
1825 else if (diff < StyleDifferenceLayoutPositionedMovementOnly) 1825 else if (diff < StyleDifferenceLayoutPositionedMovementOnly)
1826 diff = StyleDifferenceSimplifiedLayout; 1826 diff = StyleDifferenceSimplifiedLayout;
1827 else if (diff < StyleDifferenceSimplifiedLayout) 1827 else if (diff < StyleDifferenceSimplifiedLayout)
1828 diff = StyleDifferenceSimplifiedLayoutAndPositionedMovement; 1828 diff = StyleDifferenceSimplifiedLayoutAndPositionedMovement;
1829 } else if (diff < StyleDifferenceRecompositeLayer) 1829 } else if (diff < StyleDifferenceRecompositeLayer) {
1830 diff = StyleDifferenceRecompositeLayer; 1830 if (diff <= StyleDifferenceRecompositeLayer && (contextSensitiveProp erties & ContextSensitivePropertyTransform3D))
1831 diff = StyleDifferenceMinRecompositeLayer;
1832 }
1833
1831 } 1834 }
1832 1835
1833 // If opacity or filters changed, and the layer does not paint into its own separate backing, then we need to repaint (also 1836 // If opacity or filters changed, and the layer does not paint into its own separate backing, then we need to repaint (also
1834 // ignoring text nodes) 1837 // ignoring text nodes)
1835 if (contextSensitiveProperties & ContextSensitivePropertyOpacity && diff <= StyleDifferenceRepaintLayer) { 1838 if (contextSensitiveProperties & ContextSensitivePropertyOpacity && diff <= StyleDifferenceRepaintLayer) {
1836 if (!isText() && (!hasLayer() || !toRenderLayerModelObject(this)->layer( )->hasDirectReasonsForCompositing())) 1839 if (!isText() && (!hasLayer() || !toRenderLayerModelObject(this)->layer( )->hasDirectReasonsForCompositing()))
1837 diff = StyleDifferenceRepaintLayer; 1840 diff = StyleDifferenceRepaintLayer;
1838 else if (diff < StyleDifferenceRecompositeLayer) 1841 else if (diff < StyleDifferenceRecompositeLayer)
1839 diff = StyleDifferenceRecompositeLayer; 1842 diff = StyleDifferenceMinRecompositeLayer;
1840 } 1843 }
1841 1844
1842 if ((contextSensitiveProperties & ContextSensitivePropertyFilter) && hasLaye r() && diff <= StyleDifferenceRepaintLayer) { 1845 if ((contextSensitiveProperties & ContextSensitivePropertyFilter) && hasLaye r() && diff <= StyleDifferenceRepaintLayer) {
1843 RenderLayer* layer = toRenderLayerModelObject(this)->layer(); 1846 RenderLayer* layer = toRenderLayerModelObject(this)->layer();
1844 if (!layer->hasDirectReasonsForCompositing() || layer->paintsWithFilters ()) 1847 if (!layer->hasDirectReasonsForCompositing() || layer->paintsWithFilters ())
1845 diff = StyleDifferenceRepaintLayer; 1848 diff = StyleDifferenceRepaintLayer;
1846 else if (diff < StyleDifferenceRecompositeLayer) 1849 else if (diff < StyleDifferenceRecompositeLayer)
1847 diff = StyleDifferenceRecompositeLayer; 1850 diff = StyleDifferenceRecompositeLayer;
1848 } 1851 }
1849 1852
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
1959 if (updatedDiff == StyleDifferenceLayout) 1962 if (updatedDiff == StyleDifferenceLayout)
1960 setNeedsLayoutAndPrefWidthsRecalc(); 1963 setNeedsLayoutAndPrefWidthsRecalc();
1961 else if (updatedDiff == StyleDifferenceLayoutPositionedMovementOnly) 1964 else if (updatedDiff == StyleDifferenceLayoutPositionedMovementOnly)
1962 setNeedsPositionedMovementLayout(); 1965 setNeedsPositionedMovementLayout();
1963 else if (updatedDiff == StyleDifferenceSimplifiedLayoutAndPositionedMove ment) { 1966 else if (updatedDiff == StyleDifferenceSimplifiedLayoutAndPositionedMove ment) {
1964 setNeedsPositionedMovementLayout(); 1967 setNeedsPositionedMovementLayout();
1965 setNeedsSimplifiedNormalFlowLayout(); 1968 setNeedsSimplifiedNormalFlowLayout();
1966 } else if (updatedDiff == StyleDifferenceSimplifiedLayout) 1969 } else if (updatedDiff == StyleDifferenceSimplifiedLayout)
1967 setNeedsSimplifiedNormalFlowLayout(); 1970 setNeedsSimplifiedNormalFlowLayout();
1968 } 1971 }
1972 if (updatedDiff > StyleDifferenceMinRecompositeLayer) {
1973 TRACE_EVENT0("webkit", "setCompleteCompositing");
1974 // trigger complete compositing
1975 document().setFastCompositing(false);
1976 }
1969 1977
1970 if (updatedDiff == StyleDifferenceRepaintLayer || shouldRepaintForStyleDiffe rence(updatedDiff)) { 1978 if (updatedDiff == StyleDifferenceRepaintLayer || shouldRepaintForStyleDiffe rence(updatedDiff)) {
1971 // Do a repaint with the new style now, e.g., for example if we go from 1979 // Do a repaint with the new style now, e.g., for example if we go from
1972 // not having an outline to having an outline. 1980 // not having an outline to having an outline.
1973 repaint(); 1981 repaint();
1974 } 1982 }
1975 } 1983 }
1976 1984
1977 static inline bool rendererHasBackground(const RenderObject* renderer) 1985 static inline bool rendererHasBackground(const RenderObject* renderer)
1978 { 1986 {
(...skipping 1373 matching lines...) Expand 10 before | Expand all | Expand 10 after
3352 { 3360 {
3353 if (object1) { 3361 if (object1) {
3354 const WebCore::RenderObject* root = object1; 3362 const WebCore::RenderObject* root = object1;
3355 while (root->parent()) 3363 while (root->parent())
3356 root = root->parent(); 3364 root = root->parent();
3357 root->showRenderTreeAndMark(object1, "*", object2, "-", 0); 3365 root->showRenderTreeAndMark(object1, "*", object2, "-", 0);
3358 } 3366 }
3359 } 3367 }
3360 3368
3361 #endif 3369 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698