The Servo Browser Engine
Find a file
Patrick Walton 81f5da9dd8 layout: Rewrite display list building to be parallel and to handle
overflow correctly, and opportunistically lay out blocks in parallel
even if floats are present.

This commit fixes the `inline-height-test` in Acid2 by implementing
proper overflow as well as the inline "strut".  (See CSS 2.1 § 10.8.1.)
Acid2 was accidentally being rendered properly before because tables'
descendant flows were not being laid out properly.

Display list building is now parallel and is done by bubbling up display
items and layers from parent to child. Speedups of around 60%-70% are
observed on Wikipedia with a 4-core HyperThreaded Core i7.  More
optimizations are possible; this is just a start.

To minimize the amount of data that needs to be bubbled up, as well as
to make proper handling of `overflow: hidden` clipping easier, the
`StackingContext` abstraction is now purely internal to the display
list.  That is, instead of placing items into a stacking context
directly, display items are placed into display lists alongside a
stacking level.  When a stacking context is complete, it is flattened
with the the `flatten` method, which shuffles the display items that
make up the context into their proper order while handling clipping
properly.
2014-05-02 16:07:42 -07:00
bld Install gperf on Linux builders 2014-02-28 10:51:00 -08:00
mk add start of embedding crate: build system with CEF types 2014-05-01 16:58:33 -04:00
src layout: Rewrite display list building to be parallel and to handle 2014-05-02 16:07:42 -07:00
.gitignore Change how backup/restore make task works. 2014-04-29 13:02:36 -06:00
.gitmodules auto merge of #2089 : Manishearth/servo/wpt, r=Ms2ger 2014-04-18 10:04:07 -04:00
configure add start of embedding crate: build system with CEF types 2014-05-01 16:58:33 -04:00
CONTRIBUTING.md CONTRIBUTING: link to testing guide 2014-03-07 15:52:10 -08:00
Info.plist Build an app bundle on OS X 2012-04-23 17:43:45 -07:00
LICENSE Add license 2013-04-03 18:37:29 -07:00
Makefile.backup Change how backup/restore make task works. 2014-04-29 13:02:36 -06:00
Makefile.in make base all: Makefile rule conditional, only build embedding on non-android 2014-05-01 18:01:37 -04:00
README.md Mention automake and cmake 2014-04-18 22:49:23 +02:00

The Servo Parallel Browser Project

Servo is a prototype web browser engine written in the Rust language. It is currently developed on 64bit OS X and 64bit Linux.

Servo welcomes contribution from everyone. See CONTRIBUTING.md for help getting started.

Prerequisites

On OS X (homebrew):

brew install https://raw.github.com/Homebrew/homebrew-versions/master/autoconf213.rb
brew install automake libtool pkg-config

On OS X (MacPorts):

sudo port install autoconf213

On Debian-based Linuxes:

sudo apt-get install autoconf2.13 curl freeglut3-dev libtool \
    libfreetype6-dev libgl1-mesa-dri libglib2.0-dev xorg-dev \
    msttcorefonts gperf g++ automake cmake

On Fedora Core:

sudo yum install autoconf213 curl freeglut-devel libtool \
    freetype-devel mesa-libGL-devel glib2-devel libX11-devel \
    gperf gcc-c++ rpm-build cabextract ttmkfdir
pushd .
cd /tmp
wget http://corefonts.sourceforge.net/msttcorefonts-2.5-1.spec
rpmbuild -bb msttcorefonts-2.5-1.spec
sudo yum install $HOME/rpmbuild/RPMS/noarch/msttcorefonts-2.5-1.noarch.rpm 
popd

On Debian-based Linuxes (cross-compilation for Android):

sudo apt-get install autoconf2.13 curl libtool ia32-libs

And it needs pre-installed Android tools. See wiki for details

Servo builds its own copy of Rust, so there is no need to provide a Rust compiler.

Building

Servo cannot be built in-tree; you must create a directory in which to run configure and make and place the build artifacts.

git clone https://github.com/mozilla/servo.git
cd servo
mkdir -p build && cd build
../configure
make && make check
./servo ../src/test/html/about-mozilla.html

###Building for Android target

git clone https://github.com/mozilla/servo.git
cd servo
mkdir -p build && cd build
../configure --target-triples=arm-linux-androideabi --android-cross-path=<Android toolchain path> --android-ndk-path=<Android NDK path> --android-sdk-path=<Android SDK path>
make

Running

Commandline Arguments

  • -p INTERVAL turns on the profiler and dumps info to the console every INTERVAL seconds
  • -s SIZE sets the tile size for rendering; defaults to 512
  • -z disables all graphical output; useful for running JS / layout tests

Keyboard Shortcuts

  • Ctrl-L opens a dialog to browse to a new URL (Mac only currently)
  • Ctrl-- zooms out
  • Ctrl-= zooms in
  • Backspace goes backwards in the history
  • Shift-Backspace goes forwards in the history
  • Esc exits servo

Developing

There are lots of make targets you can use:

  • make clean - cleans Servo and its dependencies, but not Rust
  • make clean-rust - cleans Rust
  • make clean-servo - only cleans Servo itself (code in src/components
  • make clean-DEP - cleans the dependency DEP. e.g. make clean-rust-opengles
  • make bindings - generate the Rust WebIDL bindings
  • make DEP - builds only the specified dependency. e.g. make rust-opengles
  • make check-DEP - build and run tests for specified dependency

The make check-* targets for running tests are listed here