Commit Graph
140 Commits
Author SHA1 Message Date
Ting-Yu Lin 7b4e1c313a Bug 1892307 Part 2 - Remove LogicalSideBits. r=layout-reviewers,jfkthame
We can replace `mBits` with `EnumSet<LogicalSide>` in `LogicalSides` so that
`LogicalSideBits` is not relavent.

Differential Revision: https://phabricator.services.mozilla.com/D207906
2024-04-19 22:16:03 +00:00
Ting-Yu Lin 1231eafbbd Bug 1865012 Part 1 - Make accessing first-continuation and first-in-flow constant time. r=dholbert
Differential Revision: https://phabricator.services.mozilla.com/D197757
2024-01-23 23:15:01 +00:00
Norisz Fay a7b0088da8 Backed out 4 changesets (bug 1865012) for causing mochitest failure on test_gencontent.html CLOSED TREE
Backed out changeset 95d920859b91 (bug 1865012)
Backed out changeset 26f6c2765cb5 (bug 1865012)
Backed out changeset 30a3c356ebc9 (bug 1865012)
Backed out changeset 4fb71ff990ae (bug 1865012)
2024-01-23 02:17:49 +02:00
Ting-Yu Lin 612f05252d Bug 1865012 Part 1 - Make accessing first-continuation and first-in-flow constant time. r=dholbert
Differential Revision: https://phabricator.services.mozilla.com/D197757
2024-01-22 19:50:48 +00:00
Ting-Yu Lin 5c884d5335 Bug 1874897 - Revert Bug 1873530 Part 3 to fix performance regression. r=dholbert
This reverts commit https://hg.mozilla.org/mozilla-central/rev/dfcfa98a7e21
without any additional modification.

Differential Revision: https://phabricator.services.mozilla.com/D198764
2024-01-17 05:14:35 +00:00
Ting-Yu Lin 1c5fd05aca Bug 1873530 Part 3 - Unify continuation linking operations by removing SetPrevContinuation() and SetPrevInFlow(). r=jfkthame
SetNextContinuation() and SetPrevContinuation() are almost always called
together when setting up a continuation link, but the callers don't call them in
particular order. We should unify them as one method so that it's more
ergonomics and robust, especially when we do more complex work such as caching
continuations. Same reason for SetNextInFlow() and SetPrevInFlow().

We choose to merge the SetPrevContinuation() code into SetNextContinuation() for
the symmetry of SetNextSibling(). (Yes, we don't have SetPrevSibling().)

This patch doesn't change behavior.

Differential Revision: https://phabricator.services.mozilla.com/D197966
2024-01-11 19:50:58 +00:00
Ting-Yu Lin ffff05589b Bug 1873530 Part 1 - Change two if-statements to match coding style. r=dholbert
While I'm here, change `aFrame` to `mNextContinuation` so that it is clearer
that we are tweaking the bit on `mNextContinuation`.

Differential Revision: https://phabricator.services.mozilla.com/D197756
2024-01-11 19:50:57 +00:00
Ting-Yu Lin 0ee4b7ee2f Bug 1744363 Part 1 - Make nsSplittableFrame a query frame target, and add a CalcAndCacheConsumedBSize wrapper. r=dholbert
This is a preparation for Part 4 since a flex container frame needs to query a
flex item continuation's consumed block-size.

Differential Revision: https://phabricator.services.mozilla.com/D188529
2023-12-06 05:16:49 +00:00
Ting-Yu Lin d3b5b1e844 Bug 1853090 - Add ContentISize() and ContentBSize() convenience methods to nsIFrame. r=layout-reviewers,jfkthame
Differential Revision: https://phabricator.services.mozilla.com/D188157
2023-09-14 18:13:17 +00:00
Emilio Cobos Álvarez 6c324c6d1b Bug 1851868 - Refactor nsIFrame::Destroy to pass a single DestroyContext parameter. r=dholbert
This shouldn't change behavior, but it packs the two arguments to
DestroyFrom into a single thing, and makes nsIFrame::Destroy not so easy
to call without a previous context.

This is a prerequisite to pass aDestroyContext to various things that
right now just mint one, which can cause badness, see bug 1851787 and
related bugs.

It's also a bit nicer to add things there if we need to in the future.

Differential Revision: https://phabricator.services.mozilla.com/D187578
2023-09-07 11:46:30 +00:00
Narcis Beleuzu 33592fec5e Backed out changeset 55052ae7d067 (bug 1851868) for reftest failure on 1153695.html . CLOSED TREE 2023-09-07 02:42:25 +03:00
Emilio Cobos Álvarez 0698c96bd1 Bug 1851868 - Refactor nsIFrame::Destroy to pass a single DestroyContext parameter. r=dholbert
This shouldn't change behavior, but it packs the two arguments to
DestroyFrom into a single thing, and makes nsIFrame::Destroy not so easy
to call without a previous context.

This is a prerequisite to pass aDestroyContext to various things that
right now just mint one, which can cause badness, see bug 1851787 and
related bugs.

It's also a bit nicer to add things there if we need to in the future.

Differential Revision: https://phabricator.services.mozilla.com/D187578
2023-09-06 22:34:35 +00:00
Jonathan Kew d15b7edad6 Bug 1725555 - patch 1 - Cache first-continuation pointer in nsContinuingTextFrame so that accessing FirstContinuation() is constant-time. r=emilio
This is helpful when we have extremely long continuation chains, to avoid having to
follow all the back-pointers to find the primary frame. By itself it makes little
difference to the testcase here, but is a basis for the patch that follows.

Differential Revision: https://phabricator.services.mozilla.com/D122998
2021-08-27 16:23:24 +00:00
Emilio Cobos Álvarez ea5e22fa1f Bug 1715098 - Skip overflow containers in nsSplittableFrame::CalcAndCacheConsumedBSize. r=TYLin,dholbert
As per comments on the bug.

Differential Revision: https://phabricator.services.mozilla.com/D120010
2021-07-16 09:01:52 +00:00
Emilio Cobos Álvarez ef6e9c3f63 Bug 1677917 - Change BlockReflowInput's skipsides setup to be sane. r=mats,TYLin
Precomputing the skipBEnd bit is odd / wrong. Using the PreReflow
version causes no regression, and allows us to simplify the code.

It also reverts the test annotations added to bug 1675376 which were
caused by the extra argument to GetLogicalSkipSides() somehow.

Differential Revision: https://phabricator.services.mozilla.com/D97418
2020-11-30 17:49:04 +00:00
Razvan Maries b3a43ce709 Backed out changeset b2da4b644dd9 (bug 1677917) for perma failures on break-at-end-container-edge-000.html. CLOSED TREE 2020-11-21 19:23:33 +02:00
Emilio Cobos Álvarez c758e812ea Bug 1677917 - Change BlockReflowInput's skipsides setup to be sane. r=mats,TYLin
Precomputing the skipBEnd bit is odd / wrong. Using the PreReflow
version causes no regression, and allows us to simplify the code.

It also reverts the test annotations added to bug 1675376 which were
caused by the extra argument to GetLogicalSkipSides() somehow.

Differential Revision: https://phabricator.services.mozilla.com/D97418
2020-11-21 15:53:16 +00:00
Emilio Cobos Álvarez 11b409ac36 Bug 1677920 - Remove writing mode argument from CalcAndCacheConsumedBSize(). r=TYLin
Always matches the frame's writing-mode.

Differential Revision: https://phabricator.services.mozilla.com/D97390
2020-11-18 11:06:29 +00:00
Emilio Cobos Álvarez 14c2fc9d28 Bug 1675376 - Cache consumed BSize in a frame property for non-first continuations. r=mats
This removes virtually all the time under ConsumedBSize. See the comment for
what ensures the correctness of the cache: Basically, we refresh the cache for
a frame continuation every time we reflow it, which means that when next
continuations go look for it it should be up-to-date (we rely on that already
because we're looking at the content rect).

Differential Revision: https://phabricator.services.mozilla.com/D97357
2020-11-18 11:04:35 +00:00
Emilio Cobos Álvarez f4d0e68ac9 Bug 1675376 - Pass consumed bsize to ApplySkipSides when during reflow. r=mats
The caller has it, so let's pass it down so that we don't need to compute it on
demand.

Differential Revision: https://phabricator.services.mozilla.com/D97356
2020-11-18 11:04:27 +00:00
Bogdan Tara 1e43b9d1ba Backed out 3 changesets (bug 1675376) for asan crashtest failures CLOSED TREE
Backed out changeset b276c591ea2d (bug 1675376)
Backed out changeset 20d5c7217304 (bug 1675376)
Backed out changeset e3aa6fb62422 (bug 1675376)
2020-11-18 08:00:38 +02:00
Emilio Cobos Álvarez 8275e5a5ec Bug 1675376 - Cache consumed BSize in a frame property for non-first continuations. r=mats
This removes virtually all the time under ConsumedBSize. See the comment for
what ensures the correctness of the cache: Basically, we refresh the cache for
a frame continuation every time we reflow it, which means that when next
continuations go look for it it should be up-to-date (we rely on that already
because we're looking at the content rect).

Differential Revision: https://phabricator.services.mozilla.com/D97357
2020-11-18 03:08:13 +00:00
Emilio Cobos Álvarez d987cbada6 Bug 1675376 - Pass consumed bsize to ApplySkipSides when during reflow. r=mats
The caller has it, so let's pass it down so that we don't need to compute it on
demand.

Differential Revision: https://phabricator.services.mozilla.com/D97356
2020-11-18 03:08:06 +00:00
Ting-Yu Lin 9043d0cab7 Bug 1668411 - Change IS_TRUE_OVERFLOW_CONTAINER macro into a nsIFrame's inline method. r=emilio
`IS_TRUE_OVERFLOW_CONTAINER` is defined in nsContainerFrame.h, but is
already used in several places in nsIFrame. It really should be an
nsIFrame's method.

Differential Revision: https://phabricator.services.mozilla.com/D92007
2020-10-01 02:39:40 +00:00
Kagami Sascha Rosylight 93741338a8 Bug 1630704 - Part 27: Remove nsFrame from inheritance chain r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D81864
2020-07-06 22:29:42 +00:00
Kagami Sascha Rosylight 99ec3be22d Bug 1647525 - Use HasAnyStateBits() in nsSplittableFrame r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D81207
2020-06-27 13:17:29 +00:00
L. David Baron df7fe43daf Bug 1631941 - Add DEBUG-only mWritingMode to mozilla::LogicalSides. r=jfkthame
Differential Revision: https://phabricator.services.mozilla.com/D71885
2020-04-22 23:52:08 +00:00
Stefan Hindli e00598b7d5 Backed out 3 changesets (bug 1631941) for mass build bustages CLOSED TREE
Backed out changeset 8a7e21f2b5f9 (bug 1631941)
Backed out changeset 6a53d6f1ec95 (bug 1631941)
Backed out changeset 91ac0b7e571b (bug 1631941)
2020-04-23 02:14:30 +03:00
L. David Baron 7571ae9a34 Bug 1631941 - Add DEBUG-only mWritingMode to mozilla::LogicalSides. r=jfkthame
Differential Revision: https://phabricator.services.mozilla.com/D71885
2020-04-22 17:54:28 +00:00
Stefan Hindli 5c01988907 Backed out 3 changesets (bug 1631941) for causing valgrind bustages in /builds/worker/workspace/obj-build/dist/include/mozilla/WritingModes CLOSED TREE
Backed out changeset 17391a8c2a05 (bug 1631941)
Backed out changeset b0b425ffb6e9 (bug 1631941)
Backed out changeset f4c1d7dcca50 (bug 1631941)
2020-04-22 20:13:06 +03:00
L. David Baron 92208d6042 Bug 1631941 - Add DEBUG-only mWritingMode to mozilla::LogicalSides. r=jfkthame
Differential Revision: https://phabricator.services.mozilla.com/D71885
2020-04-22 15:55:54 +00:00
Ting-Yu Lin 73280728ea Bug 1624514 Part 2 - Generalize nsIFrame::ContentBSize() to be ContentSize(). r=AlaskanEmily
To get the logical content size of a frame, some callers use
GetContentRectRelativeToSelf().Size() and then convert it to
LogicalRect. We really should generalize ContentBSize(), and provide
ContentSize() for such purpose.

Differential Revision: https://phabricator.services.mozilla.com/D68065
2020-03-25 18:12:25 +00:00
Ting-Yu Lin 435d407cfb Bug 1603088 Part 1 - Remove "max-block-size: 100%" for -moz-column-set and -moz-column-content. r=dbaron
Simply remove "max-block-size: 100%" for -moz-column-set and
-moz-column-content breaks abspos-breaking-dynamic-{001,002,003}.html.
We need to reflow ColumnSetWrapper's children whenever
ColumnSetWrapper's block-size or max-block-size is changed because both
size affect the available block-size for ColumnSetWrapper's children.

We set `NS_FRAME_CONTAINS_RELATIVE_BSIZE` for ColumnSetWrapperFrame so
that it will set itself dirty in `selfDirty` in
`nsBlockFrame::ReflowDirtyLines`, and mark its lines dirty if
`aState.mReflowInput.IsBResize()` is true.

Differential Revision: https://phabricator.services.mozilla.com/D58731
2020-01-08 02:48:12 +00:00
Bogdan Tara abf9fc5f90 Backed out 2 changesets (bug 1603088) for android crashtest failures on 1015844.html
Backed out changeset 2bd2d03f3c45 (bug 1603088)
Backed out changeset d4cc66fb7593 (bug 1603088)
2020-01-08 02:04:06 +02:00
Ting-Yu Lin 76cbdee801 Bug 1603088 Part 1 - Remove "max-block-size: 100%" for -moz-column-set and -moz-column-content. r=dbaron
Simply remove "max-block-size: 100%" for -moz-column-set and
-moz-column-content breaks abspos-breaking-dynamic-{001,002,003}.html.
We need to reflow ColumnSetWrapper's children whenever
ColumnSetWrapper's block-size or max-block-size is changed because both
size affect the available block-size for ColumnSetWrapper's children.

We set `NS_FRAME_CONTAINS_RELATIVE_BSIZE` for ColumnSetWrapperFrame so
that it will set itself dirty in `selfDirty` in
`nsBlockFrame::ReflowDirtyLines`, and mark its lines dirty if
`aState.mReflowInput.IsBResize()` is true.

Differential Revision: https://phabricator.services.mozilla.com/D58731
2020-01-07 19:17:27 +00:00
Mats Palmgren 0be3a22806 Bug 1602430 - Apply min/max-height correctly for fragmented boxes with no height specified. r=TYLin
Depends on D56738

Differential Revision: https://phabricator.services.mozilla.com/D57561
2019-12-17 23:13:13 +00:00
Mats Palmgren 660fcb26bb Bug 471015 - [css-break] Implement <fieldset> fragmentation. r=TYLin
Differential Revision: https://phabricator.services.mozilla.com/D53709
2019-11-25 21:45:22 +00:00
Brindusan Cristian a43400a7da Backed out changeset 0186165ee1d8 (bug 471015) for reftest failures at box-shadow/611574-1.html. CLOSED TREE 2019-11-25 21:40:19 +02:00
Mats Palmgren 2e0c35f477 Bug 471015 - [css-break] Implement <fieldset> fragmentation. r=TYLin
Differential Revision: https://phabricator.services.mozilla.com/D53709
2019-11-25 18:05:16 +00:00
Ting-Yu Lin 998801103f Bug 1579565 Part 2 - Skip block-end side if the frame has a column-span sibling. r=dbaron
Also, clean up the wording and variable names when aReflowInput is used.

Differential Revision: https://phabricator.services.mozilla.com/D47676
2019-10-03 17:26:06 +00:00
Ting-Yu Lin 41ab03b21d Bug 1523582 Part 3 - Adjust GetLogicalSkipSides() to check non-fluid continuations. r=dbaron
Frames split by column-span are linked together by non-fluid
continuations. We want GetLogicalSkipSides() to recognize that. The
documentation in nsIFrame::GetLogicalSkipSides() already
uses *continuation* rather than *in-flow*, so no need to adjust the
wording.

However, after patching GetLogicalSkipSides(), the first column-content
after a column-span split starts to skip the block-start side because it
has a previous continuation. We want the content in the first column to
consider applying its block-start margin. Hence the modification in
BlockReflowInput's constructor. (Note that the first column-content is
always a block-start margin-root, which is fixed in the previous part.)
This is necessary to avoid breaking
testing/web-platform/tests/css/css-multicol/multicol-span-all-margin-bottom-001.xht

In multicol-span-all-children-height-006.html, add "margin-top: 1em;" to
the container to expose the bug if we still check GetPrevInFlow() rather
than GetPrevContinuation() when computing applyBStartMargin in
nsBlockFrame::ReflowBlockFrame().

Differential Revision: https://phabricator.services.mozilla.com/D43905
2019-09-09 17:42:14 +00:00
Emilio Cobos Álvarez 6fa0204537 Bug 1571460 - Set prev-in-flow before calling nsFrame::Init. r=TYLin
Parts of nsFrame::Init or code called by it should be able to rely on the
invariant that, if the frame has the NS_FRAME_OUT_OF_FLOW bit, the first-in-flow
frame has a placeholder property.

Alternatively to this patch, the NS_FRAME_OUT_OF_FLOW frame bit could be
propagated later, as it used to be.

Differential Revision: https://phabricator.services.mozilla.com//D40815
2019-08-07 16:55:34 +02:00
Cosmin Sabou 023a6f9f48 Backed out changeset 3f4421e34ab4 (bug 1571460) for assertion failures on nsTextFrame.cpp. CLOSED TREE 2019-08-07 14:57:58 +03:00
Emilio Cobos Álvarez 399117f0d1 Bug 1571460 - Set prev-in-flow before calling nsFrame::Init. r=TYLin
Parts of nsFrame::Init or code called by it should be able to rely on the
invariant that, if the frame has the NS_FRAME_OUT_OF_FLOW bit, the first-in-flow
frame has a placeholder property.

Alternatively to this patch, the NS_FRAME_OUT_OF_FLOW frame bit could be
propagated later, as it used to be.

Differential Revision: https://phabricator.services.mozilla.com/D40815
2019-08-07 10:44:54 +00:00
Ting-Yu Lin ac3684f84c Bug 1506293 Part 2 - Fix the block-size distribution across column-span split. r=dbaron
In frame construction, a block can be split by column-spans into several
fragments and each of the fragments is chained together by non-fluid
continuations. Later in reflow, each fragment can create its own fluid
continuations due to reasons such as the constraint of its available
block-size.

The main idea of this patch is that we calculate the block's final
block-size by shrinkwrapping the children for every fragment except for
those fluid continuations after the final column-span. To do that, we
need to correctly tag each non-column-span-wrappers
nsIFrame::HasColumnSpanSiblings() except the last one.

We also need to modify nsSplittableFrame::ConsumedBSize() so that it
includes the block-size for both fluid and non-fluid continuations.

Differential Revision: https://phabricator.services.mozilla.com/D38124
2019-07-30 18:03:25 +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
Sylvestre Ledru e5a134f73a Bug 1511181 - Reformat everything to the Google coding style r=ehsan a=clang-format
# ignore-this-changeset
2018-11-30 11:46:48 +01:00
Ting-Yu Lin ff149eedd4 Bug 916972 - Eliminate nsIFrame::GetSplittableType() completely. r=mats,dholbert
Currently, GetSplittableType() is called only in
nsCSSFrameConstructor::CreateContinuingFrame(). The splittable concrete frames
should inherit from nsSplittableFrame, and must explicitly create continuing
frame in CreateContinuingFrame(). Thus, no need to maintain GetSplittableType().

Differential Revision: https://phabricator.services.mozilla.com/D10798
2018-11-05 19:11:12 +00:00
Mats Palmgren 616f910f82 Bug 1400618 part 1 - Collect NAC / generated content and call DestroyAnonymousContent / UnbindFromTree on those after the frames are destroyed. r=bz
MozReview-Commit-ID: 2trDgeJPw25
2017-11-07 01:20:33 +01:00
Daniel Holbert 8fea3c215f Bug 1412346 part 5: (automated patch) Switch a bunch of C++ files in layout to use our standard mode lines. r=jfkthame
This patch was generated automatically by the "modeline.py" script, available
here: https://github.com/amccreight/moz-source-tools/blob/master/modeline.py

For every file that is modified in this patch, the changes are as follows:
 (1) The patch changes the file to use the exact C++ mode lines from the
     Mozilla coding style guide, available here:
https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Coding_Style#Mode_Line

 (2) The patch deletes any blank lines between the mode line & the MPL
     boilerplate comment.

 (3) If the file previously had the mode lines and MPL boilerplate in a
     single contiguous C++ comment, then the patch splits them into
     separate C++ comments, to match the boilerplate in the coding style.

MozReview-Commit-ID: EuRsDue63tK
2017-10-27 10:33:53 -07:00