Servo Update: Navigation, Scrolling, GPU Rendering, Underlines, and more

May 26, 2013

Servo is changing rapidly, and with two new interns joining the team the pace will only accelerate. The last few weeks have seen some big changes starting to land in the tree.

The Servo team welcomes and encourages new contributors and I’ll note particular projects where new contributors can easily get involved below. These aren’t the only places you can help, of course, but I thought it might be useful to know a few good places to start.

Navigation and Scrolling

Patrick Walton has landed the beginnings of navigation and scrolling support. The rust-alert library provides simple popup dialog support, and using this, you can now hit Ctrl-L to bring up a dialog to enter a new URL. rust-glut also got keyboard handler support. Note that this only works on Mac OS X right now due to missing support for Linux in rust-alert.

Scrolling is another important UI feature, and you can now pan the content in the window. Servo does not currently draw new parts of the content that were hidden, but that should be simple to add.

For new contributors: If you’re looking to get started hacking on Servo or just want to learn more about Rust, adding popup dialogs on Linux to rust-alert would be a good project. Adding drawing of previously hidden areas to the scrolling code should also be an easy project for someone.

Underlined Text

Eric Atkinson, one of Servo’s new interns, has just landed his first pull request, adding the first bits of CSS’s text-decoration support for underline .

For new contributors: Eric didn’t know any Rust or anything about Servo internals before he started last week. It doesn’t take much to get started, and there is lots of low hanging fruit to pick on the Servo tree. For example, based on Eric’s underline work, it should be fairly easy to add strike-through .

Performance metrics

Tim Kuehn, another of Servo’s new interns, has also been busy his first week. He started overhauling how performance data is collected in Servo. Instead of simply timing bits of code and output the results to the console, there is now a separate task that handles performance data.

For new contributors: We’re not yet doing anything with this data yet, but we should be. It should be a pretty easy project to start outputting it more systematically and doing something with the results. Another idea would just to be report numbers for different platforms and compare them to similar numbers from other browsers so we know where we should improve.

GPU Rendering

The first parts of GPU accelerated rendering have started to land in Servo, specifically updates to Skia and Azure to support framebuffer-backed draw targets. These framebuffers render to textures which are shared with the GPU-based compositor. This avoids needing to render to CPU memory and then upload textures to the GPU. There is still a bug or two to work out with tiling support, but I expect GPU rendering to land in the tree pretty soon.

Miscellaneous

Servo now has continuous integration via Bors, the wonderful CI bot that the Rust team has already been using for some time. Not only that, but Servo’s Bors is now running on Mozilla’s release engineering infrastructure instead of being hosted by the Rust team. This should keep the tree building cleanly from now on. If you’ve previously had trouble compiling Servo, now would be a good time to try again.

Patrick Walton has been heavily refactoring Servo’s directory layout and many of its subsystems. util and net libraries were split out from the gfx library, and compositing was made quite a bit simpler. He has also refactored layout and is working on splitting Servo into more libraries, which make it both easier to understand and build faster. Much documentation has been added in these refactorings.

Samsung continues to work on Android support, improving the Rust compiler along the way. That work should land in the tree in the near future.