update
This commit is contained in:
@@ -1,78 +0,0 @@
|
||||
//! Smoke test for the vendored hardware [`RenderingContext`].
|
||||
//!
|
||||
//! Runs only when the `hardware-render` feature is enabled. The test
|
||||
//! degrades gracefully when the host machine lacks a hardware GL
|
||||
//! adapter (CI sandboxes, no-GPU containers): construction returns
|
||||
//! `Err`, the test logs the cause, and reports `ok` — proving the
|
||||
//! vendored constructor is wired up correctly without falsely
|
||||
//! marking the suite green when a GPU is actually expected and
|
||||
//! missing. Inverting that check (turning a GPU-missing host into a
|
||||
//! hard failure) is left for downstream CI configuration once the
|
||||
//! hardware path is wired into the sidecar binary.
|
||||
|
||||
#![cfg(feature = "hardware-render")]
|
||||
|
||||
use dpi::PhysicalSize;
|
||||
use ely_servo_host::HardwareOffscreenContext;
|
||||
use servo::RenderingContext;
|
||||
|
||||
#[test]
|
||||
fn constructs_or_explains_why_not() {
|
||||
let size = PhysicalSize::new(640, 480);
|
||||
match HardwareOffscreenContext::new(size) {
|
||||
Ok(context) => {
|
||||
// We don't drive Servo here — just confirm the vendored
|
||||
// glue produced a live context. Construction is the
|
||||
// failure mode this smoke test guards against; once a
|
||||
// context exists the real Servo paint path exercises the
|
||||
// rest of the surface.
|
||||
drop(context);
|
||||
}
|
||||
Err(error) => {
|
||||
eprintln!(
|
||||
"hardware GL adapter not available on this host \
|
||||
(acceptable in headless / no-GPU environments): {error:?}"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(target_os = "macos")]
|
||||
#[test]
|
||||
fn extracts_iosurface_mach_port_from_current_surface() -> Result<(), String> {
|
||||
let width = 256;
|
||||
let height = 192;
|
||||
let context = match HardwareOffscreenContext::new(PhysicalSize::new(width, height)) {
|
||||
Ok(context) => context,
|
||||
Err(error) => {
|
||||
eprintln!(
|
||||
"hardware GL adapter not available on this host \
|
||||
(acceptable in headless / no-GPU environments): {error:?}"
|
||||
);
|
||||
return Ok(());
|
||||
}
|
||||
};
|
||||
|
||||
context.prepare_for_rendering();
|
||||
context.present();
|
||||
let first = context
|
||||
.current_iosurface_mach_port()
|
||||
.map_err(|error| format!("first IOSurface mach port extraction failed: {error:?}"))?;
|
||||
assert!(
|
||||
first.mach_port_name != 0,
|
||||
"IOSurfaceCreateMachPort must return a non-null mach_port_t (got 0)"
|
||||
);
|
||||
assert_eq!(first.width, width, "reported width must match surface width");
|
||||
assert_eq!(first.height, height, "reported height must match surface height");
|
||||
|
||||
// The unbind/rebind cycle must leave the context usable: a second
|
||||
// call should still produce a valid mach port without panicking on
|
||||
// a stale `Framebuffer::None`.
|
||||
let second = context
|
||||
.current_iosurface_mach_port()
|
||||
.map_err(|error| format!("repeated mach port extraction failed: {error:?}"))?;
|
||||
assert!(second.mach_port_name != 0);
|
||||
assert_eq!(second.width, width);
|
||||
assert_eq!(second.height, height);
|
||||
Ok(())
|
||||
}
|
||||
Reference in New Issue
Block a user