Skip to content

Commit 990c18d

Browse files
committed
Make Debug impls not output pixel data
1 parent 5a0ee4b commit 990c18d

File tree

6 files changed

+48
-17
lines changed

6 files changed

+48
-17
lines changed

src/backends/android.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use raw_window_handle::AndroidNdkWindowHandle;
1212
use raw_window_handle::{HasDisplayHandle, HasWindowHandle, RawWindowHandle};
1313

1414
use crate::error::InitError;
15-
use crate::{BufferInterface, Rect, SoftBufferError, SurfaceInterface};
15+
use crate::{util, BufferInterface, Rect, SoftBufferError, SurfaceInterface};
1616

1717
/// The handle to a window for software buffering.
1818
#[derive(Debug)]
@@ -103,7 +103,7 @@ impl<D: HasDisplayHandle, W: HasWindowHandle> SurfaceInterface<D, W> for Android
103103

104104
Ok(BufferImpl {
105105
native_window_buffer,
106-
buffer,
106+
buffer: util::PixelBuffer(buffer),
107107
marker: PhantomData,
108108
})
109109
}
@@ -117,7 +117,7 @@ impl<D: HasDisplayHandle, W: HasWindowHandle> SurfaceInterface<D, W> for Android
117117
#[derive(Debug)]
118118
pub struct BufferImpl<'a, D: ?Sized, W> {
119119
native_window_buffer: NativeWindowBufferLockGuard<'a>,
120-
buffer: Vec<u32>,
120+
buffer: util::PixelBuffer,
121121
marker: PhantomData<(&'a D, &'a W)>,
122122
}
123123

src/backends/cg.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//! Softbuffer implementation using CoreGraphics.
22
use crate::backend_interface::*;
33
use crate::error::InitError;
4-
use crate::{Rect, SoftBufferError};
4+
use crate::{util, Rect, SoftBufferError};
55
use objc2::rc::Retained;
66
use objc2::runtime::{AnyObject, Bool};
77
use objc2::{define_class, msg_send, AllocAnyThread, DefinedClass, MainThreadMarker, Message};
@@ -260,7 +260,7 @@ impl<D: HasDisplayHandle, W: HasWindowHandle> SurfaceInterface<D, W> for CGImpl<
260260

261261
fn buffer_mut(&mut self) -> Result<BufferImpl<'_, D, W>, SoftBufferError> {
262262
Ok(BufferImpl {
263-
buffer: vec![0; self.width * self.height].into(),
263+
buffer: util::PixelBuffer(vec![0; self.width * self.height]),
264264
imp: self,
265265
})
266266
}
@@ -269,7 +269,7 @@ impl<D: HasDisplayHandle, W: HasWindowHandle> SurfaceInterface<D, W> for CGImpl<
269269
#[derive(Debug)]
270270
pub struct BufferImpl<'a, D, W> {
271271
imp: &'a mut CGImpl<D, W>,
272-
buffer: Box<[u32]>,
272+
buffer: util::PixelBuffer,
273273
}
274274

275275
impl<D: HasDisplayHandle, W: HasWindowHandle> BufferInterface for BufferImpl<'_, D, W> {
@@ -309,7 +309,7 @@ impl<D: HasDisplayHandle, W: HasWindowHandle> BufferInterface for BufferImpl<'_,
309309

310310
let data_provider = {
311311
let len = self.buffer.len() * size_of::<u32>();
312-
let buffer: *mut [u32] = Box::into_raw(self.buffer);
312+
let buffer: *mut [u32] = Box::into_raw(self.buffer.0.into_boxed_slice());
313313
// Convert slice pointer to thin pointer.
314314
let data_ptr = buffer.cast::<c_void>();
315315

src/backends/orbital.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use raw_window_handle::{HasDisplayHandle, HasWindowHandle, OrbitalWindowHandle,
33
use std::{cmp, marker::PhantomData, num::NonZeroU32, slice, str};
44

55
use crate::backend_interface::*;
6-
use crate::{Rect, SoftBufferError};
6+
use crate::{util, Rect, SoftBufferError};
77

88
#[derive(Debug)]
99
struct OrbitalMap {
@@ -177,7 +177,11 @@ impl<D: HasDisplayHandle, W: HasWindowHandle> SurfaceInterface<D, W> for Orbital
177177
.expect("failed to map orbital window"),
178178
)
179179
} else {
180-
Pixels::Buffer(vec![0; self.width as usize * self.height as usize])
180+
Pixels::Buffer(util::PixelBuffer(vec![
181+
0;
182+
self.width as usize
183+
* self.height as usize
184+
]))
181185
};
182186
Ok(BufferImpl { imp: self, pixels })
183187
}
@@ -186,7 +190,7 @@ impl<D: HasDisplayHandle, W: HasWindowHandle> SurfaceInterface<D, W> for Orbital
186190
#[derive(Debug)]
187191
enum Pixels {
188192
Mapping(OrbitalMap),
189-
Buffer(Vec<u32>),
193+
Buffer(util::PixelBuffer),
190194
}
191195

192196
#[derive(Debug)]

src/backends/web.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ pub struct WebImpl<D, W> {
4949
canvas: Canvas,
5050

5151
/// The buffer that we're drawing to.
52-
buffer: Vec<u32>,
52+
buffer: util::PixelBuffer,
5353

5454
/// Buffer has been presented.
5555
buffer_presented: bool,
@@ -84,7 +84,7 @@ impl<D: HasDisplayHandle, W: HasWindowHandle> WebImpl<D, W> {
8484

8585
Ok(Self {
8686
canvas: Canvas::Canvas { canvas, ctx },
87-
buffer: Vec::new(),
87+
buffer: util::PixelBuffer(Vec::new()),
8888
buffer_presented: false,
8989
size: None,
9090
window_handle: window,
@@ -100,7 +100,7 @@ impl<D: HasDisplayHandle, W: HasWindowHandle> WebImpl<D, W> {
100100

101101
Ok(Self {
102102
canvas: Canvas::OffscreenCanvas { canvas, ctx },
103-
buffer: Vec::new(),
103+
buffer: util::PixelBuffer(Vec::new()),
104104
buffer_presented: false,
105105
size: None,
106106
window_handle: window,

src/backends/x11.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
use crate::backend_interface::*;
99
use crate::error::{InitError, SwResultExt};
10-
use crate::{Rect, SoftBufferError};
10+
use crate::{util, Rect, SoftBufferError};
1111
use raw_window_handle::{
1212
HasDisplayHandle, HasWindowHandle, RawDisplayHandle, RawWindowHandle, XcbDisplayHandle,
1313
XcbWindowHandle,
@@ -163,7 +163,7 @@ enum Buffer {
163163
Shm(ShmBuffer),
164164

165165
/// A normal buffer that we send over the wire.
166-
Wire(Vec<u32>),
166+
Wire(util::PixelBuffer),
167167
}
168168

169169
#[derive(Debug)]
@@ -289,7 +289,7 @@ impl<D: HasDisplayHandle + ?Sized, W: HasWindowHandle> SurfaceInterface<D, W> fo
289289
})
290290
} else {
291291
// SHM is not available.
292-
Buffer::Wire(Vec::new())
292+
Buffer::Wire(util::PixelBuffer(Vec::new()))
293293
};
294294

295295
Ok(Self {
@@ -801,7 +801,10 @@ impl<D: ?Sized> Drop for X11DisplayImpl<D> {
801801
impl<D: ?Sized, W: ?Sized> Drop for X11Impl<D, W> {
802802
fn drop(&mut self) {
803803
// If we used SHM, make sure it's detached from the server.
804-
if let Buffer::Shm(mut shm) = mem::replace(&mut self.buffer, Buffer::Wire(Vec::new())) {
804+
if let Buffer::Shm(mut shm) = mem::replace(
805+
&mut self.buffer,
806+
Buffer::Wire(util::PixelBuffer(Vec::new())),
807+
) {
805808
// If we were in the middle of processing a buffer, wait for it to finish.
806809
shm.finish_wait(self.display.connection()).ok();
807810

src/util.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
use std::cmp;
55
use std::fmt;
66
use std::num::NonZeroU32;
7+
use std::ops;
78

89
use crate::Rect;
910
use crate::SoftBufferError;
@@ -94,6 +95,29 @@ pub(crate) fn union_damage(damage: &[Rect]) -> Option<Rect> {
9495
})
9596
}
9697

98+
/// A wrapper around a `Vec` of pixels that doesn't print the whole buffer on `Debug`.
99+
#[derive(PartialEq, Eq, Hash, Clone)]
100+
pub(crate) struct PixelBuffer(pub Vec<u32>);
101+
102+
impl fmt::Debug for PixelBuffer {
103+
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
104+
f.debug_struct("PixelBuffer").finish_non_exhaustive()
105+
}
106+
}
107+
108+
impl ops::Deref for PixelBuffer {
109+
type Target = Vec<u32>;
110+
fn deref(&self) -> &Self::Target {
111+
&self.0
112+
}
113+
}
114+
115+
impl ops::DerefMut for PixelBuffer {
116+
fn deref_mut(&mut self) -> &mut Self::Target {
117+
&mut self.0
118+
}
119+
}
120+
97121
#[cfg(test)]
98122
mod tests {
99123
use super::*;

0 commit comments

Comments
 (0)