perf(capture): add SceneLens GPU streams and retained scene reuse

Use persistent privacy-filtered capture targets and client-owned GPU buffers with fence completion, backpressure, negotiated frame rates and shared-memory fallback.

Invalidate output views on scene changes while preserving inactive-window callbacks and capture revocation. Include OBS memory-mask negotiation and native pixel, transport and recording regressions.
This commit is contained in:
Samuel Onoja committed 2026-10-24 19:58:54 +01:00
1 parent f49f62583d
commit 533cd74c94
40 files changed
+4704 -704

No files matched your search

+9 -29
View File
@@ -7,26 +7,17 @@ use smithay::backend::renderer::utils::CommitCounter;
use super::{
AnimatedWindowRenderElement, ConstrainAlign, ConstrainBehavior, ConstrainReference,
CropRenderElement, CursorImageStatus, CursorImageSurfaceData, Duration, Ferese,
FrameEffectMetrics, GlesRenderer, Layer, LayerSurface, Logical, MaterialSurface,
MemoryRenderBufferRenderElement, Output, Physical, Point, PopupManager, Rectangle, Relocate,
RelocateRenderElement, RenderElementKind, Renderer, RescaleRenderElement, Resource,
RoundedRect, Size, SolidColorRenderElement, Transform, WaylandSurfaceRenderElement,
append_material_surface, backdrop, constrain_space_element, corner_program,
layer_map_for_output, material_element, overview_strip_elements,
render_elements_from_surface_tree, resize_content_behavior, rounded_visual_rect,
rounded_window_elements, window_border_element, window_corner_shape, window_shadow_element,
window_tint_element, with_states,
CropRenderElement, CursorImageStatus, CursorImageSurfaceData, Ferese, FrameEffectMetrics,
GlesRenderer, Layer, LayerSurface, Logical, MaterialSurface, MemoryRenderBufferRenderElement,
Output, Physical, Point, PopupManager, Rectangle, Relocate, RelocateRenderElement,
RenderElementKind, Renderer, RescaleRenderElement, Resource, RoundedRect, Size,
SolidColorRenderElement, Transform, WaylandSurfaceRenderElement, append_material_surface,
backdrop, constrain_space_element, corner_program, layer_map_for_output, material_element,
overview_strip_elements, render_elements_from_surface_tree, resize_content_behavior,
rounded_visual_rect, rounded_window_elements, window_border_element, window_corner_shape,
window_shadow_element, window_tint_element, with_states,
};
pub(crate) fn animated_window_elements(
state: &mut Ferese,
renderer: &mut GlesRenderer,
output: &Output,
) -> Vec<AnimatedWindowRenderElement> {
output_elements(state, renderer, output, true)
}
pub(crate) fn frame_effect_metrics(
_elements: &[AnimatedWindowRenderElement],
_scale: f64,
@@ -34,17 +25,6 @@ pub(crate) fn frame_effect_metrics(
FrameEffectMetrics
}
pub(crate) fn output_elements(
state: &mut Ferese,
renderer: &mut GlesRenderer,
output: &Output,
include_cursor: bool,
) -> Vec<AnimatedWindowRenderElement> {
let frame = state.sample_frame(output, Duration::ZERO);
sampled_output_elements(state, renderer, output, include_cursor, &frame)
}
pub(crate) fn sampled_output_elements(
state: &mut Ferese,
renderer: &mut GlesRenderer,