Add tracy profiling under a feature

This commit is contained in:
Ivan Molodetskikh 2023-08-10 14:12:20 +04:00
parent 18b9d0dfcc
commit 0ed5bad452
8 changed files with 87 additions and 0 deletions

64
Cargo.lock generated
View File

@ -482,6 +482,19 @@ dependencies = [
"libc",
]
[[package]]
name = "generator"
version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e"
dependencies = [
"cc",
"libc",
"log",
"rustversion",
"windows",
]
[[package]]
name = "getrandom"
version = "0.2.10"
@ -704,6 +717,19 @@ version = "0.4.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
[[package]]
name = "loom"
version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5"
dependencies = [
"cfg-if",
"generator",
"scoped-tls",
"tracing",
"tracing-subscriber",
]
[[package]]
name = "matchers"
version = "0.1.0"
@ -818,10 +844,12 @@ dependencies = [
"anyhow",
"bitflags 2.3.3",
"clap",
"profiling",
"smithay",
"smithay-drm-extras",
"tracing",
"tracing-subscriber",
"tracy-client",
]
[[package]]
@ -1046,6 +1074,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "46b2164ebdb1dfeec5e337be164292351e11daf63a05174c6776b2f47460f0c9"
dependencies = [
"profiling-procmacros",
"tracy-client",
]
[[package]]
@ -1184,6 +1213,12 @@ dependencies = [
"windows-sys 0.48.0",
]
[[package]]
name = "rustversion"
version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
[[package]]
name = "scan_fmt"
version = "0.2.6"
@ -1452,6 +1487,26 @@ dependencies = [
"tracing-log",
]
[[package]]
name = "tracy-client"
version = "0.15.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "434ecabbda9f67eeea1eab44d52f4a20538afa3e2c2770f2efc161142b25b608"
dependencies = [
"loom",
"once_cell",
"tracy-client-sys",
]
[[package]]
name = "tracy-client-sys"
version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d99f5fc382239d08b6bf05bb6206a585bfdb988c878f2499081d0f285ef7819"
dependencies = [
"cc",
]
[[package]]
name = "udev"
version = "0.7.0"
@ -1759,6 +1814,15 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "windows"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
dependencies = [
"windows-targets 0.48.1",
]
[[package]]
name = "windows-sys"
version = "0.45.0"

View File

@ -10,9 +10,11 @@ edition = "2021"
anyhow = { version = "1.0.72", features = ["backtrace"] }
bitflags = "2.3.3"
clap = { version = "4.3.21", features = ["derive"] }
profiling = "1.0.9"
smithay-drm-extras = { version = "0.1.0", path = "../smithay/smithay-drm-extras" }
tracing = "0.1.37"
tracing-subscriber = { version = "0.3.17", features = ["env-filter"] }
tracy-client = { version = "0.15.2", default-features = false }
[dependencies.smithay]
git = "https://github.com/Smithay/smithay"
@ -31,3 +33,7 @@ features = [
"use_system_lib",
"wayland_frontend",
]
[features]
profile-with-tracy = ["profiling/profile-with-tracy", "tracy-client/default"]

View File

@ -24,6 +24,10 @@ impl CompositorHandler for Niri {
}
fn commit(&mut self, surface: &WlSurface) {
tracy_client::Client::running()
.unwrap()
.message("client commit", 0);
on_commit_buffer_handler::<Self>(surface);
if !is_sync_subsurface(surface) {
let mut root = surface.clone();

View File

@ -20,6 +20,7 @@ impl Niri {
change_vt: &mut dyn FnMut(i32),
event: InputEvent<I>,
) {
let _span = tracy_client::span!("process_input_event");
trace!("process_input_event");
match event {

View File

@ -52,6 +52,8 @@ fn main() {
let cli = Cli::parse();
let _client = tracy_client::Client::start();
let mut event_loop = EventLoop::try_new().unwrap();
let has_display = env::var_os("WAYLAND_DISPLAY").is_some() || env::var_os("DISPLAY").is_some();
@ -103,6 +105,7 @@ fn main() {
event_loop
.run(None, &mut data, move |data| {
// niri is running.
let _span = tracy_client::span!("flush_clients");
data.display.flush_clients().unwrap();
})
.unwrap();

View File

@ -163,6 +163,8 @@ impl Niri {
}
fn redraw(&mut self, backend: &mut dyn Backend) {
let _span = tracy_client::span!("redraw");
assert!(self.redraw_queued);
assert!(!self.waiting_for_vblank);
self.redraw_queued = false;

View File

@ -69,6 +69,8 @@ impl Backend for Tty {
WaylandSurfaceRenderElement<GlesRenderer>,
>],
) {
let _span = tracy_client::span!("Tty::render");
let output_device = self.output_device.as_mut().unwrap();
let drm_compositor = &mut output_device.drm_compositor;
@ -223,6 +225,9 @@ impl Tty {
let tty = data.tty.as_mut().unwrap();
match event {
DrmEvent::VBlank(_crtc) => {
tracy_client::Client::running()
.unwrap()
.message("vblank", 0);
info!("vblank {metadata:?}");
let output_device = tty.output_device.as_mut().unwrap();

View File

@ -37,6 +37,8 @@ impl Backend for Winit {
WaylandSurfaceRenderElement<GlesRenderer>,
>],
) {
let _span = tracy_client::span!("Winit::render");
let size = self.backend.window_size().physical_size;
let damage = Rectangle::from_loc_and_size((0, 0), size);