* Plumb selected tracing spans into hitrace
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Tag the spans in #33189 with the `servo_profiling` field
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Add comment about fields vs extensions
Signed-off-by: Delan Azabani <dazabani@igalia.com>
---------
Signed-off-by: Delan Azabani <dazabani@igalia.com>
* Properly store link relations
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Send fetch request for prefetch links
We don't actually *do* anything with the response yet
(handle errors etc) but its a first step.
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Fire load/error events for prefetch loads
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Set prefetch destination/cors setting correctly
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Update WPT expectations
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Fix ./mach test-tidy errors
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Set correct "Accept" value for prefetch requests
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Add spec text to individual steps
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
---------
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
This switches to using `std::time` types for DOM timer operations, which
allows removing our custom time units in favor of `Duration`.
Signed-off-by: Martin Robinson <mrobinson@igalia.com>
This fixes various unused code warnings after the recent rust upgrade.
Some of the dead code is maintained, as it is quite likely that it will
be used in future changes.
Signed-off-by: Martin Robinson <mrobinson@igalia.com>
* Implement Servo side of GamepadHapticActuator
Signed-off-by: Daniel Adams <msub2official@gmail.com>
* Get build working
Signed-off-by: Daniel Adams <msub2official@gmail.com>
* Create effect handling on embedder side
Signed-off-by: Daniel Adams <msub2official@gmail.com>
* Update tracing for GamepadHapticEffect
Signed-off-by: Daniel Adams <msub2official@gmail.com>
* Update gilrs to point to commit with effect complete event
Signed-off-by: Daniel Adams <msub2official@gmail.com>
* Implement playing and preempting haptic effects
Signed-off-by: Daniel Adams <msub2official@gmail.com>
* Update IDL to add trigger rumble
Signed-off-by: Daniel Adams <msub2official@gmail.com>
* Update WPT expectations
Signed-off-by: Daniel Adams <msub2official@gmail.com>
* Handle stopping haptic effects from reset()
Signed-off-by: Daniel Adams <msub2official@gmail.com>
* ./mach fmt, fix test-tidy issues
Signed-off-by: Daniel Adams <msub2official@gmail.com>
* Add extra validity checks for trigger rumble
Signed-off-by: Daniel Adams <msub2official@gmail.com>
* Retrieve supported haptic effects from embedder
Signed-off-by: Daniel Adams <msub2official@gmail.com>
* Fix test expectations
Signed-off-by: Daniel Adams <msub2official@gmail.com>
* Add missing spec link, pin gilrs commit
Signed-off-by: Daniel Adams <msub2official@gmail.com>
* servoshell cargo formatting
Signed-off-by: Daniel Adams <msub2official@gmail.com>
* Fix Cargo.toml
Signed-off-by: Daniel Adams <msub2official@gmail.com>
* Additional comments, realm proof, naming
Signed-off-by: Daniel Adams <msub2official@gmail.com>
* ./mach fmt
Signed-off-by: Daniel Adams <msub2official@gmail.com>
* Update gilrs rev to gilrs-core 0.5.12 release
Signed-off-by: Daniel Adams <msub2official@gmail.com>
* Implement sequence ids for gamepad haptic promises
Signed-off-by: Daniel Adams <msub2official@gmail.com>
* Take playing effect promise instead of cloning
Signed-off-by: Daniel Adams <msub2official@gmail.com>
* Implement listener for reset function
Signed-off-by: Daniel Adams <msub2official@gmail.com>
* Fix Cargo.lock
Signed-off-by: Daniel Adams <msub2official@gmail.com>
* Restructure IPC listeners, add comments, handle visibility change
Signed-off-by: Daniel Adams <msub2official@gmail.com>
* Check that haptic effect still exists before handling ff completion event
Signed-off-by: Daniel Adams <msub2official@gmail.com>
* Visibility steps, add InRealm bindings for promises
Signed-off-by: Daniel Adams <msub2official@gmail.com>
* Add Gamepad EmbedderMsg arms to egl servo_glue
Signed-off-by: Daniel Adams <msub2official@gmail.com>
---------
Signed-off-by: Daniel Adams <msub2official@gmail.com>
This crate only takes care of fonts now as graphics related things are
split into other crates. In addition, this exposes data structures at
the top of the crate, hiding the implementation details and making it
simpler to import them.
Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Mukilan Thiyagarajan <mukilan@igalia.com>
Disable some code for Windows, which is causing build warnings. When it
cannot be easily disabled (mainly for the incomplete BHM and sandbox
feature), allow dead code.
* Prepare errorscopes logic in wgpu_thread
* remove scope_id from ipc
* new GPUErrors per spec
* remove cotent timeline error_scope
* fixup poperrorscope types
* device_scope -> gpu_error and nice errors
* Handle errors detection more elegantly
* good expectations
* new expectations
* Make error_scope.errors Vec as per spec
* Move WebRender related types to `webrender_traits`
This refactor moves several WebRender related types
from `compositing_traits`, `script_traits` and `net_traits`
crates to the `webrender_traits` crate.
This change also moves the `Image` type and associated
function out of `net_traits` and into the `pixels` crate.
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
* Move `script_traits::WebrenderIpcSender` to `webrender_traits::WebRenderScriptApi`
---------
Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
For a long time, `gfx_traits` has held a lot of things unrelated to graphics
and also unrelated to the `gfx` crate (which is mostly about fonts).
This is a cleanup which does a few things:
1. Move non `gfx` crate things out of `gfx_traits`. This is important in
order to prevent dependency cycles with a different integration between
layout, script, and fonts.
2. Rename the `msg` crate to `base`. It didn't really contain anything
to do with messages and instead mostly holds ids, which are used
across many different crates in Servo. This new crate will hold the
*rare* data types that are widely used.
Details:
- All BackgroundHangMonitor-related things from base to a new
`background_hang_monitor_api` crate.
- Moved `TraversalDirection` to `script_traits`
- Moved `Epoch`-related things from `gfx_traits` to `base`.
- Moved `PrintTree` to base. This should be widely useful in Servo.
- Moved `WebrenderApi` from `base` to `webrender_traits` and renamed it
to `WebRenderFontApi`.
* 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>
These tests don't seem to time out any longer and this mechanism is
probably better served by some sort of adjustment to `RUST_LOG` in the
WPT harness.
We can use stable rust if we pass the unstable configuration as
command-line arguments to rustfmt itself. This prevents needing to
install an unstable rust toolchain.
The one downside here is that it doesn't seem that "ignore" is
supported so we have to start formatting the files in "third_party."
This shouldn't be a huge issue because we don't plan to check much more
rust code into those directories.
* script: Do not run layout in a thread
Instead of spawning a thread for layout that almost always runs
synchronously with script, simply run layout in the script thread.
This is a resurrection of #28708, taking just the bits that remove the
layout thread. It's a complex change and thus is just a first step
toward cleaning up the interface between script and layout. Messages are
still passed from script to layout via a `process()` method and script
proxies some messages to layout from other threads as well.
Big changes:
1. Layout is created in the script thread on Document load, thus every
live document is guaranteed to have a layout. This isn't completely
hidden in the interface, but we can safely `unwrap()` on a Document's
layout.
2. Layout configuration is abstracted away into a LayoutConfig struct
and the LayoutFactory is a struct passed around by the Constellation.
This is to avoid having to monomorphize the entire script thread
for each layout.
3. Instead of having the Constellation block on the layout thread to
figure out the current epoch and whether there are pending web fonts
loading, updates are sent synchronously to the Constellation when
rendering to a screenshot. This practically only used by the WPT.
A couple tests start to fail, which is probably inevitable since removing
the layout thread has introduced timing changes in "exit after load" and
screenshot behavior.
Co-authored-by: Josh Matthews <josh@joshmatthews.net>
* Update test expectations
* Fix some issues found during review
* Clarify some comments
* Address review comments
---------
Co-authored-by: Josh Matthews <josh@joshmatthews.net>
* Create embedder event to send to constellation
* Handle gamepad message in constellation, send to script thread
* Handle GamepadEvent in script thread and dispatch event to document
* Add missing Clones, fix event
* Add gamepad task source
* Adjust GamepadIndex type, remove unused imports
* Add internal getter for gamepads list
* Update gamepad new methods
* Handle gamepad connect and disconnect events
* Proto will be none, no need for HandleObject
* Initialize buttons and axes to standard mapping
* Adjust update type index types
* Update GamepadButton update function
* Adjust Gamepad mapping comments to match spec, add update logic
* Amend comment
* Update button and axis inputs on Updated event
* Add GilRs as gamepad backend in servoshell
* Add spec links, queue gamepad updates on task source
* ./mach fmt
* Fix comment length
* Split out button init, update spec comments
* Move gamepad event handling from document to global
* Map and normalize axes/button values
* Use std::time for gamepad timestamp
* Adjust gamepad handling in event loop
* Move button press/touch check into map+normalize function
- Small change but is more in line with spec
* ./mach fmt
* Update comment spec links and warning messages
* Doc comments -> regular comments
* Add window event handlers for gamepad connect/disconnect
* Adjust gamepad disconnect behavior
* Add missing TODO's, adjust gamepad/gamepadbutton list methods and formatting
* Update button handling from gilrs, add comments
* Enable gamepad pref during WPT tests and update expectations
* Update WPT expectations in meta-legacy-layout
* constellation: focusing, closing, and native window visibility
* rename “browser” to “webview”, “unfocus” to “blur”
* remove native window visibility from constellation
* rename more “browser” to “webview”
* guard clauses
* don’t automatically focus when no webviews are focused
* comment spec steps for window.close()
* use format interpolation
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
* fix formatting
* rename “Webview” to “WebView” in types and type parameters
* remove unused method
* fix libsimpleservo
---------
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
* constellation: notify embedder when events are hit-tested to browsers
* fix compile error in libsimpleservo
* impl From<&CompositorEvent> for CompositorEventVariant
* remove msg temporaries in Constellation::forward_event
* use single wildcard arm in EventDelivered case in handle_servo_events
This is the start of the organization of types that are in their own
crates in order to break dependency cycles between other crates. The
idea here is that putting these packages into their own directory is the
first step toward cleaning them up. They have grown organically and it
is difficult to explain to new folks where to put new shared types. Many
of these crates contain more than traits or don't contain traits at all.
Notably, `script_traits` isn't touched because it is vendored from
Gecko. Eventually this will move to `third_party`.
The constellation forwards messages from other tasks to the compositor.
Mainly, these are passed to WebRender. This change updates the names of
these messages so it is clearer where they are coming from and where
they are going.
* Upgrade vendored version of WebRender
* Patch WebRender: upgrade version of gleam
* Restore hit testing implementation
* Fix WebRender warnings
* Adapt Servo to new WebRender
* Update results
* Add a workaround for #30313
This slightly expands text boundaries in order to take into account the
fact that layout isn't measuring glyph boundaries.
* constellation: crash to a new “sad tab” page
* check in resources/crash.html
* use a separate enum variant instead of keying on reason
* fmt + tidy
* rename Resource::Crash to Resource::CrashHTML
* clean up crash page and add details (reason + backtrace)
* avoid repeating crash errors in script::script_thread warn log
* make new LoadData init more idiomatic
* clarify comments and new fields
* fix doc comment style
* Fix `mach test-wpt` to make crash tests work
There are two issues related to crash tests:
1. test-wpt is unable to find existing crash tests even when
called with --test-types=crashtests. The fix here is to
add crashtests to the default test suite types to python/wpt/run.py
2. When running in headless mode, crashes in style threads
don't cause servo to crash because the logic in constellation.rs
currently calls handle_panic only when the top-level browsing
context id is some value. Since style pool threads are shared,
they always generate Panic messages with None as top-level
browsing context id.
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
* Send bactrace to stderr and capture it in test runner
Servo's panic hook writes backtraces to stdout. This
patch changes it so they are written to stderr.
The crash test executor for servo in WPT grouping formatter
was also not capturing the output correctly for crashtests
as the log events were being aggregated based on thread name
which doesn't seem to match correctly in case of crashtests.
This patch also fixes the log grouping logic to be based on
test name.
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
* crashtests: update expectations for layout 2020
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
* crashtests: update expectations for layout 2013
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
* remove outdated & intemittent test expectations
Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
---------
Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>