The Servo Browser Engine
Find a file
bors-servo 1bc68f7eff auto merge of #944 : larsbergstrom/servo/iframe_display, r=pcwalton
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}
2013-09-17 17:04:13 -07:00
bld Added mozharness config files 2013-07-17 17:36:34 -04:00
mk sub.mk: Remove CFLAGS_mozjs 2013-09-04 17:39:33 -07:00
src Change retrieval of buffers from sublayers to both clip relative 2013-09-17 17:40:56 -05:00
.gitignore DOM bindings: Autogenerate list of prototypes and binding registration goop. 2013-07-12 14:06:23 -04:00
.gitmodules Use https for rust-http submodule 2013-09-03 20:37:25 -07:00
configure Add rust-http to the build and begin using it to resolve http urls 2013-09-03 16:42:21 -07: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.in Remove a stray space. Clean up awkware if result...result construct. 2013-09-12 15:16:35 -07:00
README.md Update README.md for android build instruction 2013-08-28 10:40:29 +09: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.

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 every INTERVAL 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 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