1
0
Fork 0
forked from wry/wry

wl_surface: refactor collect_commit_data

This commit is contained in:
Julian Orth 2024-09-26 15:58:31 +02:00
parent fa46527a37
commit 1baa24adef

View file

@ -187,15 +187,15 @@ impl CommitTimeline {
surface: &Rc<WlSurface>, surface: &Rc<WlSurface>,
pending: &mut Box<PendingState>, pending: &mut Box<PendingState>,
) -> Result<(), CommitTimelineError> { ) -> Result<(), CommitTimelineError> {
let mut points = SmallVec::new(); let mut collector = CommitDataCollector {
let mut pending_uploads = 0; acquire_points: Default::default(),
let mut implicit_dmabufs = SmallVec::new(); shm_uploads: 0,
collect_commit_data( implicit_dmabufs: Default::default(),
pending, };
&mut points, collector.collect(pending);
&mut pending_uploads, let points = collector.acquire_points;
&mut implicit_dmabufs, let pending_uploads = collector.shm_uploads;
); let implicit_dmabufs = collector.implicit_dmabufs;
let has_dependencies = let has_dependencies =
points.is_not_empty() || pending_uploads > 0 || implicit_dmabufs.is_not_empty(); points.is_not_empty() || pending_uploads > 0 || implicit_dmabufs.is_not_empty();
let must_be_queued = has_dependencies let must_be_queued = has_dependencies
@ -550,30 +550,33 @@ fn schedule_async_upload(
type Point = (Rc<SyncObj>, SyncObjPoint); type Point = (Rc<SyncObj>, SyncObjPoint);
fn collect_commit_data( struct CommitDataCollector {
pending: &mut PendingState, acquire_points: SmallVec<[Point; 1]>,
acquire_points: &mut SmallVec<[Point; 1]>, shm_uploads: usize,
shm_uploads: &mut usize, implicit_dmabufs: SmallVec<[Rc<OwnedFd>; 1]>,
implicit_dmabufs: &mut SmallVec<[Rc<OwnedFd>; 1]>, }
) {
if let Some(Some(buffer)) = &pending.buffer { impl CommitDataCollector {
if buffer.is_shm() { fn collect(&mut self, pending: &mut PendingState) {
*shm_uploads += 1; if let Some(Some(buffer)) = &pending.buffer {
} if buffer.is_shm() {
if !pending.explicit_sync { self.shm_uploads += 1;
if let Some(dmabuf) = &buffer.dmabuf { }
for plane in &dmabuf.planes { if !pending.explicit_sync {
implicit_dmabufs.push(plane.fd.clone()); if let Some(dmabuf) = &buffer.dmabuf {
for plane in &dmabuf.planes {
self.implicit_dmabufs.push(plane.fd.clone());
}
} }
} }
} }
} if let Some(point) = pending.acquire_point.take() {
if let Some(point) = pending.acquire_point.take() { self.acquire_points.push(point);
acquire_points.push(point); }
} for ss in pending.subsurfaces.values_mut() {
for ss in pending.subsurfaces.values_mut() { if let Some(state) = &mut ss.pending.state {
if let Some(state) = &mut ss.pending.state { self.collect(state);
collect_commit_data(state, acquire_points, shm_uploads, implicit_dmabufs); }
} }
} }
} }