
## Summary Pass the fixed position element animation id through webrender, returning the the animation id in the hit-test result if the element is a fixed position element. This animation id then can be used to lookup the relevant Hit-Testing Tree Node, which can be used to find the fixed (or sticky) position side bits. ## Motivation Sticky content can be currently stuck to the root content or not, based on the scroll position. As a result, when hit testing sticky content, APZ needs both the sticky position side bits and additional information to determine if the element is currently stuck to the root content. This is needed to fix the hit-testing of sticky position content when a APZ transform is being applied, such as overscroll and hiding the dynamic toolbar. ## Implementation The information needed to determine if a element is currently stuck to the root content and the fixed/sticky position side bits is already stored in the hit-testing tree node. Any hit test result should have a corresponding hit-testing tree node entry. When a hit-test result contains a animation id and a hit-testing tree node is found, we can store a pointer to this node and use this to check the fixed/sticky position side bits. Something similar is already done for hit test results when a scrollbar is hit. Differential Revision: https://phabricator.services.mozilla.com/D148648
WebRender
WebRender is a GPU-based 2D rendering engine written in Rust. Firefox, the research web browser Servo, and other GUI frameworks draw with it. It currently uses the OpenGL API internally.
Note that the canonical home for this code is in gfx/wr folder of the mozilla-central repository at https://hg.mozilla.org/mozilla-central. The Github repository at https://github.com/servo/webrender should be considered a downstream mirror, although it contains additional metadata (such as Github wiki pages) that do not exist in mozilla-central. Pull requests against the Github repository are still being accepted, although once reviewed, they will be landed on mozilla-central first and then mirrored back. If you are familiar with the mozilla-central contribution workflow, filing bugs in Bugzilla and submitting patches there would be preferred.
Update as a Dependency
After updating shaders in WebRender, go to servo and:
- Go to the servo directory and do ./mach update-cargo -p webrender
- Create a pull request to servo
Use WebRender with Servo
To use a local copy of WebRender with servo, go to your servo build directory and:
- Edit Cargo.toml
- Add at the end of the file:
[patch."https://github.com/servo/webrender"]
"webrender" = { path = "<path>/webrender" }
"webrender_api" = { path = "<path>/webrender_api" }
where <path>
is the path to your local copy of WebRender.
- Build as normal
Documentation
The Wiki has a few pages describing the internals and conventions of WebRender.
Testing
Tests run using OSMesa to get consistent rendering across platforms.
Still there may be differences depending on font libraries on your system, for example.
See this gist for how to make the text tests useful in Fedora, for example.