brendanzab/gl-rs 509
An OpenGL function pointer loader for Rust
graydon/bors 359
Integration robot for buildbot and github
A Rust library for low-level text layout.
brson/rust-sdl 170
SDL bindings for Rust
A simple, cross-platform interface to GPU compute functionality in Rust
A set of static analysis tools for JavaScript
MP2 decoder written in Rust
DoctorJS--, simple type inference for JavaScript
JavaScript deminifier addon for Firefox 4
issue commentrust-lang/rust
Do debug-info-preserving optimizations even in debug mode
I'm surprised that doing the optimizations doesn't harm debuggability.
comment created time in 10 days
issue openedrust-lang/rust
Do debug-info-preserving optimizations even in debug mode
Debug mode, which is key to the edit-debug-run cycle, generates a lot more LLVM IR than equivalent C/C++ code does. For example, things like calls to ptr::write actually turn into procedure calls at the machine level. We could consider actually performing a subset of MIR optimizations in debug mode, to produce simpler IR and therefore to reduce compile time and improve performance of debug mode code. Naturally, these optimizations need to be carefully written to preserve DWARF debug info, but DWARF has many features designed to enable this sort of thing.
created time in 10 days
push eventservo/pathfinder
commit sha f8209946e332a3cbeea246d82c5a58b234f32909
Update documentation for building shaders
commit sha 157332c66795cd0c255e751eab5eeb3082f7955a
Add note about line endings
commit sha 493a2b92437e0fdddbe881e1c038aa6aba4941a2
Add note on when this document is relevant
commit sha 9d69e67a0e799b295ba26e1a764a8f82a5a77404
Wording
commit sha f1f9df5ce5016a00bf7a3a7a1ae0034ad74cedef
Merge pull request #441 from tangmi/build-shader-docs Add docs for building shaders on Windows
push time in 14 days
PR merged servo/pathfinder
This changelist expands the documentation around what it takes to regenerate/build the shaders.
Closes #346.
pr closed time in 14 days
issue closedservo/pathfinder
Shaders not easy to compile on windows
I'm trying to modify the shaders in pathfinder (for the webgpu backend) on a Windows machine and am running into issues running the Makefile (not pathfinder's fault, just the normal issues with running make on Windows, like missing unix tools, etc).
Would pathfinder consider letting this part of the pipeline be ported to Rust?
Some pros:
- It could include the required compilers (through
glslang_sysandspirv_crossor something likeshaderc) through a crate, so contributors don't need to install a compatible version on their system - Could be configured as a
build.rsscript to automatically rebuild shaders if they change - Hopefully will be more cross-platform than a Makefile (and more approachable to Rust folks who may not have Makefile experience!)
Cons:
- Would bloat the dependency size/build time for most contributors that do not need to modify shaders
- This is potentially over-engineering a solution to a problem that I'm the only one experiencing. :smiley:
- Edit: Also potentially less necessary when we have https://github.com/gfx-rs/naga
Thanks!
closed time in 14 days
tangmipush eventservo/pathfinder
commit sha 7a927245480138e43220321fff8bf7db6d3b6fe9
bugfix #436 which endless loop in clip::clip_line_segment_to_rect method
commit sha badf37afccc0ddd72ffed69b402807b6c8d97a80
Merge pull request #438 from colorhook/master bugfix #436 which endless loop in clip::clip_line_segment_to_rect method
push time in a month
PR merged servo/pathfinder
There was a spelling mistake in clip::clip_line_segment_to_rect
the if-else expression made repeated judgments for Outcode::LEFT
see: https://github.com/servo/pathfinder/issues/436
pr closed time in a month
push eventservo/pathfinder
commit sha 82cccf356b84621a0a1c40562db252e03ee2f3c4
add Copy, Clone… to FileFormat
commit sha e858c8dc1d8ff02a5b603e21e09a64d6b3e11327
Merge pull request #437 from s3bk/patch-1 add Copy, Clone… to FileFormat
push time in 2 months
issue commentservo/pathfinder
Rendering hangs when large numbers of paths overlap the viewport boundary
Looking at this.
comment created time in 2 months
pull request commentservo/servo
2020: Implement table map construction
This looks OK to me.
comment created time in 2 months
pull request commentservo/servo
[Draft] Lay out floats and handle clearance in layout 2020, but don't flow text around them yet.
I…did not expect that to pass!
comment created time in 2 months
pull request commentservo/servo
[Draft] Lay out floats and handle clearance in layout 2020, but don't flow text around them yet.
@bors-servo try=wpt-2020
comment created time in 2 months
push eventpcwalton/servo
commit sha 01c8b24e9fdb3812f7c8e788a503071395387d6f
update wgpu
commit sha 072770dbc0f2c172f4172e12999595997ffbf199
Register invalid resources separately
commit sha 7449f423066f8f562653a17efda64c7ff24fb548
Move action buttons above invalid certificate details.
commit sha 78c9466fdb98435dc4829b3c2e0a0a3a85b79b5f
fix ErrorScope model
commit sha 1d80f57aab0a11e6138b360391900666303244f3
Record errors in GPUCommandEncoder.BeginPass() and EncoderPass.endPass()
commit sha ecb8c914466adad7ee736422c0d9634b51ea07fe
update test expectations
commit sha 8ecc1a80a73427efd2752da4e3b65c31f823b050
Skip missing glyphs when drawing 2d canvas text.
commit sha 1e743a7ed6a249624b5e87609747021a8844adee
When instantiating a CTFont, store the bytes that were used to create it.
commit sha 53467b80b9e79b27beeb305d77ebca5b18515d2f
Auto merge of #27536 - kunalmohan:update-wgpu, r=kvark Major fixes in error reporting in GPUCommandEncoder and ErrorScope Model <!-- Please describe your changes on the following line: --> 1. Update wgpu to use the error model on wgpu-core side. Register error Ids separately. 2. ~~Record errors only in `GPUCommandEncoder.finish()`. Errors are no longer recorded in ErrorScopes in transfer commands or while recording passes. Any errors that occur are stored on the server-side in `error_command_encoders: HashMap<id::CommandEncoderId, String>` and reported on `CommandEncoderFinish`. Note: This should be reverted when the spec gets updated.~~ 3. Correct a major flaw in ErrorScope Model. If multiple operations are issued inside scope and an early operation fails, the promise resolves and script execution continues. The scope, however, was not popped until the results of all its operations were received. This meant that if the user issues another operation, it was assumed to be issued in an error scope that has already been popped by the user, which led to the failure of a number of tests. This is solved by storing a `popped` boolean to check whether `popErrorScope()` has been called on a scope or not. Operation is now issued in the lastest scope for which `popped == false`. One of the tests used to crash, but it no longer does (All subtests under it fail now). That explains the large number of failing test expectations that have been added. Most of them fail due to the tests being outdated. I'll switch to the updated branch in the next PR. r?@kvark --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: --> - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors <!-- Either: --> - [X] There are tests for these changes <!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.--> <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
commit sha 5f59716d41dff9b2d3d3ec564a169ea404d2db44
update cts to main branch
commit sha 589ab01be4398007cfacc27adfa3c3ad72bedd7e
Auto merge of #27534 - jdm:badcert-buttons, r=asajeffrey Move action buttons above invalid certificate details. Since the certificate details can fill the screen and require scrolling, let's move the user's choices so they're always in view when the SSL error page first loads. --- - [x] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [x] These changes fix #27520
commit sha 2034453fac844f4943febbbb6bc63d5ed21e4c1a
update test expectations
commit sha a3410e195f065d8838986b5361aacc04795f37b7
Update web-platform-tests to revision 3cc9e82a7c1a53423097f3d581d4bfc185f56d18
commit sha 7499b0736e0ff8f413aa8f5a8c789342b8d207bc
Auto merge of #27550 - servo-wpt-sync:wpt_update_08-08-2020, r=servo-wpt-sync Sync WPT with upstream (08-08-2020) Automated downstream sync of changes from upstream as of 08-08-2020. [no-wpt-sync] r? @servo-wpt-sync
commit sha 33a4bca74d1075b4bbb1a161b757427e34f94ad2
Disable tests crashing on metal
commit sha 8ff00f0e9c5c7eb232401407c4e5d455423a68d8
Remove entries from error_command_buffers on drop
commit sha 268c45fea7f97e488fbd2cec72d3c8edf8c55c11
update test expectations
commit sha 071cb971773be5429aa98e0804ace1b69dea5b7c
Update web-platform-tests to revision edfb5824a2e35b1f428daa35277c14629392c8d4
commit sha 8440bdda2ec19a7990fdbb05418ebf3a494d1f2f
Remove intermittent timeout.
commit sha 9ac6c542e6ed24837ab58fbad25c3c53efefb7d8
Auto merge of #27551 - servo-wpt-sync:wpt_update_09-08-2020, r=jdm Sync WPT with upstream (09-08-2020) Automated downstream sync of changes from upstream as of 09-08-2020. [no-wpt-sync] r? @servo-wpt-sync
push time in 2 months
pull request commentservo/servo
Canvas text and macOS font fixes
@bors-servo: r+
comment created time in 2 months
Pull request review commentservo/servo
Canvas text and macOS font fixes
impl GenericDrawTarget for raqote::DrawTarget { pattern: &canvas_data::Pattern, options: &DrawOptions, ) {- self.draw_text(+ let mut start = pathfinder_geometry::vector::vec2f(start.x, start.y);+ let mut ids = Vec::new();+ let mut positions = Vec::new();+ for c in text.chars() {+ let id = match font.glyph_for_char(c) {+ Some(id) => id,+ None => {+ warn!("Skipping non-existent glyph {}", c);+ continue;+ },+ };+ ids.push(id);+ positions.push(Point2D::new(start.x(), start.y()));+ let advance = match font.advance(id) {+ Ok(advance) => advance,+ Err(e) => {+ warn!("Skipping glyph {} with missing advance: {:?}", c, e);+ continue;+ },+ };+ start += advance * point_size / 24. / 96.;
Where do these values come from? Are you sure this isn't the units_per_em for some font?
comment created time in 2 months
push eventpcwalton/servo
commit sha 88f63056769d295d5e13941f5854ebb987251772
Place floats in layout 2020, but don't flow text around the floats yet. This commit puts floats behind the `layout.floats.enabled` pref, because of the following issues and unimplemented features: * Inline formatting contexts don't take floats into account, so text doesn't flow around the floats yet. * Non-floated block formatting contexts don't take floats into account, so BFCs can overlap floats. * Block formatting contexts that contain floats don't expand vertically to contain all the floats. That is, floats can stick out the bottom of BFCs, contra spec.
push time in 2 months
push eventpcwalton/servo
commit sha 823f15212b5797f4301a0d51c0b83b04aab22ae2
Place floats in layout 2020, but don't flow text around the floats yet. This commit puts floats behind the `layout.floats.enabled` pref, because of the following issues and unimplemented features: * Inline formatting contexts don't take floats into account, so text doesn't flow around the floats yet. * Non-floated block formatting contexts don't take floats into account, so BFCs can overlap floats. * Block formatting contexts that contain floats don't expand vertically to contain all the floats. That is, floats can stick out the bottom of BFCs, contra spec. * Floats are painted in the same order as regular content, contra spec.
push time in 2 months
push eventpcwalton/servo
commit sha 10ba6a69286fae5467e265f584e15cab5375ee54
add webgpu cts and update manifest
commit sha 32a4104f4a06a429c86c67f512c92769dd157b05
changes made for cts to work
commit sha fa4d3cb3d250d35b6fef782b7b3a5a7f6b233254
update expectations
commit sha 0416b2b160797651b26dd5f560b597c652733bd8
build(deps): bump error-chain from 0.12.0 to 0.12.3 Bumps [error-chain](https://github.com/rust-lang-nursery/error-chain) from 0.12.0 to 0.12.3. - [Release notes](https://github.com/rust-lang-nursery/error-chain/releases) - [Changelog](https://github.com/rust-lang-nursery/error-chain/blob/master/CHANGELOG.md) - [Commits](https://github.com/rust-lang-nursery/error-chain/commits) Signed-off-by: dependabot-preview[bot] <[email protected]>
commit sha b7430030f26c8dda0a3784248b7db7d19c031602
Update web-platform-tests to revision bd98c68802522edfae543a2a83dcd289c0972811
commit sha ef8eabd930278a939b4187742c13f317d1726549
Do not instanciate random ServoControls
commit sha c7091f7b81b6c2d41de4de0d78a30da345c4938c
Update image crate.
commit sha a6ca582a556d19a82b1e9f71015b7e62277d32fa
Update raqote, font-kit, fontconfig.
commit sha 327fed6084a99cfeede4752dc7b71416b5d83032
Update harfbuzz, freetype, unicode-script.
commit sha 5c0d7998bd28ceb383f553cd7af5a60f472a47ba
Update font-kit and freetype and unicode-script.
commit sha 64df2c2d608e2c885e8e75ca43078a97de6dfd10
Fix tidy check when no duplicate versions present.
commit sha 2ca1b06e77f28cebeb886f50a6c21c438d4b2f46
Update webrender.
commit sha 4622c876fa6866dac88a311621f4e6bee182d833
Run webgpu tests only on macOS
commit sha ea0fec6aab1749eb2dc68aadb89e640f9964d178
Added a recipe for streaming to twitch
commit sha 30f4c516356b05c402966118246c22538bf4caa9
Auto merge of #27461 - servo:dependabot/cargo/error-chain-0.12.3, r=jdm build(deps): bump error-chain from 0.12.0 to 0.12.3 Bumps [error-chain](https://github.com/rust-lang-nursery/error-chain) from 0.12.0 to 0.12.3. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/rust-lang-nursery/error-chain/blob/master/CHANGELOG.md">error-chain's changelog</a>.</em></p> <blockquote> <h1>0.12.2</h1> <ul> <li><a href="https://github-redirect.dependabot.com/rust-lang-nursery/error-chain/pull/285">allow <code>Error::description</code> to be used for rust below 1.42</a></li> <li><a href="https://github-redirect.dependabot.com/rust-lang-nursery/error-chain/pull/277">Improvements to has_backtrace_depending_on_env</a></li> <li>Backtrace support now requires rust 1.32.0</li> </ul> <h1>0.12.1</h1> <ul> <li><a href="https://github-redirect.dependabot.com/rust-lang-nursery/error-chain/pull/255"><code>std::error::Error::cause</code> deprecation update</a></li> <li><a href="https://github-redirect.dependabot.com/rust-lang-nursery/error-chain/pull/253">Macro invocations use 2018 style</a></li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li>See full diff in <a href="https://github.com/rust-lang-nursery/error-chain/commits">compare view</a></li> </ul> </details> <br /> [](https://dependabot.com/compatibility-score/?dependency-name=error-chain&package-manager=cargo&previous-version=0.12.0&new-version=0.12.3) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) - `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language - `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language - `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language - `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language - `@dependabot badge me` will comment on this PR with code to add a "Dependabot enabled" badge to your readme Additionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com): - Update frequency (including time of day and day of week) - Pull request limits (per update run and/or open at any time) - Out-of-range updates (receive only lockfile updates, if desired) - Security updates (receive only security updates, if desired) </details>
commit sha 764e2269cd0b9bcdfed6d319022d933423552d58
Auto merge of #27207 - jdm:imageup, r=Manishearth Update various dependencies This brings us more up to date for dependencies that rely on font-related crates.
commit sha 346bf9c031b47f6e54202d974550cf6a13ad2fed
Auto merge of #27466 - paulrouget:erg, r=jdm Do not instanciate random ServoControls That's embarrassing. We would create a new instance of Servo every time we would call `ServoControl()` (instead of `servoControl()`)… so very often.
commit sha 6aeadcec77a66ef7416e50483a59f6ee711bbae5
Auto merge of #27464 - servo-wpt-sync:wpt_update_31-07-2020, r=servo-wpt-sync Sync WPT with upstream (31-07-2020) Automated downstream sync of changes from upstream as of 31-07-2020. [no-wpt-sync] r? @servo-wpt-sync
commit sha 6499367fe244917a15d47292b3aaf84222ee5748
Auto merge of #27470 - asajeffrey:gst-plugin-readme-twitch, r=jdm Added a recipe for streaming to twitch <!-- Please describe your changes on the following line: --> All the cool kids are doing it. --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: --> - [x] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [x] These changes do not require tests because we don't test docs <!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.--> <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
commit sha 60e5c9a2777f07cb3dc1f110bd1f79a583a59458
Update web-platform-tests to revision 43899f53083e4e6285d7a55d66745d8f6518950d
push time in 2 months
push eventpcwalton/servo
commit sha 2e859fa806061cd6be2d15c1728e77896be0ee0d
Place floats in layout 2020, but don't flow text around the floats yet. This commit puts floats behind the `layout.floats.enabled` pref, because of the following issues and unimplemented features: * Inline formatting contexts don't take floats into account, so text doesn't flow around the floats yet. * Non-floated block formatting contexts don't take floats into account, so BFCs can overlap floats. * The `clear` property is only respected on floats, not on other elements; i.e. regular boxes can't clear past floats yet. * Block formatting contexts that contain floats don't expand vertically to contain all the floats. That is, floats can stick out the bottom of BFCs, contra spec. * Floats don't respect negative margins yet. * Floats are painted in the same order as regular content, contra spec.
push time in 2 months
pull request commentservo/servo
[Draft] Lay out floats and handle clearance in layout 2020, but don't flow text around them yet.
@bors-servo retry
comment created time in 2 months
pull request commentservo/servo
[Draft] Lay out floats and handle clearance in layout 2020, but don't flow text around them yet.
@bors-servo try=wpt-2020
comment created time in 2 months
push eventpcwalton/servo
commit sha d6d0b88005c3e2a927901821571e4ad064e94e0c
fix warnings
push time in 2 months
pull request commentservo/servo
[Draft] Lay out floats and handle clearance in layout 2020, but don't flow text around them yet.
(sorry about forgetting to rustfmt)
comment created time in 2 months
pull request commentservo/servo
[Draft] Lay out floats and handle clearance in layout 2020, but don't flow text around them yet.
@bors-servo try=wpt-2020
comment created time in 2 months
push eventpcwalton/servo
commit sha db43d700da8c0dbb88a4a194880e75b1f98517dc
rustfmt
push time in 2 months
pull request commentservo/servo
[Draft] Lay out floats and handle clearance in layout 2020, but don't flow text around them yet.
@bors-servo try=wpt-2020
comment created time in 2 months
PR opened servo/servo
<!-- Please describe your changes on the following line: -->
<!-- Thank you for contributing to Servo! Please replace each [ ] by [X] when the step is complete, and replace ___ with appropriate data: -->
- [ ]
./mach build -ddoes not report any errors - [ ]
./mach test-tidydoes not report any errors - [ ] These changes fix #___ (GitHub issue number if applicable)
<!-- Either: -->
- [ ] There are tests for these changes OR
- [ ] These changes do not require tests because ___
<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->
<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
pr created time in 2 months
PR closed servo/servo
This commit puts floats behind the layout.floats.enabled pref, because of the
following issues and unimplemented features:
-
Inline formatting contexts don't take floats into account, so text doesn't flow around the floats yet.
-
Non-floated block formatting contexts don't take floats into account, so BFCs can overlap floats.
-
The
clearproperty is only respected on floats, not on other elements; i.e. regular boxes can't clear past floats yet. -
Block formatting contexts that contain floats don't expand vertically to contain all the floats. That is, floats can stick out the bottom of BFCs, contra spec.
-
Floats don't respect negative margins yet.
-
Floats are painted in the same order as regular content, contra spec.
r? @Manishearth
<!-- Please describe your changes on the following line: -->
<!-- Thank you for contributing to Servo! Please replace each [ ] by [X] when the step is complete, and replace ___ with appropriate data: -->
- [ ]
./mach build -ddoes not report any errors - [ ]
./mach test-tidydoes not report any errors - [ ] These changes fix #___ (GitHub issue number if applicable)
<!-- Either: -->
- [ ] There are tests for these changes OR
- [ ] These changes do not require tests because ___
<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->
<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
pr closed time in 2 months
push eventpcwalton/servo
commit sha 68eb8450d9f152d280cd5378e91df2aa8a05c6a1
wip
push time in 2 months
push eventpcwalton/servo
commit sha abf7766715b6303b63cd320e325c80a2a39b2cfc
wip
commit sha bfb9c66af6ad2c8a9d5ed0db8d243231bbfc4600
wip
commit sha a6b9eb392f669f2a7eae3107145c54231ddd1414
wip
commit sha e28a781703c3e9b90c22c748e76ec550e0da1cd7
wip before redoing clear
commit sha 7a6f12daebbd089f1ee88065c7a9e90d643bf3bd
wip
commit sha f607ed7a713513eeafb116018bac3510f6b14344
wip
commit sha 2ec46efa837c9fbcf6dbf9a5746048dc3b1ad117
wip
commit sha a332d797ecfdbaa7810d67713765dd5a34bd16e2
wip
push time in 2 months
Pull request review commentservo/servo
2020: Implement table map construction
impl<'a, 'builder, 'dom, Node> TableRowBuilder<'a, 'builder, Node> where Node: NodeExt<'dom>, {+ /// When not in the process of filling a cell, make sure any incoming rowspans are+ /// filled so that the next specified cell comes after them. Should have been called before+ /// handle_cell fn consume_rowspans(&mut self) { loop {- if let Some(span) = self.builder.incoming_rowspans.get_mut(self.current_x) {+ let current_x = self.current_x();+ if let Some(span) = self.builder.incoming_rowspans.get_mut(current_x) { if *span != 0 { *span -= 1; let previous = self .builder .slots- .get_above(self.current_x)+ .get_above(current_x) .expect("Cannot have nonzero incoming rowspan with no slot above"); let new_slot = self.builder- .slots.spanned_slot(self.current_x, self.builder.current_y(), previous)- .expect("Nonzero incoming rowspan cannot occur without a cell spannign this slot");- self.builder.slots.insert(new_slot);- self.current_x += 1;+ .slots.spanned_slot(current_x, self.builder.current_y(), previous)+ .expect("Nonzero incoming rowspan cannot occur without a cell spanning this slot");+ self.builder.slots.push(new_slot); } else {+ // We have at least one free slot here, exit so that cells can be filled in break; } } else {+ // No more incoming rowspans, exit break; } } } /// https://html.spec.whatwg.org/multipage/tables.html#algorithm-for-processing-rows+ /// Push a single cell onto the cell slot map, handling any colspans it may have, and+ /// setting up the outgoing rowspans fn handle_cell(&mut self, info: &NodeAndStyleInfo<Node>) {+ let current_x = self.current_x(); let node = info.node.to_threadsafe(); // This value will already have filtered out rowspan=0 // in quirks mode, so we don't have to worry about that- let rowspan = cmp::min(node.get_rowspan(), 1000);- let colspan = cmp::min(node.get_colspan(), 1000);+ let rowspan = cmp::min(node.get_rowspan() as usize, 1000);+ let colspan = cmp::min(node.get_colspan() as usize, 1000);++ let me = TableSlot::Cell {+ cell: TableCellBox {},+ width: colspan,+ height: rowspan,+ };++ if self.builder.incoming_rowspans.len() < current_x + colspan {+ // make sure the incoming_rowspans table is large enough+ // because we will be+ self.builder+ .incoming_rowspans+ .resize(current_x + colspan, 0isize);+ }++ debug_assert!(+ self.builder.incoming_rowspans[current_x] == 0,+ "consume_rowspans must have been called before this!"+ );++ // if rowspan is zero, this is automatically negative and will stay negative+ let outgoing_rowspan = rowspan as isize - 1;+ self.builder.slots.push(me);+ self.builder.incoming_rowspans[current_x] = outgoing_rowspan;+ if colspan > 1 {
I don't think this if is necessary
comment created time in 3 months
Pull request review commentservo/servo
2020: Implement table map construction
where if self.builder.incoming_rowspans.len() < current_x + colspan { // make sure the incoming_rowspans table is large enough- // because we will be+ // because we will be writing to it
Oh, never mind, I saw you fixed up the comment here :)
comment created time in 3 months
Pull request review commentservo/servo
2020: Implement table map construction
impl<'a, 'builder, 'dom, Node> TableRowBuilder<'a, 'builder, Node> where Node: NodeExt<'dom>, {+ /// When not in the process of filling a cell, make sure any incoming rowspans are+ /// filled so that the next specified cell comes after them. Should have been called before+ /// handle_cell fn consume_rowspans(&mut self) { loop {- if let Some(span) = self.builder.incoming_rowspans.get_mut(self.current_x) {+ let current_x = self.current_x();+ if let Some(span) = self.builder.incoming_rowspans.get_mut(current_x) { if *span != 0 { *span -= 1; let previous = self .builder .slots- .get_above(self.current_x)+ .get_above(current_x) .expect("Cannot have nonzero incoming rowspan with no slot above"); let new_slot = self.builder- .slots.spanned_slot(self.current_x, self.builder.current_y(), previous)- .expect("Nonzero incoming rowspan cannot occur without a cell spannign this slot");- self.builder.slots.insert(new_slot);- self.current_x += 1;+ .slots.spanned_slot(current_x, self.builder.current_y(), previous)+ .expect("Nonzero incoming rowspan cannot occur without a cell spanning this slot");+ self.builder.slots.push(new_slot); } else {+ // We have at least one free slot here, exit so that cells can be filled in break; } } else {+ // No more incoming rowspans, exit break; } } } /// https://html.spec.whatwg.org/multipage/tables.html#algorithm-for-processing-rows+ /// Push a single cell onto the cell slot map, handling any colspans it may have, and+ /// setting up the outgoing rowspans fn handle_cell(&mut self, info: &NodeAndStyleInfo<Node>) {+ let current_x = self.current_x(); let node = info.node.to_threadsafe(); // This value will already have filtered out rowspan=0 // in quirks mode, so we don't have to worry about that- let rowspan = cmp::min(node.get_rowspan(), 1000);- let colspan = cmp::min(node.get_colspan(), 1000);+ let rowspan = cmp::min(node.get_rowspan() as usize, 1000);+ let colspan = cmp::min(node.get_colspan() as usize, 1000);++ let me = TableSlot::Cell {+ cell: TableCellBox {},+ width: colspan,+ height: rowspan,+ };++ if self.builder.incoming_rowspans.len() < current_x + colspan {+ // make sure the incoming_rowspans table is large enough+ // because we will be
because we will be what?
comment created time in 3 months
Pull request review commentservo/servo
2020: Implement table map construction
impl<'a, 'builder, 'dom, Node> TableRowBuilder<'a, 'builder, Node> where Node: NodeExt<'dom>, {+ /// When not in the process of filling a cell, make sure any incoming rowspans are+ /// filled so that the next specified cell comes after them. Should have been called before+ /// handle_cell fn consume_rowspans(&mut self) { loop {- if let Some(span) = self.builder.incoming_rowspans.get_mut(self.current_x) {+ let current_x = self.current_x();+ if let Some(span) = self.builder.incoming_rowspans.get_mut(current_x) { if *span != 0 { *span -= 1; let previous = self .builder .slots- .get_above(self.current_x)+ .get_above(current_x) .expect("Cannot have nonzero incoming rowspan with no slot above"); let new_slot = self.builder- .slots.spanned_slot(self.current_x, self.builder.current_y(), previous)- .expect("Nonzero incoming rowspan cannot occur without a cell spannign this slot");- self.builder.slots.insert(new_slot);- self.current_x += 1;+ .slots.spanned_slot(current_x, self.builder.current_y(), previous)+ .expect("Nonzero incoming rowspan cannot occur without a cell spanning this slot");+ self.builder.slots.push(new_slot); } else {+ // We have at least one free slot here, exit so that cells can be filled in break; } } else {+ // No more incoming rowspans, exit break; } } } /// https://html.spec.whatwg.org/multipage/tables.html#algorithm-for-processing-rows+ /// Push a single cell onto the cell slot map, handling any colspans it may have, and+ /// setting up the outgoing rowspans fn handle_cell(&mut self, info: &NodeAndStyleInfo<Node>) {+ let current_x = self.current_x(); let node = info.node.to_threadsafe(); // This value will already have filtered out rowspan=0 // in quirks mode, so we don't have to worry about that- let rowspan = cmp::min(node.get_rowspan(), 1000);- let colspan = cmp::min(node.get_colspan(), 1000);+ let rowspan = cmp::min(node.get_rowspan() as usize, 1000);+ let colspan = cmp::min(node.get_colspan() as usize, 1000);++ let me = TableSlot::Cell {+ cell: TableCellBox {},+ width: colspan,+ height: rowspan,+ };++ if self.builder.incoming_rowspans.len() < current_x + colspan {+ // make sure the incoming_rowspans table is large enough+ // because we will be+ self.builder+ .incoming_rowspans+ .resize(current_x + colspan, 0isize);+ }++ debug_assert!(
uber-nit: could be debug_assert_eq!
comment created time in 3 months
Pull request review commentservo/servo
2020: Implement table map construction
where // do something? } }++impl<'a, 'builder, 'dom, Node> TableRowBuilder<'a, 'builder, Node>+where+ Node: NodeExt<'dom>,+{+ fn consume_rowspans(&mut self) {+ loop {+ if let Some(span) = self.builder.incoming_rowspans.get_mut(self.current_x) {+ if *span != 0 {+ *span -= 1;+ let previous = self+ .builder+ .slots+ .get_above(self.current_x)+ .expect("Cannot have nonzero incoming rowspan with no slot above");+ let new_slot = self.builder+ .slots.spanned_slot(self.current_x, self.builder.current_y(), previous)+ .expect("Nonzero incoming rowspan cannot occur without a cell spannign this slot");
typo: "spanning"
comment created time in 3 months
Pull request review commentservo/servo
2020: Implement table map construction
use crate::dom_traversal::{ BoxSlot, Contents, NodeAndStyleInfo, NodeExt, NonReplacedContents, TraversalHandler, }; use crate::style_ext::{DisplayGeneratingBox, DisplayInternal};+use script_layout_interface::wrapper_traits::ThreadSafeLayoutNode; use std::borrow::Cow;+use std::cmp; use std::convert::TryFrom; use style::values::specified::text::TextDecorationLine; #[derive(Debug, Serialize, Default)]+/// A map of table slots to cells pub(crate) struct TableSlots { rows: Vec<TableSlotsRow>, } -#[derive(Debug, Serialize)]+impl TableSlots {+ /// Get the slot at (x, y)+ pub fn get(&self, x: usize, y: usize) -> Option<&TableSlot> {+ self.rows.get(y)?.cells.get(x)+ }++ fn insert(&mut self, slot: TableSlot) {+ let y = self.rows.len() - 1;+ self.rows[y].cells.push(slot)+ }++ /// Convenience method for get() that returns a SlotAndLocation+ fn get_loc(&self, x: usize, y: usize) -> Option<SlotAndLocation> {+ self.rows+ .get(y)?+ .cells+ .get(x)+ .map(|slot| SlotAndLocation { slot, x, y })+ }++ /// Get the slot from the previous row at x+ fn get_above(&self, x: usize) -> Option<SlotAndLocation> {+ if self.rows.len() > 1 {+ self.get_loc(x, self.rows.len() - 2)+ } else {+ None+ }+ }++ /// Given a slot and location, find the originating TableSlot::Cell.+ /// In the case of a table model error, there may be multiple, returning+ /// the oldest cell first+ fn resolve_slot<'a>(+ &'a self,+ location: SlotAndLocation<'a>,+ ) -> (SlotAndLocation<'a>, Vec<SlotAndLocation<'a>>) {+ match *location.slot {+ TableSlot::Cell { .. } => (location, Vec::new()),+ TableSlot::Spanned(x, y) => (+ self.get_loc(location.x - x, location.y - y)+ .expect("Spanned slot reference must resolve"),+ Vec::new(),+ ),+ TableSlot::MultiSpanned(ref vec) => {+ let mut v: Vec<_> = vec+ .iter()+ .map(|(x, y)| {+ self.get_loc(location.x - x, location.y - y)+ .expect("Spanned slot reference must resolve")+ })+ .collect();+ (v.pop().unwrap(), v)+ },+ }+ }++ /// If (x, y) is spanned by an already resolved `spanner`, return offsets for a TableSlot::Spanned() for it+ fn spanned_slot_single(+ &self,+ x: usize,+ y: usize,+ spanner: SlotAndLocation,+ ) -> Option<(usize, usize)> {+ if let TableSlot::Cell { width, height, .. } = spanner.slot {+ if x >= spanner.x && y >= spanner.y && x < spanner.x + *width {+ if *height == 0 || y < spanner.y + *height {
Why two nested ifs here?
comment created time in 3 months
Pull request review commentservo/servo
2020: Implement table map construction
where // do something? } }++impl<'a, 'builder, 'dom, Node> TableRowBuilder<'a, 'builder, Node>+where+ Node: NodeExt<'dom>,+{+ fn consume_rowspans(&mut self) {+ loop {+ if let Some(span) = self.builder.incoming_rowspans.get_mut(self.current_x) {+ if *span != 0 {
nit: could be if *span == 0 { break; } and then avoid some rightward drift (and would also be a bit clearer IMO)
comment created time in 3 months
Pull request review commentservo/servo
2020: Implement table map construction
where // do something? } }++impl<'a, 'builder, 'dom, Node> TableRowBuilder<'a, 'builder, Node>+where+ Node: NodeExt<'dom>,+{+ fn consume_rowspans(&mut self) {+ loop {
nit: could this be while let Some(...) = ...?
comment created time in 3 months
Pull request review commentservo/servo
2020: Implement table map construction
impl<'a, 'builder, 'dom, Node> TableRowBuilder<'a, 'builder, Node> where Node: NodeExt<'dom>, {+ /// When not in the process of filling a cell, make sure any incoming rowspans are+ /// filled so that the next specified cell comes after them. Should have been called before+ /// handle_cell fn consume_rowspans(&mut self) { loop {- if let Some(span) = self.builder.incoming_rowspans.get_mut(self.current_x) {+ let current_x = self.current_x();+ if let Some(span) = self.builder.incoming_rowspans.get_mut(current_x) { if *span != 0 { *span -= 1; let previous = self .builder .slots- .get_above(self.current_x)+ .get_above(current_x) .expect("Cannot have nonzero incoming rowspan with no slot above"); let new_slot = self.builder- .slots.spanned_slot(self.current_x, self.builder.current_y(), previous)- .expect("Nonzero incoming rowspan cannot occur without a cell spannign this slot");- self.builder.slots.insert(new_slot);- self.current_x += 1;+ .slots.spanned_slot(current_x, self.builder.current_y(), previous)+ .expect("Nonzero incoming rowspan cannot occur without a cell spanning this slot");+ self.builder.slots.push(new_slot); } else {+ // We have at least one free slot here, exit so that cells can be filled in break; } } else {+ // No more incoming rowspans, exit break; } } } /// https://html.spec.whatwg.org/multipage/tables.html#algorithm-for-processing-rows+ /// Push a single cell onto the cell slot map, handling any colspans it may have, and+ /// setting up the outgoing rowspans fn handle_cell(&mut self, info: &NodeAndStyleInfo<Node>) {+ let current_x = self.current_x(); let node = info.node.to_threadsafe(); // This value will already have filtered out rowspan=0 // in quirks mode, so we don't have to worry about that- let rowspan = cmp::min(node.get_rowspan(), 1000);- let colspan = cmp::min(node.get_colspan(), 1000);+ let rowspan = cmp::min(node.get_rowspan() as usize, 1000);+ let colspan = cmp::min(node.get_colspan() as usize, 1000);++ let me = TableSlot::Cell {+ cell: TableCellBox {},+ width: colspan,+ height: rowspan,+ };++ if self.builder.incoming_rowspans.len() < current_x + colspan {+ // make sure the incoming_rowspans table is large enough+ // because we will be+ self.builder+ .incoming_rowspans+ .resize(current_x + colspan, 0isize);+ }++ debug_assert!(+ self.builder.incoming_rowspans[current_x] == 0,+ "consume_rowspans must have been called before this!"+ );++ // if rowspan is zero, this is automatically negative and will stay negative+ let outgoing_rowspan = rowspan as isize - 1;+ self.builder.slots.push(me);+ self.builder.incoming_rowspans[current_x] = outgoing_rowspan;+ if colspan > 1 {+ // Keep track of if there's a model error, if so we need to perform fixups+ for offset in 1..colspan {+ let offset_x = current_x + offset;+ let new_slot = TableSlot::Spanned(offset, 0);+ let incoming_rowspan = &mut self.builder.incoming_rowspans[offset_x];+ if *incoming_rowspan == 0 {+ *incoming_rowspan = outgoing_rowspan;+ self.builder.slots.push(new_slot);++ // No model error, skip the remaining stuff+ continue;+ } else if *incoming_rowspan > 0 {+ // Set the incoming rowspan to the highest of two possible outgoing rowspan values+ // (the incoming rowspan minus one, OR this cell's outgoing rowspan)+ // spanned_slot() will handle filtering out inapplicable spans when it needs to+ *incoming_rowspan = cmp::max(*incoming_rowspan - 1, outgoing_rowspan);+ } else {+ // Don't change the rowspan, if it's negative we are in `rowspan=0` mode,+ // i.e. rowspan=infinity, so we don't have to worry about the current cell making+ // it larger++ // do nothing+ }++ // Code for handling model errors+ let previous = self+ .builder+ .slots+ .get_above(offset_x)+ .expect("Cannot have nonzero incoming rowspan with no slot above");+ let incoming_slot =+ self.builder+ .slots+ .spanned_slot(offset_x, self.builder.current_y(), previous);+ let new_slot = incoming_slot+ .map(|mut s| {+ s.push_spanned(offset, 0);+ s+ })+ .unwrap_or(new_slot);+ self.builder.slots.push(new_slot)+ }+ }++ debug_assert!(+ current_x + colspan == self.current_x(),+ "Must have produced `colspan` slot entries!"+ );
uber-nit: could be debug_assert_eq!
comment created time in 3 months
pull request commentservo/servo
Place floats in layout 2020, but don't flow text around the floats yet.
@bors-servo try=wpt-2020
comment created time in 3 months
push eventpcwalton/servo
commit sha ca10b917cd6caa86442127493e8b106c3427a88b
Place floats in layout 2020, but don't flow text around the floats yet. This commit puts floats behind the `layout.floats.enabled` pref, because of the following issues and unimplemented features: * Inline formatting contexts don't take floats into account, so text doesn't flow around the floats yet. * Non-floated block formatting contexts don't take floats into account, so BFCs can overlap floats. * The `clear` property is only respected on floats, not on other elements; i.e. regular boxes can't clear past floats yet. * Block formatting contexts that contain floats don't expand vertically to contain all the floats. That is, floats can stick out the bottom of BFCs, contra spec. * Floats don't respect negative margins yet. * Floats are painted in the same order as regular content, contra spec.
push time in 3 months
issue commentservo/servo
Implement table layout in 2020
Looks good.
comment created time in 3 months
pull request commentservo/servo
Place floats in layout 2020, but don't flow text around the floats yet.
@bors-servo try=wpt-2020
comment created time in 3 months
push eventpcwalton/servo
commit sha dfc641d64841bab44cdca2cba0009901416f78f6
Don't delete GL textures created by WebXR
commit sha ad4eb52a85f8ec0e8d4dbccf9353a845e8d27cfd
Update gstreamer plugin README: we support webgl content
commit sha 5c121bc8d42ccc3c39f2574f88354117f374e551
Update gstreamer plugin README: use the -e flag
commit sha 308aa1606bec73042dd021fa08ca12db55d65fcc
Update gstreamer plugin README: use the glvideoflip plugin
commit sha 4d4a9c22ef6ba7cc3a02c0d1570fa3fae8f82b59
Update gstreamer plugin README: directions for streaming to youtube live
commit sha 5831ab8221916d4843b18ba3d2fdf0ec5cec2630
Auto merge of #27448 - asajeffrey:script-webgl-texture-ownership, r=jdm Don't delete GL textures created by WebXR <!-- Please describe your changes on the following line: --> Currently WebGL assumes it owns any WebGLTexture, and deletes the backing GL texture when the object is GC'd. This isn't valid for textures created by a webxr layer manager, which can result in textures being used after they're deleted. --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: --> - [x] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [x] These changes fix #27427 - [x] These changes do not require tests because we don't reftest webxr <!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.--> <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
commit sha b1bd4090470c6f2b9ff4ea410455ae8e38fec2c5
Auto merge of #27449 - asajeffrey:gst-plugin-readme-edits, r=jdm Gstreamer plugin README edits <!-- Please describe your changes on the following line: --> Updated docs to the gstreamer plugin, now with a recipe for streaming to youtube live! --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: --> - [x] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [x] These changes do not require tests because we don't test READMEs <!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.--> <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
commit sha a97f20af695e75fd38979688b4ee452ebc5953fa
build(deps): bump glslopt from 0.1.2 to 0.1.4 Bumps [glslopt](https://github.com/jamienicol/glslopt-rs) from 0.1.2 to 0.1.4. - [Release notes](https://github.com/jamienicol/glslopt-rs/releases) - [Commits](https://github.com/jamienicol/glslopt-rs/commits) Signed-off-by: dependabot-preview[bot] <[email protected]>
commit sha 53a530d4c03379e9c5d5ee0275604af8bf4e8a60
Update web-platform-tests to revision fd5a851b2e6bd60ff49060f1b42197c976273728
commit sha 5fe54b800334d0963cbf52496e2cbce42d839c46
Fix ordering of mousemove event
commit sha c235e1ee4337c97ea451d9bc93c6937851431073
Fire mouseenter and mouseleave events
commit sha da45522085363480009f7e12cce2c00a94ec931e
Fix comments for handle_mouse_move_event method
commit sha 962e6205293b3466df173889cd56ba435cdaa233
Do not panic on navigating across documents
commit sha 95ddcf5d4d7a394bc45cb300754513afcc8d8475
Use ExtendableMessageEvent for messageerror in service workers
commit sha 8fe51b49b49bb041ae206b160ad7c56deade16b2
Remove 2020 failure.
commit sha f21b045cb4725d9dc06cc5ba115deba30757f198
Ignore UWP restrictions for host binaries.
commit sha 2c8889ac4709555401ae3dc92f8f8e68ae99191f
Auto merge of #27453 - servo-wpt-sync:wpt_update_30-07-2020, r=jdm Sync WPT with upstream (30-07-2020) Automated downstream sync of changes from upstream as of 30-07-2020. [no-wpt-sync] r? @servo-wpt-sync
commit sha e752ed200a4276d8ab24f8d8fbd4957e4a400bd0
Auto merge of #27452 - servo:dependabot/cargo/glslopt-0.1.4, r=jdm build(deps): bump glslopt from 0.1.2 to 0.1.4 Bumps [glslopt](https://github.com/jamienicol/glslopt-rs) from 0.1.2 to 0.1.4. Fixes #27039. <details> <summary>Commits</summary> <ul> <li>See full diff in <a href="https://github.com/jamienicol/glslopt-rs/commits">compare view</a></li> </ul> </details> <br /> [](https://dependabot.com/compatibility-score/?dependency-name=glslopt&package-manager=cargo&previous-version=0.1.2&new-version=0.1.4) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) - `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language - `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language - `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language - `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language - `@dependabot badge me` will comment on this PR with code to add a "Dependabot enabled" badge to your readme Additionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com): - Update frequency (including time of day and day of week) - Pull request limits (per update run and/or open at any time) - Out-of-range updates (receive only lockfile updates, if desired) - Security updates (receive only security updates, if desired) </details>
commit sha de20715f23706e01163c4843ccf113cbae6bf8e9
Add some manual tests for verifying mouse events order
commit sha 4e3863300928dcff115241e1576900c893f7dead
Refactor and improve GPUErrorScopes Remove use of equivalent BGLs
push time in 3 months
push eventpcwalton/servo
commit sha ea7b0f238fc6de394ea7ac8c7096aace195460b4
Place floats in layout 2020, but don't flow text around the floats yet. This commit puts floats behind the `layout.floats.enabled` pref, because of the following issues and unimplemented features: * Inline formatting contexts don't take floats into account, so text doesn't flow around the floats yet. * Non-floated block formatting contexts don't take floats into account, so BFCs can overlap floats. * The `clear` property is only respected on floats, not on other elements; i.e. regular boxes can't clear past floats yet. * Block formatting contexts that contain floats don't expand vertically to contain all the floats. That is, floats can stick out the bottom of BFCs, contra spec. * Floats don't respect negative margins yet. * Floats are painted in the same order as regular content, contra spec.
push time in 3 months
pull request commentservo/pathfinder
Simplify the cargo-c usage and generate the library as libpathfinder
@bors-servo: r+
comment created time in 3 months
pull request commentservo/pathfinder
Simplify the cargo-c usage and generate the library as libpathfinder
I'll approve this for now and we can revisit if we ever want to push this to crates.io.
comment created time in 3 months
pull request commentservo/pathfinder
Simplify the cargo-c usage and generate the library as libpathfinder
Well, my concern would be uploading it to crates.io I guess.
comment created time in 3 months
pull request commentservo/servo
Place floats in layout 2020, but don't flow text around the floats yet.
@bors-servo try=wpt-2020
comment created time in 3 months
push eventpcwalton/servo
commit sha ef6bb443d27a33e68176a98022efbe31b30b4b21
Update packaged UWP gstreamer plugins.
commit sha 223cb8d3672b9328d2a7daf5cb7a0fd83804d3b6
Auto merge of #27445 - jdm:uwp-gstreamer, r=Manishearth Update packaged UWP gstreamer plugins. Fixes #27444. Verified that the WACK checks still pass and the UWP app launches on desktop.
commit sha 4894e8f2c4924359c5d8de4c33dfda269f03d093
Add a pref to indicate user intent to enter webxr
commit sha 89a2c5175f6ded630cf8a09dd899dad809921e6d
Set the dom.webxr.unsafe-assume-user-intent pref in the gstreamer plugin's webxr mode
commit sha c26a803fee43962fe5bab5f4f26adc0319d590ef
Auto merge of #27429 - asajeffrey:webxr-user-intent-pref, r=Manishearth Add a pref to indicate user intent to enter webxr <!-- Please describe your changes on the following line: --> Add a pref to indicate that the user has indicated intent to enter webxr. --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: --> - [x] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [x] These changes do not require tests because it's a command-line pref <!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.--> <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
commit sha a2e42794b5aaab5cecec88bd6e40a9da0c2d40b8
Place floats in layout 2020, but don't flow text around the floats yet. This commit puts floats behind the `layout.floats.enabled` pref, because of the following issues and unimplemented features: * Inline formatting contexts don't take floats into account, so text doesn't flow around the floats yet. * Non-floated block formatting contexts don't take floats into account, so BFCs can overlap floats. * The `clear` property is only respected on floats, not on other elements; i.e. regular boxes can't clear past floats yet. * Block formatting contexts that contain floats don't expand vertically to contain all the floats. That is, floats can stick out the bottom of BFCs, contra spec. * Floats don't respect negative margins yet. * Floats are painted in the same order as regular content, contra spec.
push time in 3 months
pull request commentservo/servo
Place floats in layout 2020, but don't flow text around the floats yet.
@bors-servo try=wpt-2020
comment created time in 3 months
push eventpcwalton/servo
commit sha 55e482d02d1fd67a526860c6279020551ab27dc9
Synced with master
commit sha 73d0a42bffbb7309fd0f1b8eb29f366b33eb94c8
Synced with master
commit sha 1dd57d625c79da748974175b9fe0df2c8d585010
Merge branch 'master' of https://github.com/servo/servo
commit sha 332c9cc12f43281b639239eba339beac1b552313
Merge branch 'master' of https://github.com/servo/servo
commit sha d8b6755a8d3cba419b8c80ef533f0fbfd8e02b0f
Console.Clear implemented
commit sha a9a406e9e73adecf56d9a5ce47b4b4f664f7e33a
Auto merge of #27443 - mustafapc19:master, r=jdm console.clear implemented <!-- Please describe your changes on the following line: --> --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: --> - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [X] These changes fix #27294 (GitHub issue number if applicable) <!-- Either: --> - [ ] There are tests for these changes OR - [X] These changes do not require tests because it deals with Firefox's devtools. <!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.--> <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
commit sha 0d9ea6c9ab59e22c72cd9be0a9b8aec90a6ec491
Place floats in layout 2020, but don't flow text around the floats yet. This commit puts floats behind the `layout.floats.enabled` pref, because of the following issues and unimplemented features: * Inline formatting contexts don't take floats into account, so text doesn't flow around the floats yet. * Non-floated block formatting contexts don't take floats into account, so BFCs can overlap floats. * The `clear` property is only respected on floats, not on other elements; i.e. regular boxes can't clear past floats yet. * Block formatting contexts that contain floats don't expand vertically to contain all the floats. That is, floats can stick out the bottom of BFCs, contra spec. * Floats don't respect negative margins yet. * Floats are painted in the same order as regular content, contra spec.
push time in 3 months
pull request commentservo/servo
Place floats in layout 2020, but don't flow text around the floats yet.
@bors-servo try=wpt-2020
comment created time in 3 months
push eventpcwalton/servo
commit sha 788f0fee7765e77af60bb226299e1555311d0d74
build(deps): bump loom from 0.3.4 to 0.3.5 Bumps [loom](https://github.com/tokio-rs/loom) from 0.3.4 to 0.3.5. - [Release notes](https://github.com/tokio-rs/loom/releases) - [Changelog](https://github.com/tokio-rs/loom/blob/master/CHANGELOG.md) - [Commits](https://github.com/tokio-rs/loom/compare/v0.3.4...v0.3.5) Signed-off-by: dependabot-preview[bot] <[email protected]>
commit sha dd5a4ec868e37cdafe8b438866877f09812fb020
Remove scoped-tidy duplicate exemption.
commit sha 8f61ce6bf5c8c34bdf9d001e54aa2b633e0329cc
Auto merge of #27408 - servo:dependabot/cargo/loom-0.3.5, r=jdm build(deps): bump loom from 0.3.4 to 0.3.5 Bumps [loom](https://github.com/tokio-rs/loom) from 0.3.4 to 0.3.5. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/tokio-rs/loom/blob/master/CHANGELOG.md">loom's changelog</a>.</em></p> <blockquote> <h1>0.3.5 (July 26, 2020)</h1> <h3>Fixed</h3> <ul> <li>An example in the README failing to compile (<a href="https://github-redirect.dependabot.com/tokio-rs/loom/issues/132">#132</a>)</li> </ul> <h3>Changed</h3> <ul> <li>Updated <code>scoped-tls</code> to 1.0.0 (<a href="https://github-redirect.dependabot.com/tokio-rs/loom/issues/153">#153</a>)</li> </ul> <h3>Added</h3> <ul> <li><code>Send</code> and <code>Sync</code> impls for <code>JoinHandle</code> (<a href="https://github-redirect.dependabot.com/tokio-rs/loom/issues/145">#145</a>)</li> <li><code>Default</code> impls for <code>Mutex</code>, <code>RwLock</code>, and <code>Condvar</code> (<a href="https://github-redirect.dependabot.com/tokio-rs/loom/issues/138">#138</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/tokio-rs/loom/commit/af4386b0285b673468f49dfa0763a820f96eddbb"><code>af4386b</code></a> prepare to release 0.3.5 (<a href="https://github-redirect.dependabot.com/tokio-rs/loom/issues/160">#160</a>)</li> <li><a href="https://github.com/tokio-rs/loom/commit/2632f929d2ebd0c1998d93e5b9164fca698ba949"><code>2632f92</code></a> update scoped-tls to 1.0.0 (<a href="https://github-redirect.dependabot.com/tokio-rs/loom/issues/153">#153</a>)</li> <li><a href="https://github.com/tokio-rs/loom/commit/dc9e91c0a9339f41385bb1b28c4b7c061b245de9"><code>dc9e91c</code></a> Fix compilation error on README.md (<a href="https://github-redirect.dependabot.com/tokio-rs/loom/issues/132">#132</a>)</li> <li><a href="https://github.com/tokio-rs/loom/commit/871ff0128888dea307b848549dd0a5692b1e82ad"><code>871ff01</code></a> Implement Default for Mutex, RwLock and Condvar (<a href="https://github-redirect.dependabot.com/tokio-rs/loom/issues/138">#138</a>)</li> <li><a href="https://github.com/tokio-rs/loom/commit/0b092a2e5233cc296a12794b804b1f79ed44f741"><code>0b092a2</code></a> Make JoinHandle Send + Sync (<a href="https://github-redirect.dependabot.com/tokio-rs/loom/issues/145">#145</a>)</li> <li>See full diff in <a href="https://github.com/tokio-rs/loom/compare/v0.3.4...v0.3.5">compare view</a></li> </ul> </details> <br /> [](https://dependabot.com/compatibility-score/?dependency-name=loom&package-manager=cargo&previous-version=0.3.4&new-version=0.3.5) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) - `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language - `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language - `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language - `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language - `@dependabot badge me` will comment on this PR with code to add a "Dependabot enabled" badge to your readme Additionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com): - Update frequency (including time of day and day of week) - Pull request limits (per update run and/or open at any time) - Out-of-range updates (receive only lockfile updates, if desired) - Security updates (receive only security updates, if desired) </details>
commit sha d8b4dab4e38c2928f034248e158e8bf9b5ad60d6
Implement basic white-space: pre support for layout 2020.
commit sha 260347e5dc287b7d47e29c97d08fa4abba3e8a75
Simplify control flow of whitespace handling.
commit sha 60147105388fe7f5f95e019436d8027061330a47
Removed unnecessary conversion from UTF-8 to UTF-16
commit sha f030162ec3cdbe08b6a94869e0b25c11a9d433aa
Make reload button clear the network cache.
commit sha d0670d484528bbe60a03d8da52c90b09cab486b4
Enable clip WPT tests for 2020
commit sha 433b653f70144c68ca4564c40d71427b38b9c06f
Move clip resolution code into style
commit sha 139f240baf1997f3c309586b1344f8d58d5bd23b
Enable clip property in layout 2020
commit sha 07c87b471579857f92a615ba8b702db3a1f9ef43
Handle clip property in 2020
commit sha 346a0e02d565dccabf97e8dd65b41744970e5cf1
Handle clip before we push the stacking context
commit sha 0bc10b80738d7c7f08b7c1106e6dc232e7e44b99
Update wpt results
commit sha 4e3621e91e1eaf63f1fbb5ab3fde6084d67a78ce
Add more gstreamer plugins to nightly builds.
commit sha 7eabd5c8bd0401befaf3dc540eeacecd9536c420
Auto merge of #27403 - servo:jdm-patch-46, r=Manishearth Add more gstreamer plugins to nightly builds.
commit sha 9fe70e6b71c2d2278f36dc6cfe0e62ab9fff837b
Move secondary view support into a pref
commit sha 870812d8955649645f82841ee4bd3c5db454423a
Auto merge of #27418 - Manishearth:secondary-view-pref, r=asajeffrey Move secondary view support into a pref Needs https://github.com/servo/webxr/pull/188 Adds a `dom.webxr.first_person_observer_view` pref that toggles FPO views.
commit sha b026dae8ac244be8b9682b119c5bf13e53d1cdb7
Only apply clip() to positioned elements
commit sha 0ce3ad5a4bba228f617e7d4bf3b34b39684dc3d9
Auto merge of #27417 - jdm:clear-reload, r=Manishearth Make reload button clear the network cache. The developer workflow in FxR is frustrating right now because of bugs like https://github.com/servo/servo/issues/24385. To allow us to put out a new release soon that addresses this papercut, these changes make the reload button clear the network cache in FxR. --- - [x] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [x] These changes fix (kind of) #26411. - [x] These changes do not require tests because can't test FxR.
commit sha 1ad22043ab4c0a1a0f38d41fa2ad0e6f444649be
Update web-platform-tests to revision 9a28e2c8d072c358bd94b97bc8bff6db8388b6b1
push time in 3 months
pull request commentservo/pathfinder
Document the rest of `pathfinder_content`
@bors-servo: r+
comment created time in 3 months
issue commentservo/pathfinder
Add build instructions for C examples
Does this work better as of https://github.com/servo/pathfinder/commit/c6151da25470124df1c38e650792ded2e2caf6f5?
comment created time in 3 months
pull request commentservo/pathfinder
Expose `CanvasRenderingContext2D::set_text_baseline()` to C.
@bors-servo: r+
comment created time in 3 months
push eventservo/pathfinder
commit sha 3ff09fb43b1094bf1a2280ccd6ea1665f3359b5a
Add [defines] section to cbindgen.toml
commit sha 56b432b4664cb06b2f3cb95ba28b4e34823ed32a
Replace PATHFINDER_MACOS with __APPLE__
commit sha c6151da25470124df1c38e650792ded2e2caf6f5
Merge pull request #424 from BenGachowski/master Add [defines] section to cbindgen.toml
push time in 3 months
PR merged servo/pathfinder
Attempts to fix issue #422.
pr closed time in 3 months
issue closedservo/pathfinder
cbindgen is not making use of cfg directives because of lack of [defines] section in cbindgen.toml
The header file generated with cbindgen will automatically wrap the various exported functions in c preprocessor macros, but only if those macros are defined in the cbindgen.toml under a [defines] section.
For example, on my windows machine, the functions labeled for MacOS only are still included leading to undefined references when compiling.
More information about this can be found here.
closed time in 3 months
BenGachowskipull request commentservo/pathfinder
Add [defines] section to cbindgen.toml
@bors-servo: r+
comment created time in 3 months
pull request commentservo/pathfinder
Add [defines] section to cbindgen.toml
Can we just write "target_os = macos" = "__APPLE__"?
comment created time in 3 months
pull request commentservo/pathfinder
Implement `putImageData()` on canvas.
@bors-servo: r+
comment created time in 3 months
issue closedservo/pathfinder
The attached SVG file causes a panic when loaded in the native demo app. Tested on commit 5d5d303
stress.svg.zip - zipped so that github would accept the upload.
Backtrace:
Oh noez! Panic! 💥
Message: index out of bounds: the len is 1 but the index is 1
Location: renderer/src/tiles.rs:264
Run with RUST_BACKTRACE=full to include source snippets.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ BACKTRACE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
(7 post panic frames hidden)
7: core::panicking::panic_bounds_check::hf0c95c4cc84d34ca
at src/libcore/panicking.rs:61
8: pathfinder_renderer::tiles::Tiler::generate_tiles::hfc169b80f1641916
at <unknown source file>
9: pathfinder_renderer::builder::SceneBuilder::build_path::hce897e2e946b5d4c
at <unknown source file>
10: rayon::iter::plumbing::Producer::fold_with::h50fa76b5f0b3163a
at <unknown source file>
11: rayon::iter::plumbing::bridge_producer_consumer::helper::h69dbadf04bd92d21
at <unknown source file>
12: std::panicking::try::do_call::h6c4c1ab0f10124be
at <unknown source file>
13: __rust_maybe_catch_panic
at src/libpanic_unwind/lib.rs:80
14: <rayon_core::job::StackJob<L,F,R> as rayon_core::job::Job>::execute::h9adf8b7ae0ef7bc2
at <unknown source file>
15: rayon_core::registry::WorkerThread::wait_until_cold::h217a69f524408fb0
at <unknown source file>
16: rayon_core::registry::main_loop::h170a63d799a69fb7
at <unknown source file>
17: std::panicking::try::do_call::hdc23013fbb359370
at <unknown source file>
18: __rust_maybe_catch_panic
at src/libpanic_unwind/lib.rs:80
19: core::ops::function::FnOnce::call_once{{vtable.shim}}::h1e9e799cd2b2c8fd
at <unknown source file>
20: <alloc::boxed::Box<F> as core::ops::function::FnOnce<A>>::call_once::h2877b2aefb0fd627
at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54/src/liballoc/boxed.rs:787
21: <alloc::boxed::Box<F> as core::ops::function::FnOnce<A>>::call_once::h13f473dbcdaa0fef
at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54/src/liballoc/boxed.rs:787
22: std::sys_common::thread::start_thread::h562a7c4953cb1d31
at src/libstd/sys_common/thread.rs:13
23: std::sys::unix::thread::Thread::new::thread_start::h382c6ae14181d163
at src/libstd/sys/unix/thread.rs:79
24: start_thread
at <unknown source file>
25: __clone
at <unknown source file>
26: <unknown>
at <unknown source file>
Oh noez! Panic! 💥
Message: called `Result::unwrap()` on an `Err` value: RecvError
Location: src/libcore/result.rs:1084
Run with RUST_BACKTRACE=full to include source snippets.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ BACKTRACE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
(8 post panic frames hidden)
8: demo::main::h0b665984c7ae2ba3
at <unknown source file>
9: std::rt::lang_start::{{closure}}::hc8bed131044e1138
at <unknown source file>
10: std::rt::lang_start_internal::{{closure}}::h4e93c1949c7a1955
at src/libstd/rt.rs:49
11: std::panicking::try::do_call::h9440ccd4dc467eaa
at src/libstd/panicking.rs:296
12: __rust_maybe_catch_panic
at src/libpanic_unwind/lib.rs:80
13: std::panicking::try::hc046e7ee42ee744f
at src/libstd/panicking.rs:275
14: std::panic::catch_unwind::h27dfc457c200aee0
at src/libstd/panic.rs:394
15: std::rt::lang_start_internal::hea1b49a567afe309
at src/libstd/rt.rs:48
16: main
at <unknown source file>
17: __libc_start_main
at <unknown source file>
18: _start
at <unknown source file>
19: <unknown>
at <unknown source file>
closed time in 3 months
Shnatselissue commentservo/pathfinder
This no longer panics for me.
comment created time in 3 months
issue commentservo/pathfinder
Reduce the number of crates library users need to care about
I think we're going to hold off on this for now, per feedback. Closing for now, but may reopen in the future if this decision changes.
comment created time in 3 months
issue closedservo/pathfinder
Reduce the number of crates library users need to care about
Right now we have a lot of crates, and this is causing friction for potential library users. One option would be to have a super-crate that reexports everything important. But I worry this crate will grow without limit. We already have Pathfinder native API, canvas, SVG, PDF, SWF, and Lottie frontends and it's unlikely a user will care about all of them. Likewise with GPU API backends: we already have OpenGL, WebGL, and Metal backends and will possibly get Vulkan, DX11, DX12, and gfx-rs backends in the future; it's unlikely a user wants to run on all of these platforms.
I think perhaps we could have the "front-end" crates—pathfinder_canvas and pathfinder_svg—reexport the functionality necessary to use them. Then you'd only need to import two crates in most cases: the front-end (pathfinder_canvas/pathfinder_svg) and a GPU backend (pathfinder_gl, etc.) Another option would be to have a front-end pathfinder_vg crate that reexports all the subcrates behind feature flags. (Unfortunately it can't be named just pathfinder because that name is already in use on crates.io.)
Other suggestions and ideas are very welcome.
closed time in 3 months
pcwaltonissue closedservo/pathfinder
It'd be nice to have a built-in solution to render PDFs with Pathfinder (i.e. convert PDFs to scenes).
closed time in 3 months
pcwaltonpull request commentservo/pathfinder
Allow clip paths to nest in the canvas API.
@bors-servo: r+
comment created time in 3 months
issue openedservo/pathfinder
I don't think anyone is using it, and Servo as a project isn't focusing on Magic Leap anymore.
If anyone wants to take over maintenance, please comment here. Otherwise it'll be removed soon.
created time in 3 months
pull request commentservo/pathfinder
Clip line segments before tiling them, and remove the cap on the number of iterations when tiling.
@bors-servo: r+
comment created time in 3 months
issue closedservo/pathfinder
Experiment with a raytracing approach
It might make sense to try encoding all the the fills for each tile in a texture and stepping through them in a loop in the tile fragment shader, blending each pixel in software. This is basically what an early version of WebRender did, and what @raphlinus' piet-metal does. The advantage is that we have one rendering step instead of two. The disadvantage is that we can no longer use the hardware rasterizer's fragment scheduler and we may therefore have worse thread utilization.
My hypothesis, which has a very good chance of being wrong, is that this will be slower than current Pathfinder on most high-performance desktop hardware and mobile hardware, assuming we take advantage of pixel-local storage on the latter. However, it may be faster on some lower-power desktop GPUs, such as Intel. This is likely to be very hardware-dependent.
closed time in 3 months
pcwaltonissue commentservo/pathfinder
Experiment with a raytracing approach
We basically have this now in the D3D11 backend. Closing.
comment created time in 3 months
issue closedservo/pathfinder
It would be nice to have a Web Assembly port, like Google's CanvasKit for Skia.
closed time in 3 months
pcwaltonissue commentservo/pathfinder
We have a wasm port now. Let's close this in favor of more specific items.
comment created time in 3 months
issue closedservo/pathfinder
Move more to the GPU in Pathfinder 3 when available
This is just a sketch of various ideas for moving CPU passes to the GPU. On certain devices such as Magic Leap 1 we're CPU bottlenecked.
Stroke
Required features: None.
Just replace stroke algorithm with a shader.
Not clear yet how to do miter joins.
Transform
Required features: Transform feedback. GL 3.0; GLES 3.0.
This one is pretty obvious. Obvious hazard is readback from GPU.
Clipping
Required features: Transform feedback, geometry or compute shader. GL 3.2; GLES 3.1.
Will require some experimentation to find best clipbuffer representation.
Tiling
Required features: Compute shader, indirect draw. GL 4.3; GLES 3.1.
Break curves into lines on GPU, assign to tiles via compute (or geometry) shader. During fill stage, accumulate outgoing fill in SSBO or writable image using atomics. Then propagate fills between tiles using a binary flood algorithm in compute shader.
Not clear how to do occlusion culling. Possibly detect solid tiles during outgoing fill tile propagation.
Intra-tile curve-to-line conversion
Required features: Geometry or tessellation shader. GL 3.2; GLES 3.2.
Not sure if this is worth it due to needing to solve cubic equations. Probably not needed if GPU tiling works out.
closed time in 3 months
pcwaltonissue commentservo/pathfinder
Move more to the GPU in Pathfinder 3 when available
We have a D3D11 backend now that moves most things to GPU. Let's close this in favor of more specific items.
comment created time in 3 months
issue closedservo/pathfinder
It would be nice to use Pathfinder as the backend for a PDF renderer.
closed time in 3 months
pcwaltonissue closedservo/pathfinder
High CPU overhead on very complex scenes
Right now I am working on a project where I need to render very complex lines (~2000 points per line, all straight segments per line, usually 3 lines) every frame and have been trying out Pathfinder for it. While I am aware this is probably not an intended use case, I think this may still be valuable for improving the performance of Pathfinder.
The code I am working with can be found here. (see line 296 for some of the main rendering code)
First of all, in order to even get realtime performance, I had to break each line into smaller PathObjects instead of one single PathObject per line. I ended up with rendering taking roughly 8-11ms per frame (using RayonExecutor, measured very non-scientifically), which doesn't really leave enough time for the other stuff I want to do. One of the things I found was by not using OutlineStrokeToFill, although that obviously renders incorrectly, the render time reduced to about 2-4ms. #119 mentions that the stroke algorithm could be done on the GPU, and that might increase performance greatly in this scenario.
Something else I noticed under this scenario was that RayonExecutor doesn't seem to scale well with added threads. Even though my CPU has 8 threads, using RayonExecutor was only about 70% faster than SequentialExecutor (again measured very roughly, about 16-17ms per frame using SequentialExecutor). Additionally, the CPU usage reported by htop was about double that of using SequentialExecutor
Finally, I decided to compare performance of Pathfinder to Blend2D, a purely CPU based rasterizer. My code for testing it is on the blend2d branch of the same repo. Using it, only 3-5ms were spent drawing the lines. However, the caveat is that I have later steps that I want to perform on the GPU, and copying the rendered image from the CPU to the GPU takes a significant amount of time (at least with my naive implementation), bringing the total frame time back up to only a little faster than Pathfinder using RayonExecutor. Despite that, the CPU usage reported while using Blend2D is roughly half of Pathfinder using SequentialExecutor.
closed time in 3 months
rytoneissue commentservo/pathfinder
High CPU overhead on very complex scenes
Closing for now as there have been many CPU time improvements, including an entirely new backend, since this was filed. Feel free to reopen if more issues are found.
comment created time in 3 months
issue commentservo/pathfinder
Closing as this seems resolved now.
comment created time in 3 months
issue closedservo/pathfinder
It appears to be compiling shaders constantly as seen in the attached Instruments screenshot.

My system is:
Model Name: MacBook Pro Model Identifier: MacBookPro14,3 Processor Name: Intel Core i7 Processor Speed: 2.9 GHz Number of Processors: 1 Total Number of Cores: 4 L2 Cache (per Core): 256 KB L3 Cache: 8 MB Hyper-Threading Technology: Enabled Memory: 16 GB
System Version: macOS 10.14.6 (18G3020) Kernel Version: Darwin 18.7.0
And my graphics / display hardware is:
Radeon Pro 560:
Chipset Model: Radeon Pro 560 Type: GPU Bus: PCIe PCIe Lane Width: x8 VRAM (Total): 4 GB Vendor: AMD (0x1002) Device ID: 0x67ef Revision ID: 0x00c0 ROM Revision: 113-C980AJ-927 VBIOS Version: 113-C9801AU-A02 EFI Driver Version: 01.A0.927 Automatic Graphics Switching: Supported gMux Version: 4.0.29 [3.2.8] Metal: Supported, feature set macOS GPUFamily2 v1 Displays: Color LCD: Display Type: Built-In Retina LCD Resolution: 2880 x 1800 Retina Framebuffer Depth: 30-Bit Color (ARGB2101010) Main Display: Yes Mirror: Off Online: Yes Rotation: Supported Automatically Adjust Brightness: No LG UltraFine: Resolution: 5120 x 2880 (5K/UHD+ - Ultra High Definition Plus) UI Looks like: 2560 x 1440 @ 60 Hz Framebuffer Depth: 30-Bit Color (ARGB2101010) Display Serial Number: 910NTXRBJ538 Mirror: Off Online: Yes Rotation: Supported Automatically Adjust Brightness: No Connection Type: DisplayPort
closed time in 3 months
waywardmonkeysissue commentservo/pathfinder
536cb4c0936cac9d3dcb03bee22335d8b5df257d implements color matrix.
comment created time in 3 months
issue commentservo/pathfinder
Artifact when rendering large numbers of overlapping paths
https://github.com/servo/pathfinder/pull/418 fixes the biggest problems here. 1-character fix :)
The remaining issue with the 1-pixel-wide vertical lines seems to be caused by accumulation of floating-point error. I had worried that it indicated a fundamental problem with the lookup table approach for area, but I don't think it does, because if it did it wouldn't be a vertical line and would manifest itself only with lines of a certain slope, rather than all lines. So it's probably some subtle bug, not something fundamental.
comment created time in 3 months
pull request commentservo/pathfinder
Initialize resized mask textures to rgba(0, 0, 0, 0), not rgba(0, 0, 0, 1).
@bors-servo: r+
comment created time in 3 months