Before this change, Servo used one code path that computed the position
of flows with `position: static` or `position: relative` and another
separate code path that computed the position of flows with `position:
absolute` or `position: fixed`. The latter code attempted to duplicate
the former code to determine the static position of hypothetical boxes,
but this was both fragile and incorrect in the case of hypothetical
boxes nested inside floats. In fact, it's impossible to determine the
static position of an absolute flow relative to its containing block at
inline-size assignment time, because that static position could depend
on a float that cannot be placed until block-size assignment!
This patch changes block layout to use the same code path for static
positioning of regular flows and static positioning of absolute flows
where applicable. This both simplifies the code and improves its
efficiency, since it allows the `hypothetical_position` field and
`static_block_offsets` data structure to be removed. Moreover, it
improves correctness in the above case (which the new reftest checks).
This allows the sidebar in Facebook Timeline to be positioned properly.
r? @glennw
Source-Repo: https://github.com/servo/servo
Source-Revision: bdcf606f4802e5b1ab3ee251b45ee1e81800359a
Extracted out of #5649
* add more hyperlinks to associated specification for structs/methods
* follow redirects and update links
* replace broken links
* removal of WHATWG multipage page name since the page name is not
guaranteed to be stable
Source-Repo: https://github.com/servo/servo
Source-Revision: 3dc25af9e121db010e4385efb3863ba45b0e0bcf
Extracted this out of #5649
This commit was created with the following commands:
```
find . -iname "*.webidl" -type f -print0 | xargs -0 sed -i '' 's/http:\(.*\)whatwg.org/https:\1whatwg.org/g'
```
```
find . -iname "*.rs" -type f -print0 | xargs -0 sed -i '' 's/http:\(.*\)whatwg.org/https:\1whatwg.org/g'
```
Source-Repo: https://github.com/servo/servo
Source-Revision: 4997d3a112354a407365fede1ab1944834a2e13c
Image used to be a trait, but no longer is, so boxing it is no longer
necessary. Fixes#5639.
Source-Repo: https://github.com/servo/servo
Source-Revision: b7f59a36461e6c9eb08b8e48760168d3cb26a400
Improves "Edit links" on the Wikipedia sidebar.
r? @mbrubeck
Source-Repo: https://github.com/servo/servo
Source-Revision: 10c68e751912962ed1bbed137b00ce4511d46bda
Let me know if I should fix anything, or how I could implement a test if needed. I looked at some testing in servo/ports/command_line.rs but it did not seem to apply.
Thanks!
Source-Repo: https://github.com/servo/servo
Source-Revision: 875f07ff25eada654e5e7bf03ddce46f7d76f6c8
Some debugging reveals that the send_back_unused_buffers() quite often sends empty vectors back to the paint task. This still incurs a communication overhead though. Instead check that the there actually are buffers to send back.
Source-Repo: https://github.com/servo/servo
Source-Revision: 80851f70552c24a45755bc9ff12530b4ff80d099
This allows things like `<sup><span>Foo</span></sup>` to work and
improves Wikipedia.
r? @glennw
Source-Repo: https://github.com/servo/servo
Source-Revision: d7b6961104b517a22e01c192d4bb6a7ad5934ce8
Basically, the easiest way to describe the effect of this change is "float placement takes line height into account". It didn't before, which could lead to lines overlapping floats or floats taking up too much vertical space.
Improves Wikipedia.
r? @glennw
Source-Repo: https://github.com/servo/servo
Source-Revision: d8507cce8c3969a08974f44a9f397e75cbe3131d
As the float ceiling is relative to the border box, not the margin box,
of the parent flow, top margin must not be included.
This exposed a pre-existing bug whereby margins are discarded if a block
contains only floats and no content, affecting the tests
`float_intrinsic_height.html` and `margins_inside_floats_a.html`. As a
workaround, some invisible content has been added to the bodies of both
tests.
r? @mbrubeck
Source-Repo: https://github.com/servo/servo
Source-Revision: 1c884dc76bef440f8ccd344fab874e2e2161683b
This fixes a lot of "jumpiness" and removes the `new_line_pos` stuff.
Closes#2260.
r? @mbrubeck
cc @metajack
Source-Repo: https://github.com/servo/servo
Source-Revision: d3478954fd8e3a8374104984efb91a918b5dbb7e
As far as I can tell, this is a cut-and-paste of old buggy code from
block flows. Delegating to the correct block flow code fixes the sidebar
float placement on Guardians of the Galaxy.
r? @glennw
Source-Repo: https://github.com/servo/servo
Source-Revision: f4da0f0e94259e12adeb193fd9ecf6813457b883
The speculated inline-size of the preceding floats was forced to zero at
the wrong time if the float was itself cleared, causing it to overwrite
the speculated value. Shuffling the code around a bit fixes the problem.
r? @glennw
Source-Repo: https://github.com/servo/servo
Source-Revision: 07520de97047916f0d15c7a63b3de20eac50f010
Fixes#5460. This supports for simple focusable elements that are their own DOM anchors, like text `input` fields.
Requires servo/rust-selectors#20. r? @SimonSapin
Source-Repo: https://github.com/servo/servo
Source-Revision: b63fb0c0a7e9cd9208d66319c910750aaaac844c
@kenpratt and I moved the URL and IFrame fields from Reflow to LayoutTask, as described in #5466.
This is my first attempt at Rust, so let me know how this is!
Source-Repo: https://github.com/servo/servo
Source-Revision: e4da29b28b6efce3f84f00ef7d2d1716954c500d
There are several optimizations here:
* We make font families atoms, to allow for quicker comparisons.
* We precalculate an FNV hash of the relevant fields of the font style
structure.
* When obtaining a platform font group, we first check pointer equality
for the font style. If there's no match, we go to the FNV hash. Only
if both caches miss do we construct and cache a font group. Note that
individual fonts are *also* cached; thus there are two layers of
caching here.
15% improvement in total layout thread time for Facebook Timeline.
r? @glennw (since you last worked on `get_layout_font_group_for_style()` IIRC)
Source-Repo: https://github.com/servo/servo
Source-Revision: ba0d28e0023fce2003d64b9caf97fcdbeb7cdb28
I think this should have been changed in #3618 but was missed. r? @pcwalton
I wasn't able to come up with a good test case for this, partly because of other bugs related to floats and formatting contexts.
Source-Repo: https://github.com/servo/servo
Source-Revision: b79d06c8d2363ebd6bdb171a943d1c932a6cea68
Transition events are not yet supported, and the only animatable
properties are `top`, `right`, `bottom`, and `left`. However, all other
features of transitions are supported. There are no automated tests at
present because I'm not sure how best to test it, but three manual tests
are included.
r? @glennw
Source-Repo: https://github.com/servo/servo
Source-Revision: ebdf1d494b6c986e6dfcb7d8fd3f0ffa126523ed
This allows us to do layout off the main thread, which is necessary for
transitions.
r? @glennw
Source-Repo: https://github.com/servo/servo
Source-Revision: 46d4ef81674d1de4b9066185c7e63c32b04c167e
50% layout improvement in a photo gallery demo I'm working on.
r? @mbrubeck
Source-Repo: https://github.com/servo/servo
Source-Revision: 2a9f29f3824479da357d5cded2dc0847e6854813
- Most of util::memory has been moved into profile::mem, though the
`SizeOf` trait and related things remain in util::memory. The
`SystemMemoryReporter` code is now in a submodule
profile::mem::system_reporter.
- util::time has been moved entirely into profile::time.
Source-Repo: https://github.com/servo/servo
Source-Revision: d1268ec9c6633684270015e7b2619181aeb47b8b
The new `Vec::append` method is clearer and potentially faster.
Source-Repo: https://github.com/servo/servo
Source-Revision: 646f82147946c3221a6de0e575b4750dc61d5610
Fixes deprecation warnings. Also removes a workaround for a fixed bug in Rust.
Source-Repo: https://github.com/servo/servo
Source-Revision: 2346c9b94055f84a536808e40ad0b596ee21fbf4
This fixes a bug in finding the top left corner of an RTL block in physical coordinates. (The old code used the `start` point of the `position` rect, which is not always the top left.)
It also fixes the setting of `position.start.i` in certain mixed LTR/RTL cases.
There is still a bug related to `position.size` for RTL blocks with margins. See the FIXME comments for details.
r? @pcwalton or @SimonSapin
Source-Repo: https://github.com/servo/servo
Source-Revision: b255b49e2e2246ff8bf7f8751088bfe0a0ee41a2
These changeset implements the beginnings of fine-grained measurement of Servo's data structures.
@pcwalton, @jdm: are you likely reviewers for this?
Source-Repo: https://github.com/servo/servo
Source-Revision: f093620922621e1877393b03968ed0ce767fdf12