Commit Graph

2542 Commits

Author SHA1 Message Date
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
Mats Palmgren
04002d3462 Bug 1377910 - Don't bother calling DisassociateRequestFromFrame if the frame doesn't have the HasImageRequest bit since it's a no-op in that case. r=dholbert
MozReview-Commit-ID: 4LlIFN7tARr
2017-07-05 23:07:11 +02:00
Boris Zbarsky
6cfed605fc Bug 1376640. Fix dynamic updates when an inline that sits between a first-letter and its block changes style. r=heycam
MozReview-Commit-ID: 8osMUpYVRvR
2017-06-28 22:19:35 -07:00
Masayuki Nakano
a38c1205f8 Bug 1375825 - part2: ContentEventHandler::ExpandToClusterBoundary() should check the return value of nsTextFrame::PeekOffsetCharacter() r=jfkthame
ContentEventHandler::ExpandToClusterBoundary() doesn't check the return value of nsTextFrame::PeekOffsetCharacter().  Therefore, it may set its result to reversed offset. (e.g., when aForward is true and offset is 6, the result may be 5.  When aForward is false and offset is 5, the result may be 6.)

For avoiding that, ContentEventHandler::ExpandToClusterBoundary() should check the result and only when it returns nsIFrame::FOUND, it should compute the proper offset.

On the other hand, it's too bad for ContentEventHandler that nsTextFrame::PeekOffsetCharacter() to return nsIFrame::CONTINUE_UNSELECTABLE when the user-select style is "all" because IME doesn't expect such cases.

Therefore, this patch adds additional argument to nsIFrame::PeekOffsetCharacter(), aOptions which is a struct containing bool members.  The reason why it's not a bit mask enum is, such struct doesn't cause simple mistake at checking the value and the code is shorter.  When mIgnoreUserStyleAll of it is true, this patch makes nsTextFrame not return nsIFrame::CONTINUE_UNSELECTABLE.

MozReview-Commit-ID: ACNNBTP92YZ
2017-06-29 10:58:16 +09:00
Emilio Cobos Álvarez
23662f6e46 Bug 1375674: Track the owner that represents the changes handled, and fix a bunch of issues while at it. r=heycam
In particular, this fixes:

 * Restyling of <area> elements that reuse the primary frame mapping for the
   image map.

 * Restyling of children of display: contents elements when the display:
   contents element generates a hint.

 * Restyling of out-of-flows (if my analysis in the bug is right).

 * Restyling of the ::backdrop pseudo-element.

 * Restyling of the Viewport frame.

I only managed to do a reftest for the second one, but the rest of them are
covered by the assertions added.

MozReview-Commit-ID: E7QtiQ1vPqu
2017-06-23 19:31:35 +02:00
Emilio Cobos Álvarez
3adff9373d Bug 1375674: Don't use the table change hints for the table wrapper frame. r=heycam
MozReview-Commit-ID: 7Qe07N6zvIt
2017-06-23 19:30:16 +02:00
Boris Zbarsky
de5e036fcb Bug 1324618 part 5. Add a way to pass a different style context for later continuations to UpdateStyleOfOwnedChildFrame. r=emilio
We're going to want this for first-letter, because the primary frame and its continuations have different styles.

MozReview-Commit-ID: 6ZjtnRWXgd9
2017-06-26 23:35:08 -07:00
Carsten "Tomcat" Book
b53064f4dc Backed out changeset b40d51d1f78e (bug 1324618) 2017-06-27 10:39:45 +02:00
Boris Zbarsky
b3c9f5af96 Bug 1324618 part 5. Add a way to pass a different style context for later continuations to UpdateStyleOfOwnedChildFrame. r=emilio
We're going to want this for first-letter, because the primary frame and its continuations have different styles.

MozReview-Commit-ID: 6ZjtnRWXgd9
2017-06-26 23:35:08 -07:00
Wes Kocher
350e28ef70 Merge m-c to autoland, a=merge
MozReview-Commit-ID: 1dQBCh5pBY6
2017-06-22 14:21:39 -07:00
Wes Kocher
5fea640772 Merge autoland to central, a=merge
MozReview-Commit-ID: DBM5ExEXtYD
2017-06-22 14:10:19 -07:00
Thinker K.F. Li
fff8a91b03 Bug 1372863 - Fix dump message of frame tree for preserves-3d. r=mattwoodrow 2017-06-21 04:56:00 -04:00
Emilio Cobos Álvarez
fc8b78f775 Bug 1374752: Pack together the StyleSet, ChangeList and handled change hints, and use the latter with anonymous boxes while we're at it. r=heycam
MozReview-Commit-ID: DiWcUwD9po5
2017-06-20 23:21:27 +02:00
Boris Zbarsky
7d9cc57ca2 Bug 1375315. Make sure to update block pseudo-element styles on various anonymous blocks. r=emilio
MozReview-Commit-ID: HBabvfWYgdP
2017-06-22 11:24:11 -04:00
Boris Zbarsky
b5761d0213 Bug 1374761 part 1. Properly restyle the viewport and its child anonymous box when we do a restyle. r=heycam
The child anon box may be an nsHTMLScrollFrame, a nsRootBoxFrame, or a
nsSimplePageSequenceFrame.   nsHTMLScrollFrame already knows how to deal with
its anonymous box kids, nsRootBoxFrame doesn't have any, and the next changeset
will deal with anon box kids of nsSimplePageSequenceFrame.

MozReview-Commit-ID: 2ZV061EhRmc
2017-06-21 11:45:12 -04:00
Markus Stange
5c23434847 Bug 1370034 - Call SetWindowTransform with the right values from -moz-window-transform(-origin). r=dbaron
MozReview-Commit-ID: 3IVl3kdbpTd
2017-06-19 00:49:52 -04:00
Markus Stange
8683838880 Bug 1370034 - Implement UpdateWidgetProperties for top level windows and for popups, and call nsIWidget::SetWindowShadow. r=dbaron
MozReview-Commit-ID: 9ooCdDRLOSq
2017-06-16 15:08:30 -04:00
Cameron McCormack
95368ca21c Backout bug 1291457 and bug 1370034 for bustage. 2017-06-19 13:55:15 +08:00
Markus Stange
09c7505b59 Bug 1370034 - Call SetWindowTransform with the right values from -moz-window-transform(-origin). r=dbaron
MozReview-Commit-ID: 3IVl3kdbpTd
2017-06-19 00:49:52 -04:00
Markus Stange
85ce57d20a Bug 1370034 - Implement UpdateWidgetProperties for top level windows and for popups, and call nsIWidget::SetWindowShadow. r=dbaron
MozReview-Commit-ID: 9ooCdDRLOSq
2017-06-16 15:08:30 -04:00
Cameron McCormack
d5752992c6 Bug 1364361 - Part 1: Refactor frame anon box restyling machinery so it can return a list of anon boxes. r=bholley,bz
MozReview-Commit-ID: 3InVAUw8djN
* * *
Bug 1364361 - Followup to address review comment. r=me

MozReview-Commit-ID: IpdoSon9MAj
2017-06-16 17:22:33 +08:00
Sebastian Hengst
93e7f53982 Backed out changeset e7ec499159f7 (bug 1364361) for bustage at nsIFrame.h:3348: bad implicit conversion constructor for 'OwnedAnonBox'. r=backout 2017-06-16 11:19:03 +02:00