Skip to content

Commit d6873fb

Browse files
committed
feat(server): benchmark the remotefx tile encoder
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
1 parent 2f98acf commit d6873fb

File tree

7 files changed

+253
-12
lines changed

7 files changed

+253
-12
lines changed

Cargo.lock

Lines changed: 195 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/ironrdp-graphics/src/color_conversion.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -135,15 +135,12 @@ pub fn to_64x64_ycbcr_tile(
135135
height: usize,
136136
stride: usize,
137137
format: PixelFormat,
138-
y: &mut [i16],
139-
cb: &mut [i16],
140-
cr: &mut [i16],
138+
y: &mut [i16; 64 * 64],
139+
cb: &mut [i16; 64 * 64],
140+
cr: &mut [i16; 64 * 64],
141141
) {
142142
assert!(width <= 64);
143143
assert!(height <= 64);
144-
assert_eq!(y.len(), 64 * 64);
145-
assert_eq!(cb.len(), 64 * 64);
146-
assert_eq!(cr.len(), 64 * 64);
147144

148145
let to_rgb = pixel_format_to_rgb_fn(format);
149146
let bpp = format.bytes_per_pixel() as usize;

crates/ironrdp-server/Cargo.toml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ test = false
1717

1818
[features]
1919
helper = ["dep:x509-cert", "dep:rustls-pemfile"]
20+
bench = []
2021

2122
[dependencies]
2223
anyhow = "1.0"
@@ -41,6 +42,13 @@ rustls-pemfile = { version = "2.2.0", optional = true }
4142

4243
[dev-dependencies]
4344
tokio = { version = "1", features = ["sync"] }
45+
criterion = "0.5"
46+
47+
[[bench]]
48+
name = "bench"
49+
path = "benches/bench.rs"
50+
required-features = ["bench"]
51+
harness = false
4452

4553
[lints]
4654
workspace = true
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
use std::num::NonZero;
2+
3+
use criterion::{criterion_group, criterion_main, Criterion};
4+
use ironrdp_pdu::codecs::rfx::{EntropyAlgorithm, Quant};
5+
use ironrdp_server::{bench::encoder::*, BitmapUpdate};
6+
7+
pub fn criterion_benchmark(c: &mut Criterion) {
8+
let quant = Quant::default();
9+
let algo = EntropyAlgorithm::Rlgr3;
10+
let bitmap = BitmapUpdate {
11+
top: 0,
12+
left: 0,
13+
width: NonZero::new(64).unwrap(),
14+
height: NonZero::new(64).unwrap(),
15+
format: ironrdp_server::PixelFormat::ARgb32,
16+
data: vec![0; 64 * 64 * 4],
17+
order: ironrdp_server::PixelOrder::BottomToTop,
18+
stride: 64 * 4,
19+
};
20+
let enc = rfx::UpdateEncoder::new(&bitmap, quant, algo);
21+
let mut buf = vec![0; 64 * 64 * 3];
22+
c.bench_function("rfxenc", |b| {
23+
b.iter(|| {
24+
let _ = enc.encode(0, 0, &mut buf);
25+
})
26+
});
27+
}
28+
29+
criterion_group!(benches, criterion_benchmark);
30+
criterion_main!(benches);

crates/ironrdp-server/src/encoder/mod.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
pub(crate) mod bitmap;
2-
pub(crate) mod rfx;
1+
#![allow(unreachable_pub)]
2+
3+
pub mod bitmap;
4+
pub mod rfx;
35

46
use std::{cmp, mem};
57

0 commit comments

Comments
 (0)