mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
The Servo Browser Engine
Fixes #76. Implemented the only font metric remaining to resolve issue #76 for the Linux platform. There are still some variations between Linux and OS X font metrics. Looking at values for the "Times New Roman" font, the following metrics differed by over 10%: `leading`, `x_height` and `max_advance`. It was not obvious if this would create any major difference in rendering, or whether the discrepancies would be handled in platform specific ways during the rendering process. Only `x_height` is being used by existing code. The `leading` property under Linux is still an order of magnitude off from the OS X version, but they are computed with similar calculations. Issue #1355 has been opened to further investigate the discrepancies. #### Platform comparison of font metrics for "Times New Roman" between Linux and OS X: **Au** is the raw metric values stored in the `FontMetrics` struct. **% of em** is how large that value is relative to the raw `em_size` of the font as a percentage. Linux reports the pt size differently than OS X, but this is probably because the linux platform uses hard-coded points-per-inch value (hard-coded in `src/components/util/geometry.rs`), whereas OS X uses the points-per-inch value provided by the font library. +-----------------------------------+ +-----------------------------------+ | Linux (@14.25pt, 1.33em) | | OS X (@19.35pt, 1.0em) | +------------------+------+---------+ +------------------+------+---------+ | property | Au | % of em | | property | Au | % of em | +------------------+------+---------+ +------------------+------+---------+ | underline_size | 55 | 4.82 | | underline_size | 60 | 5.17 | | underline_offset | -151 | -13.25 | | underline_offset | -120 | -10.34 | | strikeout_size | 56 | 4.91 | | strikeout_size | 0 | 0.00 | | strikeout_offset | 295 | 25.88 | | strikeout_offset | 0 | 0.00 | | leading | 541 | 47.45 | | leading | 60 | 5.17 | | x_height | 1015 | 89.04 | | x_height | 660 | 56.85 | | em_size | 1140 | 100.00 | | em_size | 1161 | 100.00 | | ascent | 1015 | 89.04 | | ascent | 893 | 76.92 | | descent | 246 | 21.58 | | descent | 203 | 17.48 | | max_advance | 1199 | 105.18 | | max_advance | 2820 | 242.89 | +------------------+------+---------+ +------------------+------+---------+ +-----------------------------------+ +-----------------------------------+ | Linux (@24pt, 1.33em) | | OS X (@32.683333pt, 1.0em) | +------------------+------+---------+ +------------------+------+---------+ | property | Au | % of em | | property | Au | % of em | +------------------+------+---------+ +------------------+------+---------+ | underline_size | 93 | 4.84 | | underline_size | 120 | 6.12 | | underline_offset | -255 | -13.28 | | underline_offset | -240 | -12.24 | | strikeout_size | 95 | 4.95 | | strikeout_size | 0 | 0.00 | | strikeout_offset | 496 | 25.83 | | strikeout_offset | 0 | 0.00 | | leading | 912 | 47.50 | | leading | 60 | 3.06 | | x_height | 1710 | 89.06 | | x_height | 1080 | 55.10 | | em_size | 1920 | 100.00 | | em_size | 1960 | 100.00 | | ascent | 1710 | 89.06 | | ascent | 1544 | 78.77 | | descent | 415 | 21.61 | | descent | 365 | 18.62 | | max_advance | 2020 | 105.21 | | max_advance | 4740 | 241.84 | +------------------+------+---------+ +------------------+------+---------+ +-----------------------------------+ +-----------------------------------+ | Linux (@45pt, 1.33em) | | OS X (@60.833333pt, 1.0em) | +------------------+------+---------+ +------------------+------+---------+ | property | Au | % of em | | property | Au | % of em | +------------------+------+---------+ +------------------+------+---------+ | underline_size | 175 | 4.86 | | underline_size | 180 | 4.93 | | underline_offset | -479 | -13.31 | | underline_offset | -480 | -13.15 | | strikeout_size | 179 | 4.97 | | strikeout_size | 0 | 0.00 | | strikeout_offset | 931 | 25.86 | | strikeout_offset | 0 | 0.00 | | leading | 1709 | 47.47 | | leading | 180 | 4.93 | | x_height | 3208 | 89.11 | | x_height | 2040 | 55.89 | | em_size | 3600 | 100.00 | | em_size | 3650 | 100.00 | | ascent | 3208 | 89.11 | | ascent | 2925 | 80.14 | | descent | 778 | 21.61 | | descent | 690 | 18.90 | | max_advance | 3788 | 105.22 | | max_advance | 8880 | 243.29 | +------------------+------+---------+ +------------------+------+---------+ +-----------------------------------+ +-----------------------------------+ | Linux (@30.75pt, 1.33em) | | OS X (@41.9pt, 1.0em) | +------------------+------+---------+ +------------------+------+---------+ | property | Au | % of em | | property | Au | % of em | +------------------+------+---------+ +------------------+------+---------+ | underline_size | 120 | 4.88 | | underline_size | 120 | 4.77 | | underline_offset | -327 | -13.29 | | underline_offset | -360 | -14.32 | | strikeout_size | 122 | 4.95 | | strikeout_size | 0 | 0.00 | | strikeout_offset | 636 | 25.85 | | strikeout_offset | 0 | 0.00 | | leading | 1168 | 47.47 | | leading | 120 | 4.77 | | x_height | 2192 | 89.11 | | x_height | 1440 | 57.27 | | em_size | 2460 | 100.00 | | em_size | 2514 | 100.00 | | ascent | 2192 | 89.11 | | ascent | 1991 | 79.20 | | descent | 532 | 21.63 | | descent | 487 | 19.37 | | max_advance | 2588 | 105.20 | | max_advance | 6120 | 243.44 | +------------------+------+---------+ +------------------+------+---------+ |
||
---|---|---|
bld | ||
mk | ||
src | ||
.gitignore | ||
.gitmodules | ||
configure | ||
CONTRIBUTING.md | ||
Info.plist | ||
LICENSE | ||
Makefile.backup | ||
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.
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 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-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 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