blob: 109c4a6cc87c48dbb3ed593536a0de13038a0ec0 [file] [log] [blame]
// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use anyhow::{format_err, Result};
use display_utils::{Coordinator, DisplayId, PixelFormat};
mod bouncing_squares;
mod display_color_layer;
mod frame_rate_test;
mod static_config_vsync_loop;
use crate::rgb::Rgb888;
pub fn show_display_info(
coordinator: &Coordinator,
id: Option<DisplayId>,
fidl: bool,
) -> Result<()> {
let displays = coordinator.displays();
println!("{} display(s) available", displays.len());
for display in displays.iter().filter(|&info| id.map_or(true, |id| id == info.0.id.into())) {
if fidl {
println!("{:#?}", display.0);
} else {
println!("{}", display);
}
}
Ok(())
}
pub async fn vsync(
coordinator: &Coordinator,
id: Option<DisplayId>,
color: Rgb888,
pixel_format: PixelFormat,
) -> Result<()> {
let displays = coordinator.displays();
if displays.is_empty() {
return Err(format_err!("no displays found"));
}
let display = match id {
// Pick the first available display if no ID was specified.
None => &displays[0],
Some(id) => displays
.iter()
.find(|d| d.id() == id)
.ok_or_else(|| format_err!("display with id '{:?}' not found", id))?,
};
static_config_vsync_loop::run(
coordinator,
static_config_vsync_loop::Args { display, color, pixel_format },
)
.await
}
pub async fn color(
coordinator: &Coordinator,
id: Option<DisplayId>,
color: Rgb888,
pixel_format: PixelFormat,
) -> Result<()> {
let displays = coordinator.displays();
if displays.is_empty() {
return Err(format_err!("no displays found"));
}
let display = match id {
// Pick the first available display if no ID was specified.
None => &displays[0],
Some(id) => displays
.iter()
.find(|d| d.id() == id)
.ok_or_else(|| format_err!("display with id '{:?}' not found", id))?,
};
display_color_layer::run(
coordinator,
display_color_layer::Args { display, color, pixel_format },
)
.await
}
pub async fn squares(coordinator: &Coordinator, id: Option<DisplayId>) -> Result<()> {
let displays = coordinator.displays();
if displays.is_empty() {
return Err(format_err!("no displays found"));
}
let display = match id {
// Pick the first available display if no ID was specified.
None => &displays[0],
Some(id) => displays
.iter()
.find(|d| d.id() == id)
.ok_or_else(|| format_err!("display with id '{:?}' not found", id))?,
};
bouncing_squares::run(coordinator, display).await
}
pub async fn frame_rate_test(
coordinator: &Coordinator,
id: Option<DisplayId>,
grid_width: Option<u32>,
grid_height: Option<u32>,
) -> Result<()> {
let displays = coordinator.displays();
if displays.is_empty() {
return Err(format_err!("no displays found"));
}
let display = match id {
// Pick the first available display if no ID was specified.
None => &displays[0],
Some(id) => displays
.iter()
.find(|d| d.id() == id)
.ok_or_else(|| format_err!("display with id '{:?}' not found", id))?,
};
frame_rate_test::run(coordinator, display, grid_width, grid_height).await
}