Kyle Huey
43e58e33c8
Bug 760331: Coalesce data for inline style across nodes. r=bz
...
This patch enables sharing of an nsAttrValue's MiscContainer between nodes for style rules. MiscContainers of type eCSSStyleRule are now refcounted (with some clever struct packing to ensure that the amount of memory allocated for MiscContainer remains unchanged on 32 and 64 bit). This infrastructure can be used to share most MiscContainer types in the future if we find advantages to sharing other types than just eCSSStyleRuley. A cache mapping strings to MiscContainers has been added to nsHTMLCSSStyleSheet. MiscContainers can be shared between nsAttrValues when one nsAttrValue is SetTo another nsAttrValue or when there is a cache hit in this cache. This patch also adds the ability to tell a style rule that it belongs to an nsHTMLCSSStyleSheet, with appropriate accessor functions to separate that from the existing case of belonging to an nsCSSStyleSheet.
The primary use case is to reduce memory use for pages that have lots of inline style attributes with the same value. This can happen easily with large pages that are automatically generated. An (admittedly pathological) testcase in Bug 686975 sees over 250 MB of memory savings with this change. Reusing the same MiscContainer for multiple nodes saves the overhead of maintaining separate copies of the string containing the serialized value of the style attribute and of creating separate style rules for each node. Eliminating duplicate style rules enables further savings in layout through style context sharing. The testcase sees the amount of memory used by style contexts go from over 250 MB to 10 KB.
Because the cache is based on the text value of the style attribute, it will not handle attributes that have different text values but are parsed into identical style rules. We also do not attempt to share MiscContainers when the node's base URI differs from the document URI. The effect of these limitations is expected to be low.
2012-09-30 09:40:24 -07:00
Mounir Lamouri
38529e6433
Merge m-i inm-c.
2012-09-30 13:19:15 +01:00
Daniel Holbert
8d95ac617b
Bug 666041 patch 8: Add special handling for "min-width: auto" value on flex items. r=dbaron
2012-09-29 23:38:46 -07:00
Daniel Holbert
e71e5f4161
Bug 666041 patch 7: implementation of flex container class for CSS3 flexbox. r=dbaron
2012-09-29 23:38:46 -07:00
Daniel Holbert
8f5c5c9f3f
Bug 666041 patch 6.5: Add flag to nsHTMLReflowState & ComputeSize for measuring auto height. r=dbaron
2012-09-29 23:38:46 -07:00
Matt Woodrow
930cae2bd2
Bug 795611 - Call virtual InvalidateFrame from InvalidateFrameSubtree since nsTable*Frame overloads it. r=cjones
2012-09-30 19:20:25 +13:00
Matt Woodrow
6f574cafa6
Bug 795576 - Correctly add the NS_FRAME_UPDATE_LAYER_TREE when invalidating inside a popup. r=cjones
2012-09-30 19:20:24 +13:00
Scott Johnson
5c7b6d0bc2
Bug 795313: Modify order of conditionals in UpdateFontInflationDataWidthFor() for performance enhancements. [r=dbaron]
2012-09-28 14:38:33 -05:00
Isaac Aggrey
481e7dfb0b
Bug 791906: Replace NSPR integer limit constants with stdint ones; r=ehsan
2012-09-28 01:57:33 -05:00
Ed Morley
aed12527c9
Bug 752786 - Disable one part of test_bug469613.xul on OS X 10.8 for too many intermittent failures
2012-09-28 15:45:29 +01:00
Robert O'Callahan
6c9ec69e94
Bug 539356. Make PruneDisplayListForExtraPage prune print preview properly. r=mattwoodrow
...
PruneDisplayListForExtraPage wasn't pruning properly in print preview. It
was pruning to the RootReferenceFrame, which is per-page when printing normally,
but is the ancestor of all pages in print preview, so it wasn't doing anything in
print preview.
So, pass in the nsPageFrame we want to prune to. This prevents bogus
entirely-clipped-out display items appearing in the display list for the page.
2012-09-28 23:19:39 +12:00
Matt Woodrow
638b4002cb
Bug 781053 - Part 2 - Trigger empty transactions when an animated image in an ImageLayer changes frame. r=roc
2012-09-25 08:31:30 +12:00
Matt Woodrow
17610240f2
Bug 781053 - Part 1 - Allow conversion of nsImageBoxFrame to an ImageLayer. r=roc
2012-09-25 08:29:14 +12:00
Matt Woodrow
a382cc1373
Bug 539356 - Avoid some causes of unnecessary painting. r=roc
2012-09-26 11:59:56 +12:00
Matt Woodrow
30f635b6f8
Bug 539356 - Correctly invalidate SVG observers. r=roc
2012-08-29 17:49:16 +12:00
Matt Woodrow
5b90207e93
Bug 539356 - Make the table code use rect invalidation to avoid over invalidation. r=roc
2012-08-29 17:48:45 +12:00
Matt Woodrow
daef8103fd
Bug 539356 - Add an option for frames to invalid just a rect instead of the frame bounds. r=roc
2012-08-29 17:48:45 +12:00
Robert O'Callahan
030510fcb8
Bug 770058. InvalidateFrame doesn't need flags, we can just avoid calling ScheduleRepaint if we find any ancestor frame with a descendant that needs invalidation. r=mattwoodrow
2012-08-29 17:48:44 +12:00
Matt Woodrow
26e7634f2d
Bug 769922 - Implement nsDisplayAltFeedback, since it can draw outside of the frame's overflow rect. r=roc
2012-08-29 17:48:44 +12:00
Matt Woodrow
d5505976c0
Bug 539356 - Part 27 - Make nsImageFrame's overflow include the AltFeedback image if it will use one. r=roc
2012-08-29 17:48:44 +12:00
Matt Woodrow
16e9c4f1eb
Bug 539356 - Part 26 - Send invalidations for hidden documents. r=roc
2012-08-29 17:48:44 +12:00
Matt Woodrow
5542e52aa1
Bug 539356 - Part 18 - Mark frames with only invalid children as an optimization to use when invalidating further frames. r=roc
2012-08-29 17:48:43 +12:00
Matt Woodrow
b542e0240d
Bug 539356 - Part 11 - Reimplement empty transactions. r=roc
2012-08-29 17:48:15 +12:00
Matt Woodrow
7507512379
Bug 539356 - Part 10 - Test changes required for DLBI. r=roc
...
* * *
[mq]: test-fixes
2012-08-29 17:48:13 +12:00
Matt Woodrow
5730a3f4b2
Bug 539356 - Part 9f - Compute the invalid area of the layer tree and pass this to the widget. r=roc
2012-08-29 17:47:18 +12:00
Matt Woodrow
c36e8e6c82
Bug 539356 - Part 9e - FrameLayerBuilder changes for display list invalidation. r=roc
...
* * *
imported patch move-by-correctly
2012-08-29 17:47:15 +12:00
Matt Woodrow
cee1aa3599
Bug 539356 - Part 9c - Remove old invalidation code. r=bz
2012-08-29 17:39:31 +12:00
Matt Woodrow
2d57efa896
Bug 539356 - Part 9b - Add new frame invalidation API. r=roc
2012-08-29 17:39:01 +12:00
Matt Woodrow
a67ae37664
Bug 539356 - Part 9a - Add new display list invalidation API to nsDisplayItem and implement it. r=roc
2012-08-29 17:39:01 +12:00
Leonard Camacho
4420e1cb45
Bug 524025 - Remove LL_* constants in nsLineLayout with separate booleans with field widths. r=dbaron
2012-09-27 21:26:40 -04:30
Ed Morley
aba3a8f5ef
Revert mozilla-inbound to e4dd1fa6d222 for crashes and test failures on a CLOSED TREE
2012-09-27 16:34:46 +01:00
Robert O'Callahan
9f235a73ab
Bug 539356. Make PruneDisplayListForExtraPage prune print preview properly. r=mattwoodrow
...
PruneDisplayListForExtraPage wasn't pruning properly in print preview. It
was pruning to the RootReferenceFrame, which is per-page when printing normally,
but is the ancestor of all pages in print preview, so it wasn't doing anything in
print preview.
So, pass in the nsPageFrame we want to prune to. This prevents bogus
entirely-clipped-out display items appearing in the display list for the page.
2012-09-28 01:07:40 +12:00
Matt Woodrow
53908eb696
Bug 781053 - Part 2 - Trigger empty transactions when an animated image in an ImageLayer changes frame. r=roc
2012-09-25 08:31:30 +12:00
Matt Woodrow
af81361caa
Bug 781053 - Part 1 - Allow conversion of nsImageBoxFrame to an ImageLayer. r=roc
2012-09-25 08:29:14 +12:00
Matt Woodrow
58294c1b55
Bug 539356 - Avoid some causes of unnecessary painting. r=roc
2012-09-26 11:59:56 +12:00
Matt Woodrow
7be72ad421
Bug 539356 - Correctly invalidate SVG observers. r=roc
2012-08-29 17:49:16 +12:00
Matt Woodrow
515829e8e5
Bug 539356 - Make the table code use rect invalidation to avoid over invalidation. r=roc
2012-08-29 17:48:45 +12:00
Matt Woodrow
27184c37d8
Bug 539356 - Add an option for frames to invalid just a rect instead of the frame bounds. r=roc
2012-08-29 17:48:45 +12:00
Robert O'Callahan
8234ee38ca
Bug 770058. InvalidateFrame doesn't need flags, we can just avoid calling ScheduleRepaint if we find any ancestor frame with a descendant that needs invalidation. r=mattwoodrow
2012-08-29 17:48:44 +12:00
Matt Woodrow
3a8db38bc7
Bug 769922 - Implement nsDisplayAltFeedback, since it can draw outside of the frame's overflow rect. r=roc
2012-08-29 17:48:44 +12:00
Matt Woodrow
742de4dfd9
Bug 539356 - Part 27 - Make nsImageFrame's overflow include the AltFeedback image if it will use one. r=roc
2012-08-29 17:48:44 +12:00
Matt Woodrow
db77ca702c
Bug 539356 - Part 26 - Send invalidations for hidden documents. r=roc
2012-08-29 17:48:44 +12:00
Matt Woodrow
88eb3c75a6
Bug 539356 - Part 18 - Mark frames with only invalid children as an optimization to use when invalidating further frames. r=roc
2012-08-29 17:48:43 +12:00
Matt Woodrow
3aae95fe5f
Bug 539356 - Part 11 - Reimplement empty transactions. r=roc
2012-08-29 17:48:15 +12:00
Matt Woodrow
6f5a5e2a30
Bug 539356 - Part 10 - Test changes required for DLBI. r=roc
...
* * *
[mq]: test-fixes
2012-08-29 17:48:13 +12:00
Matt Woodrow
4d096475d2
Bug 539356 - Part 9 - Implement DLBI. r=roc,bz,jwatt
2012-08-29 17:38:58 +12:00
David Zbarsky
828bac4ca2
Bug 790508: bustage fix r=me
2012-09-26 17:55:38 -04:00
David Zbarsky
bb17e3dd19
Bug 790508: Make sure we only create nsDisplayOpacity and nsDisplayTransform for the primary frame when content has async animations r=roc
2012-09-26 17:35:29 -04:00
David Zbarsky
379c616dc0
Fix virtual dtor warning, no bug, blanket r=bz
2012-09-26 14:30:34 -04:00
Alexandre Dumont
9bb8822425
Bug 596753: Flatten layout/svg/base/src into layout/svg. r=dholbert
...
--HG--
rename : layout/svg/base/src/Makefile.in => layout/svg/Makefile.in
rename : layout/svg/base/src/SVGFEContainerFrame.cpp => layout/svg/SVGFEContainerFrame.cpp
rename : layout/svg/base/src/SVGFEImageFrame.cpp => layout/svg/SVGFEImageFrame.cpp
rename : layout/svg/base/src/SVGFELeafFrame.cpp => layout/svg/SVGFELeafFrame.cpp
rename : layout/svg/base/src/SVGFEUnstyledLeafFrame.cpp => layout/svg/SVGFEUnstyledLeafFrame.cpp
rename : layout/svg/base/src/SVGViewFrame.cpp => layout/svg/SVGViewFrame.cpp
rename : layout/svg/base/src/nsISVGChildFrame.h => layout/svg/nsISVGChildFrame.h
rename : layout/svg/base/src/nsISVGGlyphFragmentNode.h => layout/svg/nsISVGGlyphFragmentNode.h
rename : layout/svg/base/src/nsISVGSVGFrame.h => layout/svg/nsISVGSVGFrame.h
rename : layout/svg/base/src/nsSVGAFrame.cpp => layout/svg/nsSVGAFrame.cpp
rename : layout/svg/base/src/nsSVGClipPathFrame.cpp => layout/svg/nsSVGClipPathFrame.cpp
rename : layout/svg/base/src/nsSVGClipPathFrame.h => layout/svg/nsSVGClipPathFrame.h
rename : layout/svg/base/src/nsSVGContainerFrame.cpp => layout/svg/nsSVGContainerFrame.cpp
rename : layout/svg/base/src/nsSVGContainerFrame.h => layout/svg/nsSVGContainerFrame.h
rename : layout/svg/base/src/nsSVGEffects.cpp => layout/svg/nsSVGEffects.cpp
rename : layout/svg/base/src/nsSVGEffects.h => layout/svg/nsSVGEffects.h
rename : layout/svg/base/src/nsSVGFilterFrame.cpp => layout/svg/nsSVGFilterFrame.cpp
rename : layout/svg/base/src/nsSVGFilterFrame.h => layout/svg/nsSVGFilterFrame.h
rename : layout/svg/base/src/nsSVGFilterInstance.cpp => layout/svg/nsSVGFilterInstance.cpp
rename : layout/svg/base/src/nsSVGFilterInstance.h => layout/svg/nsSVGFilterInstance.h
rename : layout/svg/base/src/nsSVGFilterPaintCallback.h => layout/svg/nsSVGFilterPaintCallback.h
rename : layout/svg/base/src/nsSVGForeignObjectFrame.cpp => layout/svg/nsSVGForeignObjectFrame.cpp
rename : layout/svg/base/src/nsSVGForeignObjectFrame.h => layout/svg/nsSVGForeignObjectFrame.h
rename : layout/svg/base/src/nsSVGGFrame.cpp => layout/svg/nsSVGGFrame.cpp
rename : layout/svg/base/src/nsSVGGFrame.h => layout/svg/nsSVGGFrame.h
rename : layout/svg/base/src/nsSVGGenericContainerFrame.cpp => layout/svg/nsSVGGenericContainerFrame.cpp
rename : layout/svg/base/src/nsSVGGenericContainerFrame.h => layout/svg/nsSVGGenericContainerFrame.h
rename : layout/svg/base/src/nsSVGGeometryFrame.cpp => layout/svg/nsSVGGeometryFrame.cpp
rename : layout/svg/base/src/nsSVGGeometryFrame.h => layout/svg/nsSVGGeometryFrame.h
rename : layout/svg/base/src/nsSVGGlyphFrame.cpp => layout/svg/nsSVGGlyphFrame.cpp
rename : layout/svg/base/src/nsSVGGlyphFrame.h => layout/svg/nsSVGGlyphFrame.h
rename : layout/svg/base/src/nsSVGGradientFrame.cpp => layout/svg/nsSVGGradientFrame.cpp
rename : layout/svg/base/src/nsSVGGradientFrame.h => layout/svg/nsSVGGradientFrame.h
rename : layout/svg/base/src/nsSVGImageFrame.cpp => layout/svg/nsSVGImageFrame.cpp
rename : layout/svg/base/src/nsSVGInnerSVGFrame.cpp => layout/svg/nsSVGInnerSVGFrame.cpp
rename : layout/svg/base/src/nsSVGInnerSVGFrame.h => layout/svg/nsSVGInnerSVGFrame.h
rename : layout/svg/base/src/nsSVGIntegrationUtils.cpp => layout/svg/nsSVGIntegrationUtils.cpp
rename : layout/svg/base/src/nsSVGIntegrationUtils.h => layout/svg/nsSVGIntegrationUtils.h
rename : layout/svg/base/src/nsSVGMarkerFrame.cpp => layout/svg/nsSVGMarkerFrame.cpp
rename : layout/svg/base/src/nsSVGMarkerFrame.h => layout/svg/nsSVGMarkerFrame.h
rename : layout/svg/base/src/nsSVGMaskFrame.cpp => layout/svg/nsSVGMaskFrame.cpp
rename : layout/svg/base/src/nsSVGMaskFrame.h => layout/svg/nsSVGMaskFrame.h
rename : layout/svg/base/src/nsSVGOuterSVGFrame.cpp => layout/svg/nsSVGOuterSVGFrame.cpp
rename : layout/svg/base/src/nsSVGOuterSVGFrame.h => layout/svg/nsSVGOuterSVGFrame.h
rename : layout/svg/base/src/nsSVGPaintServerFrame.cpp => layout/svg/nsSVGPaintServerFrame.cpp
rename : layout/svg/base/src/nsSVGPaintServerFrame.h => layout/svg/nsSVGPaintServerFrame.h
rename : layout/svg/base/src/nsSVGPathGeometryFrame.cpp => layout/svg/nsSVGPathGeometryFrame.cpp
rename : layout/svg/base/src/nsSVGPathGeometryFrame.h => layout/svg/nsSVGPathGeometryFrame.h
rename : layout/svg/base/src/nsSVGPatternFrame.cpp => layout/svg/nsSVGPatternFrame.cpp
rename : layout/svg/base/src/nsSVGPatternFrame.h => layout/svg/nsSVGPatternFrame.h
rename : layout/svg/base/src/nsSVGStopFrame.cpp => layout/svg/nsSVGStopFrame.cpp
rename : layout/svg/base/src/nsSVGSwitchFrame.cpp => layout/svg/nsSVGSwitchFrame.cpp
rename : layout/svg/base/src/nsSVGTSpanFrame.cpp => layout/svg/nsSVGTSpanFrame.cpp
rename : layout/svg/base/src/nsSVGTSpanFrame.h => layout/svg/nsSVGTSpanFrame.h
rename : layout/svg/base/src/nsSVGTextContainerFrame.cpp => layout/svg/nsSVGTextContainerFrame.cpp
rename : layout/svg/base/src/nsSVGTextContainerFrame.h => layout/svg/nsSVGTextContainerFrame.h
rename : layout/svg/base/src/nsSVGTextFrame.cpp => layout/svg/nsSVGTextFrame.cpp
rename : layout/svg/base/src/nsSVGTextFrame.h => layout/svg/nsSVGTextFrame.h
rename : layout/svg/base/src/nsSVGTextPathFrame.cpp => layout/svg/nsSVGTextPathFrame.cpp
rename : layout/svg/base/src/nsSVGTextPathFrame.h => layout/svg/nsSVGTextPathFrame.h
rename : layout/svg/base/src/nsSVGUseFrame.cpp => layout/svg/nsSVGUseFrame.cpp
rename : layout/svg/base/src/nsSVGUtils.cpp => layout/svg/nsSVGUtils.cpp
rename : layout/svg/base/src/nsSVGUtils.h => layout/svg/nsSVGUtils.h
rename : layout/svg/base/src/resources/content/svgBindings.xml => layout/svg/resources/content/svgBindings.xml
rename : layout/svg/base/src/svg.css => layout/svg/svg.css
2012-09-24 23:01:21 +02:00