Commit Graph

704 Commits

Author SHA1 Message Date
Emilio Cobos Álvarez
b2c12fdb27 Bug 1585882 - Fix the case where where a node with an up-to-date style loses its frame due to a DOM mutation of siblings. r=heycam
This fixes another edge-case that I thought of while debugging this, I think
this makes our behavior correct now. The comment and test-case should be
self-descriptive.

Differential Revision: https://phabricator.services.mozilla.com/D48135
2019-10-06 23:30:23 +00:00
Emilio Cobos Álvarez
7c1349401b Bug 1584285 - Add a pref to disable scroll anchoring suppression triggers on Nightly. r=dholbert
I think most of them should not be needed after bug 1561450. From our discussion
at TPAC in https://github.com/w3c/csswg-drafts/issues/4239, there should be no
reason not to do this unless we find fallout.

We need to enable the pref in tests that test these particular heuristics of
course.

Differential Revision: https://phabricator.services.mozilla.com/D47315
2019-09-26 18:57:52 +00:00
Emilio Cobos Álvarez
497067f247 Bug 1579788 - Downgrade a few assertions in beta / release as to avoid crashing there. r=masayuki
This is the only short-term fix for now until we fix editor or find a
test-case...

This will keep asserting on Nightly, but the correctness issue it'd show in
release (some pseudo-classes not matching) is better than crashing.

Differential Revision: https://phabricator.services.mozilla.com/D45575
2019-09-12 08:46:27 +00:00
Mats Palmgren
8eb8524b38 Bug 1576355 - Don't try to optimize position style changes for rel.pos. grid items. r=dholbert
Differential Revision: https://phabricator.services.mozilla.com/D43387
2019-08-26 20:00:35 +00:00
Daniel Holbert
8865537b64 Bug 1574310: clang-reformat the layout directory. (no review, just doing automated reformatting)
This patch is auto-generated by the following command:
./mach clang-format -p layout/

Differential Revision: https://phabricator.services.mozilla.com/D42218
2019-08-15 22:13:49 +00:00
Mats Palmgren
7183051087 Bug 1105868 part 1 - Use nsStyleDisplay::IsListItem() in a few places to prepare for inline list-items. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D39830
2019-08-14 14:36:18 +00:00
Sylvestre Ledru
3067b10938 Bug 1519636 - Reformat recent changes to the Google coding style r=Ehsan
# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D41559
2019-08-13 07:15:25 +00:00
Emilio Cobos Álvarez
2614121dc3 Bug 1568778 - Do suppress adjustments when switching an undisplayed element to be abspos. r=dholbert
One of the issues with the test-case in this bug is that the page consumes a ton
of CPU due to scroll anchor adjustments being triggered from scroll events,
which in turn cause other scroll events to fire.

This happens in Chrome as well (just scroll to the bottom of the test-case, and
do `addEventListener("scroll", () => console.log("scroll"))` on devtools. But I
think it's worth fixing. This patch fixes it and overall I think it's a slightly
better approach to suppress adjustments than what we're doing.

Differential Revision: https://phabricator.services.mozilla.com/D39339
2019-07-29 13:44:46 +00:00
Emilio Cobos Álvarez
c08656effa Bug 1456358 - Inhibit RecomputePosition when descendants depend on the out of flow position. r=dbaron
Differential Revision: https://phabricator.services.mozilla.com/D38194
2019-07-29 13:43:29 +00:00
Dan Glastonbury
6620ea125c Bug 1568107 - Collect nsRefreshDriver::Tick phase weighted telemetry. r=mattwoodrow,heycam
For a slow tick, where the processing time takes longer than 1/60th sec, record
telemetry for the percentage of that time spent in each sub-system processing
Events, Style), Reflow, Display and Paint.

Differential Revision: https://phabricator.services.mozilla.com/D38962
2019-07-25 01:31:41 +00:00
Emilio Cobos Álvarez
da4413b9fe Bug 1567108 - Remove a FIXME that is not relevant. r=hiro
We get hints for both frames, so we tag both.

Depends on D38599

Differential Revision: https://phabricator.services.mozilla.com/D38600
2019-07-19 04:36:53 +00:00
Emilio Cobos Álvarez
abf5040b8e Bug 1567108 - Revert RestyleManager changes from bug 1527210. r=hiro
They're wrong. When a property that affects the parent frame changes, we get a
hint for both frames. This fixes this bug.

Depends on D38598

Differential Revision: https://phabricator.services.mozilla.com/D38599
2019-07-19 04:39:16 +00:00
Emilio Cobos Álvarez
f1d1fa9943 Bug 1567108 - Fix bug 1527210 in a simpler way. r=hiro
This is IMO the right RestyleManager change for what bug 1527210 tried to fix.

We need to apply the animation hints to the primary frame, not the style frame.
The other non-RestyleManager bits of that bug still apply and look fine to me.

Differential Revision: https://phabricator.services.mozilla.com/D38598
2019-07-19 04:38:53 +00:00
Emilio Cobos Álvarez
7fb55258d9 Bug 1543599 - Don't suppress scroll anchoring adjustments when switching display to none. r=dholbert
Since that means that we won't suppress them when switching display back (since
we have no frame to pull the old style from).

We may want to match Chrome more exactly and don't do this any time `display`
changes (which if I'm reading their code correctly is what they do...).

But for now I've done the minimal thing and added a test.

Differential Revision: https://phabricator.services.mozilla.com/D38094
2019-07-15 17:53:20 +00:00
Chris Pearce
016d4915b5 Bug 1351924 - Keep separate flags for whether block-size has changed and whether percentages derived from the block-size have changed, and make better decisions about what needs reflow. r=dholbert
This reduces a bit of code complexity, fixes bugs where we weren't
reflowing enough, and optimizes additional cases that we couldn't
optimize in the past.

Co-authored-by: Chris Pearce <cpearce@mozilla.com>
Co-authored-by: L. David Baron <dbaron@dbaron.org>

Differential Revision: https://phabricator.services.mozilla.com/D37610
2019-07-14 01:04:31 +00:00
Emilio Cobos Álvarez
46c313a0d3 Bug 1472546 - Make the RecomputePosition optimization work on vertical-rl writing-modes. r=jfkthame
It wasn't working because it was testing inline size == NS_UNCONSTRAINEDSIZE
rather than block size, so it was taking always the reflow path.

The attached test is on par with the vertical-lr / horizontal-tb cases with
this patch, but takes way over 10s without it.

Differential Revision: https://phabricator.services.mozilla.com/D37437
2019-07-09 20:38:45 +00:00
Cameron McCormack
e738e1249d Bug 1554571 - Part 1: Remove unused argument from Servo_ResolveStyle. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D33121
2019-06-27 07:22:13 +00:00
Mihai Alexandru Michis
67c201f6ab Backed out 4 changesets (bug 1554571) for causing failures in minimal-xul.css
Backed out changeset 1cc4e6374b8a (bug 1554571)
Backed out changeset 30728685499e (bug 1554571)
Backed out changeset c14e9c381345 (bug 1554571)
Backed out changeset a2143551d7bc (bug 1554571)
2019-06-27 07:09:55 +03:00
Cameron McCormack
d883ec22a0 Bug 1554571 - Part 1: Remove unused argument from Servo_ResolveStyle. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D33121
2019-06-27 00:24:54 +00:00
Emilio Cobos Álvarez
15abab5197 Bug 1559627 - More reliably detect position changes during reframe. r=rhunt
Differential Revision: https://phabricator.services.mozilla.com/D35157
2019-06-24 15:44:21 +00:00
Emilio Cobos Álvarez
e5a9b2572b Bug 1505489 - Invalidate the style of the element when the part attribute changes. r=heycam
I think that, given ::part() right now (without forwarding) cannot affect
descendants (and eager pseudo-elements are handled as part of the normal element
restyling process), it is not worth the effort to add more complex invalidation.

But we can always re-evaluate.

Depends on D32642

Differential Revision: https://phabricator.services.mozilla.com/D32643
2019-06-11 17:42:00 +00:00
Ting-Yu Lin
697f516e19 Bug 1549267 Part 1 - Remove NS_INTRINSICSIZE and NS_AUTOHEIGHT. r=mats
This patch is generated by the following steps.

1) Manually delete NS_INTRINSICSIZE and NS_AUTOHEIGHT in LayoutConstants.

2) Run the following script.
```
  #!/bin/bash
  function rename() {
      find .\
           -type f\
           ! -path "./obj*"\
           ! -path "./.git"\
           ! -path "./.hg"\
           \( -name "*.cpp" -or\
              -name "*.h" \)\
              -exec sed -i -e "s/$1/$2/g" "{}" \;
  }

  rename NS_INTRINSICSIZE NS_UNCONSTRAINEDSIZE
  rename NS_AUTOHEIGHT NS_UNCONSTRAINEDSIZE
```

3) ./mach clang-format

Differential Revision: https://phabricator.services.mozilla.com/D31696
2019-06-04 23:41:20 +00:00
Brian Grinstead
3d1d6e7224 Bug 1556857 - Return true in AttributeChangeRequiresSubtreeRestyle whenever lwtheme attrs change in any chrome doc, not just those with XUL document elements r=emilio
In preparation for an <html> root node in browser.xhtml, we need to react to lwtheme changes correctly.

Differential Revision: https://phabricator.services.mozilla.com/D33693
2019-06-04 20:43:51 +00:00
Daniel Varga
f7eb62d36e Backed out changeset afa5d3807c8b (bug 1556857) for mochitest failure at builds/worker/workspace/build/src/obj-firefox/dist/include/mozilla/RefPtr.h:268. On a CLOSED TREE 2019-06-05 02:24:07 +03:00
Brian Grinstead
558087d8ed Bug 1556857 - Return true in AttributeChangeRequiresSubtreeRestyle whenever lwtheme attrs change in any chrome doc, not just those with XUL document elements r=emilio
In preparation for an <html> root node in browser.xhtml, we need to react to lwtheme changes correctly.

Differential Revision: https://phabricator.services.mozilla.com/D33693
2019-06-04 20:43:51 +00:00
Cameron McCormack
8dec0f541b Bug 1553378 - Devirtualize calls to GetText() / TextLength() when we know we have a Text node. r=smaug,jfkthame
Differential Revision: https://phabricator.services.mozilla.com/D32100
2019-05-22 15:18:48 +10:00
Razvan Maries
8ac19c8776 Backed out changeset 82b18d61da00 (bug 1553378) for build bustages. CLOSED TREE 2019-05-24 06:50:14 +03:00
Cameron McCormack
2db2a234a8 Bug 1553378 - Devirtualize calls to GetText() / TextLength() when we know we have a Text node. r=smaug,jfkthame
Differential Revision: https://phabricator.services.mozilla.com/D32100
2019-05-24 03:18:44 +00:00
Emilio Cobos Álvarez
433868d057 Bug 1544242 - Cleanup selector-matching for nested pseudo-elements, match ::slotted correctly when there's no selector before it, and add tests. r=heycam,mats
D29542 fixed the bogus checks that was making nested pseudo-elements match
author rules. This adds tests and ends up being just a cleanup, though as it
turns out we it also fixes an issue with ::slotted() matched from
Element.matches.

Differential Revision: https://phabricator.services.mozilla.com/D27529
2019-05-24 01:09:15 +00:00
Masayuki Nakano
f041746218 Bug 253889 - part 2: Move all methods and public structs of nsIPresShell into mozilla::PresShell r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D29311
2019-05-01 02:27:53 +00:00
Noemi Erli
35ebb8f0ff Backed out changeset 8c89fd37b79d (bug 1544242) for failures in browser_rules_shadowdom_slot_rules.js CLOSED TREE 2019-05-01 22:03:06 +03:00
Emilio Cobos Álvarez
538690d819 Bug 1544242 - Fix selector-matching for nested pseudo-elements. r=heycam,mats
We always include the combinator for pseudo-elements now (not including it was
just an optimization) in order to not match when nested pseudo-elements are
involved.

We could add a more generic check in `matches_simple_selector` like:

```
if element.is_pseudo_element() {
    match *selector {
        Component::PseudoElement(..) |
        Component::NonTSPseudoClass(..) => {},
        _ => return false,
    }
}
```

But even that wouldn't be enough to make selectors like `:hover::marker` not
match on the `::before::marker` pseudo-element, plus that code is really hot.

So for now do the check on the `next_element_for_combinator` function. It's a
bit hacky but it's the best I could came up with...

While at it, simplify some checks to use is_pseudo_element() instead of
implemented_pseudo_element() directly.

Only the Rust patch as-is would make markers for ::before and ::after on list
items not show up, so we also need to switch ::marker to use ProbeMarkerStyle()
rather than ProbePseudoElementStyle(), since the marker should exist even if it
matches no rules.

Differential Revision: https://phabricator.services.mozilla.com/D27529
2019-05-01 17:19:08 +00:00
Masayuki Nakano
70415b08f2 Bug 1547621 - Move all inline methods of nsIPresShell into mozilla::PresShell r=smaug
And also this patch moves some related methods which use the inline methods
and member variables used only by them.

Differential Revision: https://phabricator.services.mozilla.com/D29201
2019-04-30 01:52:53 +00:00
Masayuki Nakano
12b5544904 Bug 1545342 - part 2: Make some public enum of nsIPresShell move to mozilla namespace and defined as enum class in PresShellForwards.h r=smaug
This patch moves some `enum` in `nsIPresShell` which are in public scope into
`mozilla` namespace and change them as `enum class`es.

Unfortunately, only "where to scroll" enum is just defines constants of
percentages of scroll destination.  Therefore, this patch makes only them
as `static const`.

Differential Revision: https://phabricator.services.mozilla.com/D28606
2019-04-25 05:04:15 +00:00
Ting-Yu Lin
fbf66d03ae Bug 1546223 Part 4 - Mechanically replace pointer with Maybe for ReflowInput's optional containing block size. r=dholbert
There's no behavior change in this patch.

Differential Revision: https://phabricator.services.mozilla.com/D28426
2019-04-24 17:35:31 +00:00
Brian Birtles
6c9dbb3cd8 Bug 1545707 - Dispatch cancel events for transitions/animations canceled on ::marker pseudo elements when the become no longer rendered; r=mats
Differential Revision: https://phabricator.services.mozilla.com/D28176
2019-04-22 00:54:29 +00:00
Masayuki Nakano
394fc8aa9f Bug 1544343 - part 3: Make layout use mozilla::PresShell instead of nsIPresShell as far as possible r=emilio
This patch changes remaining things under `layout/`.  However, there are some
places which still need to use `nsIPresShell`.  That will be fixed in a
follow up bug.

Differential Revision: https://phabricator.services.mozilla.com/D27477
2019-04-16 07:25:10 +00:00
Ting-Yu Lin
e9811a10b3 Bug 1543571 Part 1 - Replace "reflow state" with "reflow input". r=dholbert
This patch is generated by the following script on Linux:

function rename() {
    find .\
         -type f\
         ! -path "./obj*"\
         ! -path "./.git"\
         ! -path "./.hg"\
         \( -name "*.cpp" -or\
            -name "*.h" \)\
            -exec sed -i -e "s/$1/$2/g" "{}" \;
}
rename "reflow state" "reflow input"

Differential Revision: https://phabricator.services.mozilla.com/D27022
2019-04-11 20:27:37 +00:00
Masayuki Nakano
edcab6281e Bug 1540930 - Make nsPresContext use mozilla::PresShell directly rather than via nsIPresShell r=emilio
`nsPresContext` should use `mozilla::PresShell` directly instead of
`nsIPresShell`.  This patch makes it.

Unfortunately, `nsPresContext` and `nsIFrame` have `PresShell()`.  Therefore,
we cannot use `PresShell*` in its methods so that this patch uses `mozilla::`
namespace prefix.

It might be better to rename them as `PresShellPtr()` in another bug.

Differential Revision: https://phabricator.services.mozilla.com/D25721
2019-04-03 12:40:26 +00:00
Emilio Cobos Álvarez
5d9c43fd02 Bug 1538589 - Fix ::marker invalidation when we need to potentially insert a marker as a result of a style change. r=mats
Differential Revision: https://phabricator.services.mozilla.com/D24888
2019-03-28 13:50:13 +00:00
Mats Palmgren
61c15a1dde Bug 1538618 - [css-pseudo] implement animation support for ::marker pseudos. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D25003
2019-03-26 05:48:26 +01:00
Mats Palmgren
127f3ae120 Bug 205202 part 1 - [css-lists][css-pseudo] Add support for the ::marker pseudo element on list items. Alias :-moz-list-bullet/number to that in the parser. r=emilio 2019-03-24 23:13:53 +01:00
Ting-Yu Lin
e8249b70eb Bug 1534146 - Do not call NS_RemoveSubsumedHints if the frame is a column-span. r=emilio
We avoid removing subsumed hints for out-of-flow and column-span frames
in RestyleManager::ProcessPostTraversal(). We should do something
similar here.

Differential Revision: https://phabricator.services.mozilla.com/D24578
2019-03-22 23:36:59 +00:00
violet
66313b7caf Bug 1537708 - Clean up NS_STATE_IS_OUTER_SVG flag in favor of IsSVGOuterSVGFrame r=longsonr
NS_STATE_IS_OUTER_SVG is redundant, we clean it up and use
nsIFrame::IsSVGOuterSVGFrame() instead.

Differential Revision: https://phabricator.services.mozilla.com/D24330
2019-03-22 02:23:35 +00:00
Mats Palmgren
b7af146a93 Bug 1535986 - Skip recomputing the position for frames that have a pending reflow. r=dholbert
Differential Revision: https://phabricator.services.mozilla.com/D23971
2019-03-18 16:25:28 +01:00
Emilio Cobos Álvarez
af511bfedc Bug 1395964 - Make image loading changes not reframe. r=tnikkel
Bug 1472637 makes the decision of whether to construct an image frame not depend
on this, so this is sound.

We need to avoid reframing to fix this bug because otherwise we lose track of
the previously painted image.

Differential Revision: https://phabricator.services.mozilla.com/D23127
2019-03-18 16:18:52 +01:00
Emilio Cobos Álvarez
aba0c1954b Bug 1472637 - Don't display alt text while loading, to match other UAs. r=tnikkel
Differential Revision: https://phabricator.services.mozilla.com/D18518
2019-03-18 15:15:13 +00:00
Brian Birtles
c7eb7709e4 Bug 1518816 - Rename EffectSet::GetEffectSet(const nsIFrame*) to make it more clear what it does; r=hiro
Differential Revision: https://phabricator.services.mozilla.com/D23286
2019-03-18 04:12:14 +00:00
Emilio Cobos Álvarez
cf0e6ff153 Bug 1533963 - Use a single RestyleHint representation. r=heycam
Differential Revision: https://phabricator.services.mozilla.com/D22828
2019-03-14 11:47:50 +00:00
longsonr
579fe3fd0a Bug 1531578 - don't process nsChangeHint_UpdateSubtreeOverflow for nondisplay frames r=dholbert 2019-03-09 16:01:31 +00:00