Make writing rendered images to disk optional, and disable for bench (#214)

This commit is contained in:
Max Ammann 2022-12-11 21:50:27 +01:00 committed by GitHub
parent 9496ef0e71
commit 5b084f033e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 26 additions and 11 deletions

View File

@ -12,7 +12,7 @@ fn headless_render(c: &mut Criterion) {
let (mut map, tile) = run_multithreaded(async {
let (kernel, renderer) = create_headless_renderer(1000, None).await;
let style = Style::default();
let map = HeadlessMap::new(style, renderer, kernel).unwrap();
let map = HeadlessMap::new(style, renderer, kernel, false).unwrap();
let tile = map
.fetch_tile(

View File

@ -17,7 +17,7 @@ pub async fn run_headless(tile_size: u32, min: LatLon, max: LatLon) {
.map(|layer| layer.source_layer.as_ref().unwrap().clone())
.collect::<Vec<_>>();
let mut map = HeadlessMap::new(style, renderer, kernel).unwrap();
let mut map = HeadlessMap::new(style, renderer, kernel, true).unwrap();
let tile_limits = google_mercator().tile_limits(
extent_wgs84_to_merc(&Extent {

View File

@ -36,6 +36,7 @@ impl HeadlessMap {
style: Style,
renderer: Renderer,
kernel: Kernel<HeadlessEnvironment>,
write_to_disk: bool,
) -> Result<Self, Error> {
let window_size = renderer.state().surface().size();
@ -59,7 +60,7 @@ impl HeadlessMap {
register_default_render_stages(graph, &mut schedule);
schedule.add_stage(
RenderStageLabel::Cleanup,
WriteSurfaceBufferStage::default(),
WriteSurfaceBufferStage::new(write_to_disk),
);
Ok(Self {

View File

@ -13,9 +13,18 @@ use crate::{
/// Stage which writes the current contents of the GPU/CPU buffer in [`BufferedTextureHead`]
/// to disk as PNG.
#[derive(Default)]
pub struct WriteSurfaceBufferStage {
frame: u64,
write_to_disk: bool,
}
impl WriteSurfaceBufferStage {
pub fn new(write_to_disk: bool) -> Self {
Self {
frame: 0,
write_to_disk,
}
}
}
impl Stage for WriteSurfaceBufferStage {
@ -35,13 +44,18 @@ impl Stage for WriteSurfaceBufferStage {
let device = device.clone();
let current_frame = self.frame;
task::block_in_place(|| {
Handle::current().block_on(async {
buffered_texture
.create_png(&device, format!("frame_{}.png", current_frame).as_str())
.await;
})
});
if self.write_to_disk {
task::block_in_place(|| {
Handle::current().block_on(async {
buffered_texture
.create_png(
&device,
format!("frame_{}.png", current_frame).as_str(),
)
.await;
})
});
}
self.frame += 1;
}