compositor: Unify the cross process and in-process API (#36443)

Because there used to be two traits exposing messages to the compositor,
there were two kinds of messages that could be sent:

1. In-process messages from the `Constellation`
2. Cross-process messages from other parts of Servo

Now these two types of messages can be unified into one type. With that
done the compositor can simply keep a single `IpcReceiver` for all
messages, instead of having to set up a route for the cross-process
messsages. This decreases overhead of cross proceses messages a bit, but
more importantly solves an issue where Servo would rely on the
compositor's cross-process message route after the `Constellation` had
called `ROUTER.shutdown()`.

This is part of #36442.

Testing: This is covered by existing WPT tests.
Signed-off-by: Martin Robinson <mrobinson@igalia.com>

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
This commit is contained in:
Martin Robinson 2025-04-12 23:38:22 +02:00 committed by GitHub
parent 5f0f457ac3
commit 4c55104b36
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 95 additions and 215 deletions

View file

@ -2,7 +2,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use compositing_traits::CrossProcessCompositorMessage;
use compositing_traits::CompositorMsg;
use dom_struct::dom_struct;
use euclid::Size2D;
use profile_traits::ipc;
@ -41,7 +41,7 @@ impl Screen {
self.window
.compositor_api()
.sender()
.send(CrossProcessCompositorMessage::GetScreenSize(
.send(CompositorMsg::GetScreenSize(
self.window.webview_id(),
sender,
))
@ -57,7 +57,7 @@ impl Screen {
self.window
.compositor_api()
.sender()
.send(CrossProcessCompositorMessage::GetAvailableScreenSize(
.send(CompositorMsg::GetAvailableScreenSize(
self.window.webview_id(),
sender,
))

View file

@ -1898,10 +1898,7 @@ impl Window {
let (sender, receiver) =
ProfiledIpc::channel::<DeviceIndependentIntRect>(timer_profile_chan).unwrap();
let _ = self.compositor_api.sender().send(
compositing_traits::CrossProcessCompositorMessage::GetClientWindowRect(
self.webview_id(),
sender,
),
compositing_traits::CompositorMsg::GetClientWindowRect(self.webview_id(), sender),
);
let rect = receiver.recv().unwrap_or_default();
(