* Add multiple concurrent top-level browsing contexts Co-authored-by: Delan Azabani <dazabani@igalia.com> * Rename variables and comments There are some variable and comments still use browser as names. This commit renames them to webview. * Update log message from web view to webview * Revert offscreen_framebuffer_id rename * Rename all web view to webview * Cargo fmt * Fix viewport/event/clear coordinates when multiview is disabled * Only deprecate things when multiview is enabled * Update WebViewManger with shown and invisible sets Replace visible_webviews and native_window_is_visible with shown_webviews and invisible_webviews. Add 4 more methods to set them accordingly. The behavior of is_effectively_visible will return true if the wbview is in shown_webviews set but not in invisible_webviews. * Update variant behaviors * Rename WebViewVisibilityChanged to MarkWebViewInvisible * Fix unit test by marking id 3 visible again * Update MarkWebViewInvisible and add UnmarkWebViewInvisible * Update format and doc comments * Clean up doc comments * Address style and naming changes * Rename UpdateWebView to UpdateFrameTreeForWebView * constellation: send frame tree unconditionally over focus and feature * Clarify shown and invisible sets in constellation WebViewManager * Eliminate forward_to_constellation!() * Actually remove the unused macro * Don’t gate compositor changes on multiview feature flag * Update todo in mouse event dispatch * Pass all visible webview ids in a single ReadyToPresent message * Fix compile and lint errors * servoshell: fix gap between minibrowser toolbar and webview * Fix failure in /_mozilla/mozilla/window_resizeTo.html * Fix compile warnings * Remove stray dbg!() * Remove confusing “effectively visible” logic (see #31815, #31816) * Allow embedder to show/hide/raise webviews without ipc * Update root pipeline only when painting order actually changes * Stop gating old focus and SetFrameTree behaviour behind Cargo feature * Use webview_id and WebViewId in webview-related code * Improve logging of webview-related embedder events * Allow webview Show and Raise events to optionally hide all others * Don’t do anything in response to WebViewPaintingOrder * Remove WebViewPaintingOrder, since its payload is unreliable * On MoveResizeWebView, only update root pipeline if rect changed * Rename IOCompositor methods for clarity * compositor: add event tracing; log webview ops even without ipc * Add temporary debug logging * Add more temporary debug logging * Remove temporary logging in compositor * Remove temporary debug logging * Add temporary debug logging, but defer I/O until panic * Capture a backtrace with each crash log entry * Proper error handling without panicking in WebViewManager * Clean up imports in constellation --------- Co-authored-by: Delan Azabani <dazabani@igalia.com> Co-authored-by: Martin Robinson <mrobinson@igalia.com> |
||
---|---|---|
.cargo | ||
.github | ||
.vscode | ||
components | ||
docs | ||
etc | ||
ports | ||
python | ||
resources | ||
support | ||
tests | ||
third_party | ||
.clang-format | ||
.flake8 | ||
.gitattributes | ||
.gitignore | ||
.mailmap | ||
Cargo.lock | ||
Cargo.toml | ||
CLOBBER | ||
CODE_OF_CONDUCT.md | ||
CONTRIBUTING.md | ||
Info.plist | ||
LICENSE | ||
mach | ||
mach.bat | ||
PULL_REQUEST_TEMPLATE.md | ||
README.md | ||
rust-toolchain.toml | ||
rustfmt.toml | ||
SECURITY.md | ||
servo-tidy.toml | ||
servobuild.example | ||
taplo.toml |
The Servo Parallel Browser Engine Project
Servo is a prototype web browser engine written in the Rust language. It is currently developed on 64-bit macOS, 64-bit Linux, 64-bit Windows, and Android.
Servo welcomes contribution from everyone. See
CONTRIBUTING.md
and HACKING_QUICKSTART.md
for help getting started.
Visit the Servo Project page for news and guides.
Getting Servo
git clone https://github.com/servo/servo
cd servo
- Your CARGO_HOME needs to point to (or be in) the same drive as your Servo repository (#28530).
- The Servo repository is big! If you have an unreliable network connection, consider making a shallow clone.
Build Setup
If these instructions fail or you would like to install dependencies manually, try the manual build setup.
macOS
- Ensure that the version showed by
python --version
is >= 3.10: - Install Xcode
- Install Homebrew
- Run
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- Run
./mach bootstrap
Note: This will install the recommended version of GStreamer globally on your system.
Linux
- Run
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- Install Python (version >= 3.10):
- Debian-like: Run
sudo apt install python3-pip python3-venv
- Fedora: Run
sudo dnf install python3 python3-pip python3-devel
- Arch: Run
sudo pacman -S --needed python python-pip
- Gentoo: Run
sudo emerge dev-python/pip
- Debian-like: Run
- Run
./mach bootstrap
Windows
- Download and run
rustup-init.exe
- Make sure to select Quick install via the Visual Studio Community installer or otherwise install Visual Studio 2022.
- In the Visual Studio Installer ensure the following components are installed for Visual Studio 2022:
- Windows 10 SDK (10.0.19041.0) (
Microsoft.VisualStudio.Component.Windows10SDK.19041
) - MSVC v143 - VS 2022 C++ x64/x86 build tools (Latest) (
Microsoft.VisualStudio.Component.VC.Tools.x86.x64
) - C++ ATL for latest v143 build tools (x86 & x64) (
Microsoft.VisualStudio.Component.VC.ATL
) - C++ MFC for latest v143 build tools (x86 & x64) (
Microsoft.VisualStudio.Component.VC.ATLMFC
)
- Windows 10 SDK (10.0.19041.0) (
- Install chocolatey
- Install Python 3.11
- Run
mach bootstrap
- This will install CMake, Git, and Ninja via choco in an Administrator console. Allow the scripts to run and once the operation finishes, close the new console.
- Run
refreshenv
See also Windows Troubleshooting Tips.
Android
- Ensure that the following environment variables are set:
ANDROID_SDK_ROOT
ANDROID_NDK_ROOT
:$ANDROID_SDK_ROOT/ndk/25.2.9519653/
ANDROID_SDK_ROOT
can be any directory (such as~/android-sdk
). All of the Android build dependencies will be installed there.
- Install the latest version of the Android command-line
tools to
$ANDROID_SDK_ROOT/cmdline-tools/latest
. - Run the following command to install the necessary components:
sudo $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --install "build-tools;33.0.2" \ "emulator" \ "ndk;25.2.9519653" \ "platform-tools" \ "platforms;android-33" \ "system-images;android-33;google_apis;x86_64"
For information about building and running the Android build, see the Android documentation.
Building
Servo is built with Cargo, the Rust package manager. We also use Mozilla's Mach tools to orchestrate the build and other tasks. You can call Mach like this:
On Unix systems:
./mach [command] [arguments]
On Windows Commandline:
mach.bat [command] [arguments]
The examples below will use Unix, but the same applies to Windows.
The Rust compiler
Servo's build system uses rustup.rs to automatically download a Rust compiler.
This is a specific version of Rust Nightly determined by the
rust-toolchain.toml
file.
Normal build
To build Servo in development mode. This is useful for development, but the resulting binary is very slow:
./mach build --dev
./mach run tests/html/about-mozilla.html
Release build
For benchmarking, performance testing, or real-world use.
Add the --release
flag to create an optimized build:
./mach build --release
./mach run --release tests/html/about-mozilla.html
Android build
For an armv7 Android build run the following command.
./mach build --android
Checking for build errors, without building
If you’re making changes to one crate that cause build errors in another crate, consider this instead of a full build:
./mach check
It will run cargo check
, which runs the analysis phase of the compiler
(and so shows build errors if any) but skips the code generation phase.
This can be a lot faster than a full build,
though of course it doesn’t produce a binary you can run.
Running
Run Servo with the command:
./servo [url] [arguments] # if you run with nightly build
./mach run [url] [arguments] # if you run with mach
# For example
./mach run https://www.google.com
Commandline Arguments
-p INTERVAL
turns on the profiler and dumps info to the console everyINTERVAL
seconds-s SIZE
sets the tile size for painting; defaults to 512-z
disables all graphical output; useful for running JS / layout tests-Z help
displays useful output to debug servo
Keyboard Shortcuts
Ctrl
+L
opens URL prompt (Cmd
+L
on Mac)Ctrl
+R
reloads current page (Cmd
+R
on Mac)Ctrl
+-
zooms out (Cmd
+-
on Mac)Ctrl
+=
zooms in (Cmd
+=
on Mac)Alt
+left arrow
goes backwards in the history (Cmd
+left arrow
on Mac)Alt
+right arrow
goes forwards in the history (Cmd
+right arrow
on Mac)Esc
orCtrl
+Q
exits Servo (Cmd
+Q
on Mac)
Runtime dependencies
Linux
GStreamer
>=1.18gst-plugins-base
>=1.18gst-plugins-good
>=1.18gst-plugins-bad
>=1.18gst-plugins-ugly
>=1.18libXcursor
libXrandr
libXi
libxkbcommon
vulkan-loader
Developing
There are lots of mach commands you can use. You can list them with ./mach --help
.
The generated documentation can be found on https://doc.servo.org/servo/index.html