Commit Graph

388 Commits

Author SHA1 Message Date
Clark Gaebel
49526d8143 servo: Merge #4020 - [gfx/style] Implement border-radius (from cgaebel:border-radius); r=SimonSapin
This patch is a first stab at implementing border-radius. It looks fine as long as
the border isn't an ellipse (that might not even parse yet), and the border-widths
around a border-radius are the same.

Here's a cool screenshot!

![](https://www.dropbox.com/s/gdtmgjrlnf82gzz/Screenshot%202014-11-12%2018.03.29.png?dl=0)

r? @pcwalton @SimonSapin

Source-Repo: https://github.com/servo/servo
Source-Revision: 3775e686e10f1cbabd01217af1b0ea197b96ca06
2014-12-02 05:01:08 -07:00
Patrick Walton
31c2b7b954 servo: Merge #4162 - layout: Stop having text alignment stomp on layerization flags (from pcwalton:text-align-flags); r=kmcallister
Fixes the blank spaces showing up in Wikipedia.

r? @kmcallister

Source-Repo: https://github.com/servo/servo
Source-Revision: 9afdce4405f0f5998c81eae83bbb527d0e95ec8e
2014-12-01 12:12:55 -07:00
Tetsuharu OHZEKI
39f9a11d43 servo: Merge #4130 - Make callers of ${Derived}::${base}() use casts instead (from saneyuki:cast); r=Manishearth
Fix #4124

This also introduce `BarCast::from_actual()` which is used for up-cast for dom's actual data types (non JS pointer values).

Source-Repo: https://github.com/servo/servo
Source-Revision: 82050d1e535681ea993e4290d02bcf4b9f4ee5a2
2014-11-28 09:24:44 -07:00
Glenn Watson
26917db9ab servo: Merge #4114 - Fix layout on google search results (from glennw:table-layout-fix); r=pcwalton
Source-Repo: https://github.com/servo/servo
Source-Revision: 431644bfc8208b613bf69a89826376ffb143cb58
2014-11-26 18:39:38 -07:00
Patrick Walton
97712b1795 servo: Merge #4066 - layout: Fix De Morgan's Law error in incremental reflow, allowing float/absolute layout to be idempotent again (from pcwalton:float-incremental-layout-fix); r=cgaebel,cgaebel,cgaebel
Fixes the maze solver.

r? @larsbergstrom (or anyone)

Source-Repo: https://github.com/servo/servo
Source-Revision: e38e20da6500184df19654abe34322dd3c2fd99b
2014-11-22 11:12:35 -07:00
Patrick Walton
cc2e48e82a servo: Merge #3904 - layout: Incrementalize reflow of block formatting contexts impacted by floats, and make float placement idempotent (from pcwalton:maze-solver-float-placement); r=cgaebel
r? @glennw @cgaebel

Source-Repo: https://github.com/servo/servo
Source-Revision: a07401ca4e9ab26d66c7a02e710cea143caca401
2014-11-18 16:39:25 -07:00
Claes 'Letharion' Gyllensvärd
919b87af4f servo: Merge #4015 - Bitfield to bitflags (from letharion:Bitfield-to-bitflags); r=mbrubeck
Attempt to solve #3690

I've re-rolled the changes from https://github.com/servo/servo/pull/2610, and then doen the necessary updates to get this to compile with the current snapshot of rust.

The documentation for values I've added in the bitflag are missing, because I don't know what is the appropriate text.

Source-Repo: https://github.com/servo/servo
Source-Revision: e13873bba1782580db4abe46e883b08da829cbb6
2014-11-18 11:42:32 -07:00
Patrick Walton
43e9d79efa servo: Merge #3990 - gfx: Rewrite display list construction to make stacking-contexts more first-class (from pcwalton:stacking-contexts); r=glennw
This implements the scheme described here:

    https://groups.google.com/forum/#!topic/mozilla.dev.servo/sZVPSfPVfkg

This commit changes Servo to generate one display list per stacking
context instead of one display list per layer. This is purely a
refactoring; there are no functional changes. Performance is essentially
the same as before. However, there should be numerous future benefits
that this is intended to allow for:

* It makes the code simpler to understand because the "new layer needed"
  vs. "no new layer needed" code paths are more consolidated.

* It makes it easy to support CSS properties that did not fit into our
  previous flat display list model (without unconditionally layerizing
  them):

  o `opacity` should be easy to support because the stacking context
    provides the higher-level grouping of display items to which opacity
    is to be applied.

  o `transform` can be easily supported because the stacking context
    provides a place to stash the transformation matrix. This has the side
    benefit of nicely separating the transformation matrix from the
    clipping regions.

* The `flatten` logic is now O(1) instead of O(n) and now only needs to
  be invoked for pseudo-stacking contexts (right now: just floats),
  instead of for every stacking context.

* Layers are now a proper tree instead of a flat list as far as layout
  is concerned, bringing us closer to a production-quality
  compositing/layers framework.

* This commit opens the door to incremental display list construction at
  the level of stacking contexts.

Future performance improvements could come from optimizing allocation of
display list items, and, of course, incremental display list
construction.

r? @glennw
f? @mrobinson @cgaebel

Source-Repo: https://github.com/servo/servo
Source-Revision: 397d8138e7b27541faf03d9635d7648416da4a75
2014-11-16 16:39:27 -07:00
Andrew Hobden
0442aced5e servo: Merge #3998 - Fix Table Caption infinite recursion (from Hoverbear:fix_table_caption); r=jdm
Fixed #3997.

Source-Repo: https://github.com/servo/servo
Source-Revision: 561fab57d6ac23758f0150e043be28adda12c772
2014-11-15 13:24:28 -07:00
Ms2ger
dc76d0473b servo: Merge #3979 - Use {Cell,RefCell}::as_unsafe_cell (from Ms2ger:as_unsafe_cell); r=jdm
Source-Repo: https://github.com/servo/servo
Source-Revision: 7d3b76c60d2d5bd61cf6b48d09d769df77af293d
2014-11-14 15:48:35 -07:00
Glenn Watson
71f726977a servo: Merge #3948 - Rust upgrade to rustc hash b03a2755193cd756583bcf5831cf4545d75ecb8a (from servo:rustup-20141105_2); r=Manishearth
Source-Repo: https://github.com/servo/servo
Source-Revision: c5e1b0d32e17fad29799023c85e2e73ac89c3af7
2014-11-12 20:48:31 -07:00
Martin Robinson
814dac2156 servo: Merge #3809 - Clip display list based on frame viewport (from mrobinson:display-list-optimization); r=pcwalton
Instead of creating a display list for the entire page, only create one
for an area that expands around the viewport. On my machine this makes
incremental layout of http://timecube.com 50% faster.

Source-Repo: https://github.com/servo/servo
Source-Revision: 26045d7fcbab8851fbefe2851cd904203f8fd8dd
2014-11-12 17:36:32 -07:00
Cameron Zwarich
f7ea72c955 servo: Merge #3958 - Remove unnecessary import of libgreen (from zwarich:remove-libgreen); r=Ms2ger
Source-Repo: https://github.com/servo/servo
Source-Revision: f4471f06029ac03aa2ee26aa4398daaab9c6a371
2014-11-11 03:18:38 -07:00
Glenn Watson
50abfe8c72 servo: Merge #3886 - Make media queries work with resize and page zoom (from glennw:mq); r=SimonSapin
Source-Repo: https://github.com/servo/servo
Source-Revision: f775f12fe996718af94951c3c2457d896a213d96
2014-11-06 17:24:28 -07:00
Patrick Walton
2eca46e03e servo: Merge #3696 - layout: Implement a subset of CSS linear gradients per the CSS-IMAGES specification (from pcwalton:gradients); r=SimonSapin
This implements a subset of the CSS `linear-gradient` property per the
CSS-IMAGES specification:

    http://dev.w3.org/csswg/css-images-3/

The full syntax is parsed, but only the beginning and end color stops
are used, and gradients are clamped to the nearest 90 degrees. It should
not be architecturally difficult to add the remaining pieces, but in the
interests of bounding the size of this patch that work has been left to
follow-ups.

Improves GitHub.

r? @glennw

Source-Repo: https://github.com/servo/servo
Source-Revision: ed22c9b35b64ccf7a68ed4f26b1eecfa39996efd
2014-11-06 10:00:42 -07:00
Cameron Zwarich
bcf8988465 servo: Merge #3878 - Remove InputFragment (from zwarich:remove-input-fragment); r=jdm
Fixes #3724.

Source-Repo: https://github.com/servo/servo
Source-Revision: 39960f32e49c69977b185f91e587c9947b0b9a25
2014-11-03 16:54:31 -07:00
Martin Robinson
30e2e70d2d servo: Merge #3857 - Have ContentBox(es)Queries consult the flow tree (from mrobinson:queries); r=pcwalton
Instead of looking at the display tree, have ContentBox(es)Query consult
the flow tree. This allow optimizing away parts of the display tree
later. To do this we need to be more careful about how we send reflow
requests, only querying the flow tree when possible.

Fixes #3790.

Source-Repo: https://github.com/servo/servo
Source-Revision: c9089c45c4b7d40419233b48a192d85a8ad71c99
2014-11-03 12:03:37 -07:00
Patrick Walton
d73bea71dd servo: Merge #3860 - layout: Make incremental reflow more fine-grained by introducing "reflow out-of-flow" and "reconstruct flow" damage bits (from pcwalton:reflow-out-of-flow); r=glennw
This is the last PR and most of the work for the maze solver and RoboHornet.

r? @glennw
cc @cgaebel

Source-Repo: https://github.com/servo/servo
Source-Revision: 035ff19e4a5995989c5fd34928af2a6690bb8062
2014-10-31 14:39:34 -06:00
Patrick Walton
e3cf03f334 servo: Merge #3830 - layout: Employ a persistent list data structure to avoid copying floats all the time (from pcwalton:persistent-list-floats); r=kmcallister
r? @kmcallister

Source-Repo: https://github.com/servo/servo
Source-Revision: 4418a28e7a67ade0f976405ad889b005f9d291b5
2014-10-31 14:00:39 -06:00
Patrick Walton
baebfaefbb servo: Merge #3838 - layout: Support more types of selectors for style sharing (from pcwalton:style-sharing-enhancements); r=SimonSapin
This helps avoid problems with style sharing in common cases, often
caused by the user agent stylesheet.

r? @SimonSapin

Source-Repo: https://github.com/servo/servo
Source-Revision: ba13e448cf6bef8977bb12ae96b4f2af177c6ea4
2014-10-30 16:33:36 -06:00
Clark Gaebel
aeb646be7b servo: Merge #3836 - layout: Actually calculate restyle damage while styling (from cgaebel:calculate-restyle-damage); r=pcwalton
...oops. Looks like I forgot to do this.

r? @pcwalton

Source-Repo: https://github.com/servo/servo
Source-Revision: fec3d53b1ecd170fc63eb305b6bb3c6bc3bf186d
2014-10-29 12:42:44 -06:00
Patrick Walton
7c3e67bf72 servo: Merge #3843 - layout: Promote absolute positioning, floatedness, and clearance into flags to avoid virtual calls (from pcwalton:flagify-display-and-position); r=glennw
These were showing up really high in the maze solver profile.

r? @glennw

Source-Repo: https://github.com/servo/servo
Source-Revision: 9f248378f06d4de7c0df01b64e93edcc4de208cf
2014-10-28 20:42:38 -06:00
Patrick Walton
e6d96ebc88 servo: Merge #3841 - layout: Stop adding damage when removing whitespace (from pcwalton:removing-whitespace-damage); r=cgaebel
Avoids total reflow of the entire document on the maze solver.

I have tested Wikipedia reflow and it still works.

r? @cgaebel

Source-Repo: https://github.com/servo/servo
Source-Revision: c20bb66aef28e922c46aa69c9faaa94d83269e73
2014-10-28 19:12:39 -06:00
Patrick Walton
f810f27720 servo: Merge #3840 - layout: Put {ib} splits into a linked list so we stop copying them all the time (from pcwalton:ib-splits-linked-list); r=glennw
r? @glennw

Source-Repo: https://github.com/servo/servo
Source-Revision: 08288fea411e001da9b35204ccf66f29c1d7dae6
2014-10-28 18:36:41 -06:00
Patrick Walton
dd5a5a029a servo: Merge #3839 - layout: Use the new append_from method to get rid of a bunch of moves in display list construction (from pcwalton:fewer-moves-in-dls); r=glennw
These were showing up in the profile.

r? @glennw

Source-Repo: https://github.com/servo/servo
Source-Revision: 651ef60b1cbf5e7dc45d7121d6f159f3fbf0d055
2014-10-28 17:57:43 -06:00
Patrick Walton
528653c1f0 servo: Merge #3837 - layout: Make some formatting cleanups (from pcwalton:layout-formatting-cleanups); r=metajack
These should have no effect on functionality.

r? @metajack

Source-Repo: https://github.com/servo/servo
Source-Revision: 4bdd9a5ec02526b9a407b23dcbf95cc570e6fa56
2014-10-28 17:21:48 -06:00
Clark Gaebel
0e8072ce5b servo: Merge #3828 - layout: Implement flow tree dumping with RUST_LOG=debug is on (from cgaebel:layout-node-dumping); r=pcwalton
r? @pcwalton

Source-Repo: https://github.com/servo/servo
Source-Revision: 2d8bd10abefe5cee9b60900911d41bb47323d248
2014-10-28 13:12:52 -06:00
Clark Gaebel
265ba936e5 servo: Merge #3826 - Layout: Fix resize (which just plain doesn't work right now) (from cgaebel:fix-resize); r=pcwalton
Currently, both restyle/flow construction _and_ reflow are skipped
during resize. Reflow should not be in that list. This patch fixes
that.

Source-Repo: https://github.com/servo/servo
Source-Revision: 3b6e035d0d5e4055adfdc396e322fab82759fe9e
2014-10-28 12:00:51 -06:00
Keegan McAllister
8321c9c421 servo: Merge #3797 - Debug-only dynamic checks for layout and GC use of DOMRefCell (from kmcallister:domrefcell); r=jdm
r? @mbrubeck, @jdm

Alternative to #3770 and #3716.

Source-Repo: https://github.com/servo/servo
Source-Revision: 0c12f630e6352fc2aa00b638d014b2505f68af1f
2014-10-24 18:09:27 -06:00
Josh Matthews
10c654fd65 servo: Merge #3803 - Add an optional --debug-mozjs argument to mach build that enables a no (from jdm:mozjsdebug); r=mbrubeck
...n-optimized, debug build of mozjs and rust-mozjs. Update the Cargo snapshot to enable new feature support.

Source-Repo: https://github.com/servo/servo
Source-Revision: e100a1834f40599952a790d2537d2b1262585e82
2014-10-24 14:39:33 -06:00
Glenn Watson
ba8ee908e0 servo: Merge #3794 - Cache last fontgroup. Style recalc on wikipedia/rust 66ms -> 41ms (from glennw:font-content-opt); r=pcwalton
Source-Repo: https://github.com/servo/servo
Source-Revision: 3910bc942fd04a8d263067916c51f53e3355fdff
2014-10-23 21:09:29 -06:00
Patrick Walton
99b16dbc43 servo: Merge #3772 - layout: Shrink fragments down from 448 bytes to 128 bytes (from pcwalton:slim-down-fragment); r=metajack
16% performance improvement in layout (!)

r? @metajack (or whoever)

Source-Repo: https://github.com/servo/servo
Source-Revision: 012a80cc182ea9773f82696bf36f05820ab994b3
2014-10-23 12:18:34 -06:00
Clark Gaebel
6bb11e0131 servo: Merge #3741 - Clear reflow flags after reflow (from cgaebel:clear-reflow-flags); r=pcwalton
Source-Repo: https://github.com/servo/servo
Source-Revision: a07b80bd569608f10318bd3569450eb27e01603e
2014-10-22 18:48:31 -06:00
Patrick Walton
e8423e72fb servo: Merge #3771 - layout: Largely move display list building out to a separate file (from pcwalton:display-list-building-cleanup); r=mrobinson
`layout::fragment` and `layout::block` were getting too big.

r? @mrobinson

Source-Repo: https://github.com/servo/servo
Source-Revision: 01f6a8102dfbb7eaef564acf8891088011905b59
2014-10-22 10:54:35 -06:00
Clark Gaebel
1b41f49bca servo: Merge #3763 - Fix #3753 (from cgaebel:issue-3753); r=pcwalton
r? @pcwalton

Looks like I forgot to save `ScannedTextFragment`s block sizes with their
inline sizes. This patch fixes that.

Fixes #3753

Source-Repo: https://github.com/servo/servo
Source-Revision: fe230ef37deaed2d6631af58ab923db023dcf319
2014-10-21 23:27:36 -06:00
Martin Robinson
cf92401134 servo: Merge #3747 - Add an option to validate display list items (from mrobinson:validate-display-list); r=pcwalton
When this option is enabled, the layout task will print an error when
display list items draw outside their owning Flow's position rect. This
will make it easier to detect layout errors before they break rendering.

This is a command-line option for the moment, because we violate this
rule quite a bit still. Once all bugs causing this are fixed, we can be
more aggressive about enabling the option.

Source-Repo: https://github.com/servo/servo
Source-Revision: f5ad89f927864ba4f1cbb409b8b0e3b38febef76
2014-10-21 17:51:43 -06:00
Martin Robinson
dc9442df7c servo: Merge #3746 - Add an option to show debug fragment borders (from mrobinson:debug-fragment-borders); r=pcwalton
This is quite a bit cleaner than abusing the rust debug functionality.
If we start collecting too many debugging options in the servo
executable we could opt to organize them into a single option.

Fixes #2263.

Source-Repo: https://github.com/servo/servo
Source-Revision: 3936d142607ef5a9b4a49d48e207daf4975cc7d5
2014-10-21 17:06:40 -06:00
Clark Gaebel
2a3a6dbe81 servo: Merge #3744 - More efficient preorder DOM traversals (from cgaebel:efficient-preorder-traversal); r=pcwalton
This also tackles some nearby FIXMEs. `traverse_preorder` is used in a LOT of
DOM functions..

r? @pcwalton

Source-Repo: https://github.com/servo/servo
Source-Revision: 2bc4ffe5cf331fb7bd246af34c5d12e4e03adda9
2014-10-21 13:09:38 -06:00
Clark Gaebel
22d2b21b7a servo: Merge #3728 - Dump the flow tree with println, instead of error (from cgaebel:dump-flow-tree-with-println); r=mrobinson
r? @mrobinson

Source-Repo: https://github.com/servo/servo
Source-Revision: 018146b1a8d1e0a2cc5c2692665f3db12cbef84a
2014-10-21 11:27:40 -06:00
Patrick Walton
19177725a9 servo: Merge #3722 - Overhaul flow construction with several performance improvements (from pcwalton:flow-construction-overhaul); r=glennw
This is a grab bag of performance improvements that significantly improve style recalculation, layout, and painting on a few static pages.

Let me know if you'd like me to split this PR up.

r? @glennw

Source-Repo: https://github.com/servo/servo
Source-Revision: 156ca98236a57ee52ff5b68741bc7783ba073612
2014-10-21 10:06:37 -06:00
Clark Gaebel
1bacd6dd47 servo: Merge #3715 - Fixes the table_percentage_width_a.html reftest with incremental reflow turned on (from cgaebel:fix-table-percentage-width); r=pcwalton
This also enables incremental reflow by default. \o/

r? @pcwalton

Source-Repo: https://github.com/servo/servo
Source-Revision: f6941b35e3b945f4a6dcd2cf03daa345ad2bcaed
2014-10-20 12:54:34 -06:00
Glenn Watson
bb1641acab servo: Merge #3729 - Use opts as a global, to avoid cloning and passing the struct all over the code base (from glennw:opts-cleanup); r=mbrubeck
Source-Repo: https://github.com/servo/servo
Source-Revision: 852378209badb936e8929c31501cb8cabeea6bc5
2014-10-19 21:33:25 -06:00
Martin Robinson
c1d92f3c92 servo: Merge #3719 - Wait to dump flow tree until flow is complete (from mrobinson:flow-dump); r=pcwalton
The flow tree is currently dumped for debugging purposes early on in
the flow process, so many values are still zero. If we wait to dump it
until later, the output will more accurately reflect the real flow tree.

Source-Repo: https://github.com/servo/servo
Source-Revision: 3906cecd16b62445581e5af930680dd3f5ff66eb
2014-10-17 19:51:24 -06:00
Clark Gaebel
b649ed2763 servo: Merge #3706 - Fix image_dynamic_remove reftest with incremental layout turned out (from cgaebel:fix-image-dynamic-remove); r=pcwalton
This also adds some extra debugging infrastructure which I found useful tracking
this bug down. A regression in the br reftests is also uncovered by this patch,
which I'll work on fixing next.

EDIT: nevermind. no regression, I just tested that before a rebase.

r? @pcwalton

Source-Repo: https://github.com/servo/servo
Source-Revision: b86344b697f814b982e52f4a72c26d58c915c37b
2014-10-17 12:15:23 -06:00
Patrick Walton
4a3d80aa08 servo: Merge #3697 - layout: Remove FontStyle in favor of using the font style struct directly, and optimize get_layout_font_group() to use a small vector (from pcwalton:get-layout-font-group); r=glennw
Seems to be a 38% layout win on a site I tested with a lot of text.

Other browser engines typically do not duplicate the information in the font style struct. `FontStyle` actually predates @SimonSapin's CSS selector matching library. It's time to get rid of it!

r? @glennw

Source-Repo: https://github.com/servo/servo
Source-Revision: 83196ddb26b5611bccfa2d709396daeff259bcd1
2014-10-16 15:06:19 -06:00
Clark Gaebel
6599b0028b servo: Merge #3689 - Fix whitespace_pre with incremental reflow turned on (from cgaebel:working-incremental-flow-construction); r=pcwalton
This implements fragment merging, in order to incrementally reflow linebroken
text. This makes the `whitespace_pre.html` reftest pass with incremental reflow
turned on with `-i`.

Source-Repo: https://github.com/servo/servo
Source-Revision: f3066c70da80306f68833814025deb589d6eeb2a
2014-10-15 21:27:20 -06:00
Clark Gaebel
cdf4116c36 servo: Merge #3692 - Fix append_style reftests with incremental reflow turned on (from cgaebel:fix-incremental-append-style); r=pcwalton
@pcwalton r?

Source-Repo: https://github.com/servo/servo
Source-Revision: b83352f7eb511ca2e993e1cc92504f41363ccc95
2014-10-15 20:00:20 -06:00
Clark Gaebel
9487112680 servo: Merge #3686 - Use the Deref traits for FlowRefs (from cgaebel:deref-flows); r=pcwalton
This patch switches FlowRefs to using the Deref and DerefMut traits, instead of
the custom `get` and `get_mut` functions.

Source-Repo: https://github.com/servo/servo
Source-Revision: 6a11ee89de82abae9d6607a6c2890692df5259eb
2014-10-15 16:18:23 -06:00
Tetsuharu OHZEKI
171511657e servo: Merge #3574 - Introduce a custom DOMRefCell<T> (from saneyuki:cell); r=jdm
#3050

Source-Repo: https://github.com/servo/servo
Source-Revision: 7c1054e6ab97dd199dee371c3b6ca5d559070804
2014-10-14 23:12:24 -06:00
Kasey Carrothers
1d2b9fbee6 servo: Merge #3655 - Add a to_js method to the casting trait code in CodegenRust.py (from kaseyc:add_to_js_method); r=jdm
Replace the manual checks and calls to transmute_copy in /layout/wrapper.rs with calls to to_js/

Fixes #3616

Source-Repo: https://github.com/servo/servo
Source-Revision: f1c050531f3e3669275f1fc50d92724609eba59b
2014-10-14 22:00:28 -06:00