mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
The Servo Browser Engine
The quadtree was checking to see if a window's position was within the clip region before drawing it. However, the window's position is in page-relative coordinates whereas the clip region is in window-relative coordinates. So, unless the iframe happened to fall in the clip range, it would never have tiles returned. If an iframe had enough content that it spilled outside of its clip range, different logic was triggered that would cause it to receive a ReRenderMsg anyway, which circumvented all of this. @eschweic, can you please review this if you have a minute? I believe that I've correctly captured the four checks we want to make (two each for ```x``` and ```y``` directions to determine if the window is in or out, but I'd appreciate another set of eyes on it. For some example data, in a call to ```get_tile_rects``` for an iframe that is sized to 400x400 and is 428-ish pixels down the page, with a browser frame that is 600 total pixels tall, that function is called with: window origin geom::point::Point2D<f32>{x: 9f32, y: 428.6000061f32} window size geom::size::Size2D<f32>{width: 400f32, height: 171.3999939f32} self origin geom::point::Point2D<f32>{x: 0f32, y: 0f32} self size 512f32" clip: size::Size2D<f32>{width: 400f32, height: 400f32} |
||
---|---|---|
bld | ||
mk | ||
src | ||
.gitignore | ||
.gitmodules | ||
configure | ||
Info.plist | ||
LICENSE | ||
Makefile.in | ||
README.md |
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.
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 libfontconfig1-dev libgl1-mesa-dri libglib2.0-dev \
xorg-dev msttcorefonts
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 everyINTERVAL
seconds-s SIZE
sets the tile size for rendering; defaults to 512
Keyboard Shortcuts
Ctrl-L
opens a dialog to browse to a new URL (Mac only currently)Ctrl--
zooms outCtrl-=
zooms inBackspace
goes backwards in the historyShift-Backspace
goes forwards in the historyEsc
exits servo
Developing
There are lots of make targets you can use:
make clean
- cleans Servo and its dependencies, but not Rustmake clean-rust
- cleans Rustmake clean-servo
- only cleans Servo itself (code insrc/components
make clean-DEP
- cleans the dependencyDEP
. e.g.make clean-rust-opengles
make bindings
- generate the Rust WebIDL bindingsmake DEP
- builds only the specified dependency. e.g.make rust-opengles
make check-DEP
- build and run tests for specified dependency