Commit Graph

2663 Commits

Author SHA1 Message Date
Matt Woodrow
b14fd4ecb2 Bug 1402197 - Add an option for GetTransformToAncestor to stop at stacking contexts and displayport. r=mstange 2017-09-26 15:57:55 +13:00
Sebastian Hengst
33dad84671 merge mozilla-inbound to mozilla-central. r=merge a=merge
MozReview-Commit-ID: 9Z3Ly8icnvh
2017-09-20 11:48:02 +02:00
Ethan Lin
ceab79c1ee Bug 1397375 - Part3. Remove the related webrender user data when destroying a frame. r=jrmuizel
MozReview-Commit-ID: IYjfqWiiPZ
2017-09-14 14:40:31 +08:00
Jonathan Watt
e3204e3c0c Bug 1401356, part 2 - Rename nsSVGEffects to SVGObserverUtils. r=longsonr 2017-08-30 15:58:31 +01:00
Jonathan Watt
7428c44f4d Bug 1401356, part 1 - Rename nsSVGEffects.h/.cpp to SVGObserverUtils.h/.cpp. r=longsonr 2017-08-30 14:14:46 +01:00
Jonathan Watt
b691d3e6b4 Bug 1399824, part 2 - Always use nsIFrame::AddStateBits instead of manual bit twiddling. r=xidorn
MozReview-Commit-ID: JoEiQQI2kZ5
2017-08-24 12:09:42 +01:00
Jonathan Watt
3423986d9b Bug 1399824, part 1 - Always use nsIFrame::RemoveStateBits instead of manual bit twiddling. r=xidorn
MozReview-Commit-ID: KynEge1U4aS
2017-08-24 10:55:28 +01:00
Ting-Yu Lin
d93880e505 Bug 1341009 - Add nsReflowStatus::IsEmpty() assertions to all nsIFrame::Reflow() methods and some reflow helpers, and remove unneeded Reset(). r=dholbert
nsReflowStatus::IsEmpty() assertions are added after DISPLAY_REFLOW in the
beginning of the Reflow().

A few Reflow() implementations have Reset() calls at the end which are left
in place by this patch (with an explanatory comment added to each). These
ending Reset()s are only needed for cases where a non-splittable frame
passes its own nsReflowStatus to a child's reflow method. Just in case the
child leaves a "not fully complete" value in the nsReflowStatus, the
non-splittable parent frame must clear out the nsReflowStatus before
returning, so that its own parent doesn't then try to split it.

MozReview-Commit-ID: 6Jj3jfMAqj4
2017-09-13 18:00:25 +08:00
Ting-Yu Lin
b221261f75 Bug 1341009 - Pass const reference instead of value for nsReflowStatus. r=dholbert
It's good to save a copy constructor call.

Also, make nsBlockFrame::SplitFloat() return void because the only
caller (BlockReflowInput::FlowAndPlaceFloat()) doesn't check its return
value, and (more importantly) because it only ever returns NS_OK.

MozReview-Commit-ID: 9LmDCXd7xGS
2017-09-13 15:47:51 +08:00
Neerja Pancholi
e50152c2d0 Bug 1381157 - Cache 'mContent->GetPrimaryFrame == this' with a flag on nsIFrame and replace these calls to GetPrimaryFrame. r=mats
MozReview-Commit-ID: 3VoxYlean52
2017-09-17 17:21:32 +02:00
Kartikaya Gupta
f47cba5b2c Bug 1388433 - Remove unnecessary warning as the codepath is handled in an acceptable manner. r=mattwoodrow
MozReview-Commit-ID: 76KuxiDwnas
2017-09-11 10:49:22 -04:00
Daniel Holbert
8fa516d61a Bug 1387152 part 2: Don't let unrelated property "flex-basis" influence the sizing inside of -webkit-box containers. r=mats
We use nsFlexContainerFrame (our modern flexbox implementation) to emulate
-webkit-box, and we use a frame state bit to tell us whether to use
modern-flexbox properties vs. legacy properties.  Up until this patch, we
neglected to check that state bit when determining whether to use the modern
"flex-basis" property for sizing.  This patch makes us *not* use that property
(and just use the axis-appropriate width/height property instead) for legacy
-webkit-box containers.

MozReview-Commit-ID: 14bzOCPCtUY
2017-08-03 11:18:13 -07:00
Daniel Holbert
ef8ff52e92 Bug 1387152 part 1: Adjust indentation and use HasAnyStateBits() instead of manual bitwise arithmetic, in nsFrame size-computation code. r=mats
* HasAnyStateBits is slightly more foolproof and readable -- in particular, you
  can put the logical "!" directly alongside the expression, rather than
  needing to separate it with a layer of logical-grouping-parens.

* The deindentation here isn't super-important, but it conforms better to our
  coding style, and it'll make this code consistent with a new chunk that I'm
  adding in the next patch (and that chunk will *have* to be deindented like
  this, to avoid going over 80 characters).

MozReview-Commit-ID: FWfqrKjHedP
2017-08-03 11:04:08 -07:00
Boris Zbarsky
78dee00e63 Bug 1390389. Fix anon box restyling assertions to correctly handle ib splits. r=xidorn
MozReview-Commit-ID: AtBFlvLyg6b
2017-08-31 09:12:13 -04:00
Bobby Holley
c2ce4d2e27 Bug 1393791 - Stop unbinding native-anonymous content off a script runner. r=emilio
The failure mode in the attached crashtest is an inconsistency in the flattened
tree. Specifically, we null out mVideoControls in an nsVideoFrame, but defer
the UnbindFromTree call on that NAC element, which measn that its mParent still
points to the nsVideoFrame's mContent. Because all this stuff runs off of script
runners, and the anonymous content destroyer is not guaranteed to run before
other potential script runners, we end up running arbitrary script while the
tree mismatch exists. This script calls back into ProcessPendingRestyles, which
causes trouble.

We could build a separate deferral mechanism, but it's not clear that we actually
need to defer the unbind anymore. The deferred unbind was added in bug 489008,
which predated a lot of simplifications in layout/dom interaction.

MozReview-Commit-ID: 1JYAhiXKVJC
2017-08-27 15:29:36 -07:00
Bobby Holley
d4947abb27 Bug 1394156 - Use a smart pointer for nsIFrame::mStyleContext. r=emilio
MozReview-Commit-ID: FizF2iCvp9t
2017-08-27 10:46:00 -07:00
Bobby Holley
b573bf19ee Bug 1394156 - Use a smart pointer for nsIFrame::mContent. r=emilio
MozReview-Commit-ID: 5xsLwXkXym7
2017-08-27 10:45:59 -07:00
Bobby Holley
9aa8eec70d Bug 1394156 - Make static_casts of mContent use GetContent(). r=emilio
This was done with: perl -pi -e 's/\(mContent\)/\(GetContent\(\)\)/g' *.cpp

MozReview-Commit-ID: 7ugPKf5ypGw
2017-08-27 10:45:59 -07:00
Nicholas Nethercote
d9de21e46e Bug 1393636 (part 4) - Move ComputedValues measurements from nsStyleSizes to nsWindowSizes. r=heycam.
Another plumbing-only change, which is a precursor for the next patch.
ComputedValues are a Servo-only thing, so in order to use nsStyleSizes for both
Gecko and Servo, the ComputedValues sizes must be moved out.

MozReview-Commit-ID: BOnQSzzV0vC
2017-08-25 14:50:26 +10:00
Nicholas Nethercote
39c39dd5f2 Bug 1393636 (part 3) - Pass nsWindowSizes to more AddSizeOf*() functions. r=heycam.
This is a purely non-functional plumbing change. Instead of passing a
SizeOfState and an nsStyleSizes a bunch of places, we pass an nsWindowSizes,
which contains both of them.

This is a necessary precursor for the next patch.

MozReview-Commit-ID: Ek03wDM50rB
2017-08-25 14:47:54 +10:00
Nicholas Nethercote
0c060cd7ca Bug 1390760 - Measure ServoComputedData::visited_style. r=bholley.
For the Obama wikipedia page, this covers about 85% of the unmeasured
ComputedValues structs. The about:memory output looks like this:

> +---2,443,648 B (02.41%) -- computed-values
> |   +--1,088,272 B (01.07%) -- dom
> |   +----945,744 B (00.93%) -- non-dom
> |   +----409,632 B (00.40%) -- visited

I'm not sure why some CVs are still being missed.

MozReview-Commit-ID: 1bYWwSi4ihn
2017-08-21 16:07:16 +10:00
cku
5000d14d6e Bug 577824 - Part 1. Set the frame size in nsIFrame::FinishAndStoreOverflow before the ComputeEffectsRect call that uses it. r=jwatt
This change ensures that HTML frames with SVG filters applied are given the
correct overflow regions so that they will display and invalidate correctly.

The bug that this commit fixes does not manifest in many cases since
often elements happen to be reflowed more than once when a document loads.
When that happened the bug would be masked because the filtered frame would be
given a size during the first reflow, and that would then make the overflow
calculations in subsequent reflows work.  It was only in cases where the
filtered frame was only reflowed once (such as when dynamically inserting a
filtered element into the DOM using script) that the lack of a valid frame
size during the overflow calculations would result in bad overflow regions
being calculated.

MozReview-Commit-ID: 79lR27KRSym
2017-08-09 01:04:49 +08:00
Wes Kocher
759e7551f7 Backed out 2 changesets (bug 577824) for reftest failures in 577824.html a=backout CLOSED TREE
Backed out changeset 98f8d05483cf (bug 577824)
Backed out changeset 3b9a469ab1d6 (bug 577824)

MozReview-Commit-ID: HraTkt5uajG
2017-08-17 13:17:28 -07:00
cku
36db3dd79d Bug 577824 - Part 1. Set the frame size in nsIFrame::FinishAndStoreOverflow before the ComputeEffectsRect call that uses it. r=jwatt
This change ensures that HTML frames with SVG filters applied are given the
correct overflow regions so that they will display and invalidate correctly.

The bug that this commit fixes does not manifest in many cases since
often elements happen to be reflowed more than once when a document loads.
When that happened the bug would be masked because the filtered frame would be
given a size during the first reflow, and that would then make the overflow
calculations in subsequent reflows work.  It was only in cases where the
filtered frame was only reflowed once (such as when dynamically inserting a
filtered element into the DOM using script) that the lack of a valid frame
size during the overflow calculations would result in bad overflow regions
being calculated.

MozReview-Commit-ID: 79lR27KRSym
2017-08-09 01:04:49 +08:00
Ehsan Akhgari
d503c058eb Bug 1390382 - Part 5 : Only call nsLayoutUtils::GetDisplayRootFrame() once per call to nsIFrame::SchedulePaint(); r=dholbert
nsLayoutUtils::GetDisplayRootFrame() can be quite expensive to call.
By calling this function one level higher (in callers and passing the return
value to callees), we can avoid calling it twice per call to SchedulePaint().
2017-08-15 18:57:16 -04:00
Nicholas Nethercote
b0330270c1 Bug 1387956 - Overhaul ComputedValues measurement, and add style structs measurement. r=bholley.
This patch moves measurement of ComputedValues objects from Rust to C++.
Measurement now happens (a) via DOM elements and (b) remaining elements via
the frame tree. Likewise for the style structs hanging off ComputedValues
objects.

Here is an example of the output.

> ├──27,600,448 B (26.49%) -- active/window(https://en.wikipedia.org/wiki/Barack_Obama)
> │  ├──12,772,544 B (12.26%) -- layout
> │  │  ├───4,483,744 B (04.30%) -- frames
> │  │  │   ├──1,653,552 B (01.59%) ── nsInlineFrame
> │  │  │   ├──1,415,760 B (01.36%) ── nsTextFrame
> │  │  │   ├────431,376 B (00.41%) ── nsBlockFrame
> │  │  │   ├────340,560 B (00.33%) ── nsHTMLScrollFrame
> │  │  │   ├────302,544 B (00.29%) ── nsContinuingTextFrame
> │  │  │   ├────156,408 B (00.15%) ── nsBulletFrame
> │  │  │   ├─────73,024 B (00.07%) ── nsPlaceholderFrame
> │  │  │   ├─────27,656 B (00.03%) ── sundries
> │  │  │   ├─────23,520 B (00.02%) ── nsTableCellFrame
> │  │  │   ├─────16,704 B (00.02%) ── nsImageFrame
> │  │  │   ├─────15,488 B (00.01%) ── nsTableRowFrame
> │  │  │   ├─────13,776 B (00.01%) ── nsTableColFrame
> │  │  │   └─────13,376 B (00.01%) ── nsTableFrame
> │  │  ├───3,412,192 B (03.28%) -- servo-style-structs
> │  │  │   ├──1,288,224 B (01.24%) ── Display
> │  │  │   ├────742,400 B (00.71%) ── Position
> │  │  │   ├────308,736 B (00.30%) ── Font
> │  │  │   ├────226,512 B (00.22%) ── Background
> │  │  │   ├────218,304 B (00.21%) ── TextReset
> │  │  │   ├────214,896 B (00.21%) ── Text
> │  │  │   ├────130,560 B (00.13%) ── Border
> │  │  │   ├─────81,408 B (00.08%) ── UIReset
> │  │  │   ├─────61,440 B (00.06%) ── Padding
> │  │  │   ├─────38,176 B (00.04%) ── UserInterface
> │  │  │   ├─────29,232 B (00.03%) ── Margin
> │  │  │   ├─────21,824 B (00.02%) ── sundries
> │  │  │   ├─────20,080 B (00.02%) ── Color
> │  │  │   ├─────20,080 B (00.02%) ── Column
> │  │  │   └─────10,320 B (00.01%) ── Effects
> │  │  ├───2,227,680 B (02.14%) -- computed-values
> │  │  │   ├──1,182,928 B (01.14%) ── non-dom
> │  │  │   └──1,044,752 B (01.00%) ── dom
> │  │  ├───1,500,016 B (01.44%) ── text-runs
> │  │  ├─────492,640 B (00.47%) ── line-boxes
> │  │  ├─────326,688 B (00.31%) ── frame-properties
> │  │  ├─────301,760 B (00.29%) ── pres-shell
> │  │  ├──────27,648 B (00.03%) ── pres-contexts
> │  │  └─────────176 B (00.00%) ── style-sets

The 'servo-style-structs' and 'computed-values' sub-trees are new. (Prior to
this patch, ComputedValues under DOM elements were tallied under the the
'dom/element-nodes' sub-tree, and ComputedValues not under DOM element were
ignored.) 'servo-style-structs/sundries' aggregates all the style structs that
are smaller than 8 KiB.

Other notable things done by the patch are as follows.

- It significantly changes the signatures of the methods measuring nsINode and
  its subclasses, in order to handle the tallying of style structs separately
  from element-nodes. Likewise for nsIFrame.

- It renames the 'layout/style-structs' sub-tree as
  'layout/gecko-style-structs', to clearly distinguish it from the new
  'layout/servo-style-structs' sub-tree.

- It adds some FFI functions to access various Rust-side data structures from
  C++ code.

- There is a nasty hack used twice to measure Arcs, by stepping backwards from
  an interior pointer to a base pointer. It works, but I want to replace it
  with something better eventually. The "XXX WARNING" comments have details.

- It makes DMD print a line to the console if it sees a pointer it doesn't
  recognise. This is useful for detecting when we are measuring an interior
  pointer instead of a base pointer, which is bad but easy to do when Arcs are
  involved.

- It removes the Rust code for measuring CVs, because it's now all done on the
  C++ side.

MozReview-Commit-ID: BKebACLKtCi
2017-08-11 16:37:33 +10:00
Wes Kocher
399a13fd39 Merge inbound to central, a=merge
MozReview-Commit-ID: GArkKmOFIVH
2017-08-11 13:15:33 -07:00
Boris Zbarsky
14690c54ee Bug 1388625 part 5. Implement wrapper anonymous box restyling in ServoRestyleManager. r=heycam
MozReview-Commit-ID: FRW4RCR1GT4
2017-08-11 00:10:26 -04:00
Boris Zbarsky
dd6e36d50f Bug 1388625 part 3. Add nsIFrame flags we will use in stylo post-traversal to keep track of wrapper anonymous boxes. r=heycam
MozReview-Commit-ID: GscWh51aio2
2017-08-10 12:49:03 -04:00
cku
f7271b2eb1 Bug 1386864 - Part 2. Implement CompareLayers to reuse the code in AddAndRemoveImageAssociations. r=heycam
MozReview-Commit-ID: Aw9uJ8UFipj
2017-08-04 17:01:21 +08:00
cku
c26c7f5a52 Bug 1386864 - Part 1. Compare image-data of two style-image objects only if both of them are resolved. r=heycam
MozReview-Commit-ID: 3gjoN9wNPlH
2017-08-04 16:40:04 +08:00
Matt Woodrow
8370362323 Bug 1388162 - Add a Destroy function to nsDisplayItem to use instead of manually invoking the destructor, this will allow us to recycle them in the future. r=mstange
* * *
[mq]: fix

MozReview-Commit-ID: LUXZAIL73BJ
2017-08-07 16:07:43 +12:00
Matt Woodrow
e62cf6dd69 Bug 1388161 - Store the dirty rect on the display list builder rather than passing it as a parameter to BuildDisplayList. r=mstange 2017-08-07 14:23:35 +12:00
Sebastian Hengst
2e92d940f4 Backed out changeset 8f2dd8f13b53 (bug 1388161) for failing chrome's test_animation_performance_warning.html | preserve-3d transform. r=backout 2017-08-10 14:40:21 +02:00
Sebastian Hengst
1e52933103 Backed out changeset e9985564e081 (bug 1388162) for failing chrome's test_animation_performance_warning.html | preserve-3d transform. r=backout 2017-08-10 14:40:20 +02:00
Matt Woodrow
b0bdae09c7 Bug 1388162 - Add a Destroy function to nsDisplayItem to use instead of manually invoking the destructor, this will allow us to recycle them in the future. r=mstange 2017-08-07 16:07:43 +12:00
Matt Woodrow
61b7fddb66 Bug 1388161 - Store the dirty rect on the display list builder rather than passing it as a parameter to BuildDisplayList. r=mstange 2017-08-07 14:23:35 +12:00
Emilio Cobos Álvarez
54f1c009a9 Bug 1384542: Move GetParent and IsLinkContext to GeckoStyleContext. r=heycam
MozReview-Commit-ID: C19yGcphixX
2017-07-31 14:32:59 +02:00
cku
1af7d919cd Bug 1301245 - Part 2. Do not resolve a style image if the given url has a fragment. r=heycam
MozReview-Commit-ID: 18LFjlWZBLl
2017-07-26 11:21:30 +08:00
Emilio Cobos Álvarez
4b6d7fc287 Bug 1381844: Be more explicit about the kind of style context we handle all the time. r=bholley
MozReview-Commit-ID: E0mdkhU3XBz
2017-07-22 18:02:57 +02:00
Emilio Cobos Álvarez
8a11661a50 Bug 1366721: Restyle additional style contexts in ServoRestyleManager. r=heycam
I was about to assert that other non-primary frames don't have additional style
contexts everywhere, but that wouldn't make much sense, given they don't
correspond to an element we could selector-match against.

MozReview-Commit-ID: EtAQbSg6nP6
2017-07-20 18:29:14 +02:00
Cameron McCormack
bf30ce65e2 Bug 1380133 - Part 4: Make CalcStyleDifferenceInternal not cache any new structs on ServoStyleContexts when in a traversal. r=emilio
MozReview-Commit-ID: Eu4MvdQUBor
---
 layout/generic/nsFrame.cpp      |  8 ++++++++
 layout/style/nsStyleContext.cpp | 11 +++++++----
 layout/tables/nsTableFrame.cpp  |  8 ++++++++
 3 files changed, 23 insertions(+), 4 deletions(-)
2017-07-21 11:42:43 +08:00
Sebastian Hengst
3c1e966ccf Backed out changeset cc720d72d024 (bug 1380133) 2017-07-20 15:40:06 +02:00
Cameron McCormack
2f25a9fd35 Bug 1380133 - Part 4: Make CalcStyleDifferenceInternal not cache any new structs on ServoStyleContexts when in a traversal. r=emilio
MozReview-Commit-ID: Eu4MvdQUBor
2017-07-19 15:11:09 +08:00
Manish Goregaokar
63c907be23 Bug 1367904 - Part 11: stylo: Use ServoStyleContext in ServoStyleSet/ServoRestyleManager; r=bholley
MozReview-Commit-ID: JJOBixTSCZq
2017-07-17 21:00:54 -07:00
Emilio Cobos Álvarez
955cd0ceae Bug 1379505: Account for the page frame in UpdateStyleOfOwnedAnonBoxes. r=heycam
MozReview-Commit-ID: L2ouruOMmIq
2017-07-10 10:16:19 +02:00
L. David Baron
e4eca7e523 Bug 1377497 - Pass the correct writing mode to SizeComputationInput::DisplayInitOffsetsEnter. r=jfkthame
This avoids asserting when the writing mode doesn't correspond to the
one stored (DEBUG-only) in aPercentBasis.

MozReview-Commit-ID: KKqms9X17SS
2017-07-07 09:20:56 -07:00
Sebastian Hengst
9a573eb769 Backed out changeset f07caa23cdbb (bug 1377497) for bustage at layout/generic/ReflowInput.cpp:2543: macro "DISPLAY_INIT_OFFSETS" passed 6 arguments, but takes just 5. r=backout on a CLOSED TREE 2017-07-07 18:52:50 +02:00
L. David Baron
4c83ba1936 Bug 1377497 - Pass the correct writing mode to SizeComputationInput::DisplayInitOffsetsEnter. r=jfkthame
This avoids asserting when the writing mode doesn't correspond to the
one stored (DEBUG-only) in aPercentBasis.

MozReview-Commit-ID: KKqms9X17SS
2017-07-07 09:20:56 -07:00
Sylvestre Ledru
9d4a84d778 Bug 1378712 - Remove all trailing whitespaces r=Ehsan
MozReview-Commit-ID: Kdz2xtTF9EG
2017-07-06 14:00:35 +02:00