From 6c890c3995bac2131c427f140028a0b3b4e4bd74 Mon Sep 17 00:00:00 2001 From: Wez Furlong Date: Mon, 13 May 2024 09:29:54 -0700 Subject: [PATCH] update metrics to latest version (0.22) --- Cargo.lock | 16 ++-------- codec/Cargo.toml | 2 +- codec/src/lib.rs | 32 +++++++++---------- lfucache/Cargo.toml | 2 +- lfucache/src/lib.rs | 4 +-- mux/Cargo.toml | 2 +- mux/src/lib.rs | 9 ++---- wezterm-client/Cargo.toml | 2 +- wezterm-client/src/client.rs | 8 ++--- wezterm-font/Cargo.toml | 2 +- wezterm-font/src/parser.rs | 2 +- wezterm-font/src/shaper/harfbuzz.rs | 2 +- wezterm-gui/Cargo.toml | 2 +- wezterm-gui/src/glyphcache.rs | 4 +-- wezterm-gui/src/quad.rs | 2 +- wezterm-gui/src/stats.rs | 11 +++---- wezterm-gui/src/termwindow/mod.rs | 2 +- wezterm-gui/src/termwindow/render/mod.rs | 2 +- wezterm-gui/src/termwindow/render/paint.rs | 6 ++-- wezterm-gui/src/termwindow/render/pane.rs | 2 +- .../src/termwindow/render/screen_line.rs | 2 +- window/Cargo.toml | 2 +- window/src/bitmaps/atlas.rs | 6 ++-- window/src/spawn.rs | 4 +-- 24 files changed, 56 insertions(+), 72 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1161ee447..f68506a45 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3284,26 +3284,14 @@ dependencies = [ [[package]] name = "metrics" -version = "0.21.1" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fde3af1a009ed76a778cb84fdef9e7dbbdf5775ae3e4cc1f434a6a307f6f76c5" +checksum = "2be3cbd384d4e955b231c895ce10685e3d8260c5ccffae898c96c723b0772835" dependencies = [ "ahash", - "metrics-macros", "portable-atomic", ] -[[package]] -name = "metrics-macros" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b4faf00617defe497754acde3024865bc143d44a86799b24e191ecff91354f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.63", -] - [[package]] name = "mime" version = "0.3.17" diff --git a/codec/Cargo.toml b/codec/Cargo.toml index 9347bb5c3..326ade547 100644 --- a/codec/Cargo.toml +++ b/codec/Cargo.toml @@ -12,7 +12,7 @@ anyhow = "1.0" config = { path = "../config" } leb128 = "0.2" log = "0.4" -metrics = "0.21" +metrics = "0.22" mux = { path = "../mux" } portable-pty = { path = "../pty", features = ["serde_support"]} rangeset = { path = "../rangeset" } diff --git a/codec/src/lib.rs b/codec/src/lib.rs index 164b033e1..1f200d877 100644 --- a/codec/src/lib.rs +++ b/codec/src/lib.rs @@ -81,9 +81,9 @@ fn encode_raw_as_vec( buffer.extend_from_slice(data); if is_compressed { - metrics::histogram!("pdu.encode.compressed.size", buffer.len() as f64); + metrics::histogram!("pdu.encode.compressed.size").record(buffer.len() as f64); } else { - metrics::histogram!("pdu.encode.size", buffer.len() as f64); + metrics::histogram!("pdu.encode.size").record(buffer.len() as f64); } Ok(buffer) @@ -211,9 +211,9 @@ async fn decode_raw_async( }; if is_compressed { - metrics::histogram!("pdu.decode.compressed.size", data_len as f64); + metrics::histogram!("pdu.decode.compressed.size").record(data_len as f64); } else { - metrics::histogram!("pdu.decode.size", data_len as f64); + metrics::histogram!("pdu.decode.size").record(data_len as f64); } let mut data = vec![0u8; data_len]; @@ -259,9 +259,9 @@ fn decode_raw(mut r: R) -> anyhow::Result { }; if is_compressed { - metrics::histogram!("pdu.decode.compressed.size", data_len as f64); + metrics::histogram!("pdu.decode.compressed.size").record(data_len as f64); } else { - metrics::histogram!("pdu.decode.size", data_len as f64); + metrics::histogram!("pdu.decode.size").record(data_len as f64); } let mut data = vec![0u8; data_len]; @@ -350,8 +350,8 @@ macro_rules! pdu { let (data, is_compressed) = serialize(s)?; let encoded_size = encode_raw($vers, serial, &data, is_compressed, w)?; log::debug!("encode {} size={encoded_size}", stringify!($name)); - metrics::histogram!("pdu.size", encoded_size as f64, "pdu" => stringify!($name)); - metrics::histogram!("pdu.size.rate", encoded_size as f64, "pdu" => stringify!($name)); + metrics::histogram!("pdu.size", "pdu" => stringify!($name)).record(encoded_size as f64); + metrics::histogram!("pdu.size.rate", "pdu" => stringify!($name)).record(encoded_size as f64); Ok(()) } ,)* @@ -366,8 +366,8 @@ macro_rules! pdu { let (data, is_compressed) = serialize(s)?; let encoded_size = encode_raw_async($vers, serial, &data, is_compressed, w).await?; log::debug!("encode_async {} size={encoded_size}", stringify!($name)); - metrics::histogram!("pdu.size", encoded_size as f64, "pdu" => stringify!($name)); - metrics::histogram!("pdu.size.rate", encoded_size as f64, "pdu" => stringify!($name)); + metrics::histogram!("pdu.size", "pdu" => stringify!($name)).record(encoded_size as f64); + metrics::histogram!("pdu.size.rate", "pdu" => stringify!($name)).record(encoded_size as f64); Ok(()) } ,)* @@ -390,8 +390,8 @@ macro_rules! pdu { match decoded.ident { $( $vers => { - metrics::histogram!("pdu.size", decoded.data.len() as f64, "pdu" => stringify!($name)); - metrics::histogram!("pdu.size.rate", decoded.data.len() as f64, "pdu" => stringify!($name)); + metrics::histogram!("pdu.size", "pdu" => stringify!($name)).record(decoded.data.len() as f64); + metrics::histogram!("pdu.size.rate", "pdu" => stringify!($name)).record(decoded.data.len() as f64); Ok(DecodedPdu { serial: decoded.serial, pdu: Pdu::$name(deserialize(decoded.data.as_slice(), decoded.is_compressed)?) @@ -399,8 +399,8 @@ macro_rules! pdu { } ,)* _ => { - metrics::histogram!("pdu.size", decoded.data.len() as f64, "pdu" => "??"); - metrics::histogram!("pdu.size.rate", decoded.data.len() as f64, "pdu" => "??"); + metrics::histogram!("pdu.size", "pdu" => "??").record(decoded.data.len() as f64); + metrics::histogram!("pdu.size.rate", "pdu" => "??").record(decoded.data.len() as f64); Ok(DecodedPdu { serial: decoded.serial, pdu: Pdu::Invalid{ident:decoded.ident} @@ -418,7 +418,7 @@ macro_rules! pdu { match decoded.ident { $( $vers => { - metrics::histogram!("pdu.size", decoded.data.len() as f64, "pdu" => stringify!($name)); + metrics::histogram!("pdu.size", "pdu" => stringify!($name)).record(decoded.data.len() as f64); Ok(DecodedPdu { serial: decoded.serial, pdu: Pdu::$name(deserialize(decoded.data.as_slice(), decoded.is_compressed)?) @@ -426,7 +426,7 @@ macro_rules! pdu { } ,)* _ => { - metrics::histogram!("pdu.size", decoded.data.len() as f64, "pdu" => "??"); + metrics::histogram!("pdu.size", "pdu" => "??").record(decoded.data.len() as f64); Ok(DecodedPdu { serial: decoded.serial, pdu: Pdu::Invalid{ident:decoded.ident} diff --git a/lfucache/Cargo.toml b/lfucache/Cargo.toml index 6aebc2350..95bd4bf2a 100644 --- a/lfucache/Cargo.toml +++ b/lfucache/Cargo.toml @@ -11,7 +11,7 @@ ahash = "0.8" config = { path = "../config" } fnv = "1.0" intrusive-collections = "0.9" -metrics = "0.21" +metrics = "0.22" [dev-dependencies] k9 = "0.12" diff --git a/lfucache/src/lib.rs b/lfucache/src/lib.rs index 325de1925..c2b32d794 100644 --- a/lfucache/src/lib.rs +++ b/lfucache/src/lib.rs @@ -242,7 +242,7 @@ impl LfuCache LfuCache, dead: &Arc, actions: V match pane.upgrade() { Some(pane) => { pane.perform_actions(actions); - histogram!( - "send_actions_to_mux.perform_actions.latency", - start.elapsed() - ); + histogram!("send_actions_to_mux.perform_actions.latency").record(start.elapsed()); Mux::notify_from_any_thread(MuxNotification::PaneOutput(pane.pane_id())); } None => { @@ -135,7 +132,7 @@ fn send_actions_to_mux(pane: &Weak, dead: &Arc, actions: V dead.store(true, Ordering::Relaxed); } } - histogram!("send_actions_to_mux.rate", 1.); + histogram!("send_actions_to_mux.rate").record(1.); } fn parse_buffered_data(pane: Weak, dead: &Arc, mut rx: FileDescriptor) { @@ -323,7 +320,7 @@ fn read_from_pane_pty( break; } Ok(size) => { - histogram!("read_from_pane_pty.bytes.rate", size as f64); + histogram!("read_from_pane_pty.bytes.rate").record(size as f64); log::trace!("read_pty pane {pane_id} read {size} bytes"); if let Err(err) = tx.write_all(&buf[..size]) { error!( diff --git a/wezterm-client/Cargo.toml b/wezterm-client/Cargo.toml index 9ed0f26f2..c32f1de39 100644 --- a/wezterm-client/Cargo.toml +++ b/wezterm-client/Cargo.toml @@ -19,7 +19,7 @@ lazy_static = "1.4" log = "0.4" libc = "0.2" lru = "0.12" -metrics = "0.21" +metrics = "0.22" mux = { path = "../mux" } openssl = "0.10.57" parking_lot = "0.12" diff --git a/wezterm-client/src/client.rs b/wezterm-client/src/client.rs index 7d43934d3..6148450ae 100644 --- a/wezterm-client/src/client.rs +++ b/wezterm-client/src/client.rs @@ -79,8 +79,8 @@ macro_rules! rpc { let start = std::time::Instant::now(); let result = self.send_pdu(Pdu::$request_type(pdu)).await; let elapsed = start.elapsed(); - metrics::histogram!("rpc", elapsed, "method" => stringify!($method_name)); - metrics::counter!("rpc.count", 1, "method" => stringify!($method_name)); + metrics::histogram!("rpc", "method" => stringify!($method_name)).record(elapsed); + metrics::counter!("rpc.count", "method" => stringify!($method_name)).increment(1); match result { Ok(Pdu::$response_type(res)) => Ok(res), Ok(_) => bail!("unexpected response {:?}", result), @@ -98,8 +98,8 @@ macro_rules! rpc { let start = std::time::Instant::now(); let result = self.send_pdu(Pdu::$request_type($request_type{})).await; let elapsed = start.elapsed(); - metrics::histogram!("rpc", elapsed, "method" => stringify!($method_name)); - metrics::counter!("rpc.count", 1, "method" => stringify!($method_name)); + metrics::histogram!("rpc", "method" => stringify!($method_name)).record(elapsed); + metrics::counter!("rpc.count", "method" => stringify!($method_name)).increment(1); match result { Ok(Pdu::$response_type(res)) => Ok(res), Ok(_) => bail!("unexpected response {:?}", result), diff --git a/wezterm-font/Cargo.toml b/wezterm-font/Cargo.toml index 0cd073ece..99ea229b6 100644 --- a/wezterm-font/Cargo.toml +++ b/wezterm-font/Cargo.toml @@ -28,7 +28,7 @@ lazy_static = "1.4" lfucache = { path = "../lfucache" } log = "0.4" memmap2 = "0.2" -metrics = "0.21" +metrics = "0.22" ordered-float = "4.1" rangeset = { path = "../rangeset" } termwiz = { path = "../termwiz" } diff --git a/wezterm-font/src/parser.rs b/wezterm-font/src/parser.rs index 841d33423..1f56224ed 100644 --- a/wezterm-font/src/parser.rs +++ b/wezterm-font/src/parser.rs @@ -545,7 +545,7 @@ impl ParsedFont { let face = lib.face_from_locator(&self.handle)?; *cov = face.compute_coverage(); let elapsed = t.elapsed(); - metrics::histogram!("font.compute.codepoint.coverage", elapsed); + metrics::histogram!("font.compute.codepoint.coverage").record(elapsed); log::debug!( "{} codepoint coverage computed in {:?}", self.names.full_name, diff --git a/wezterm-font/src/shaper/harfbuzz.rs b/wezterm-font/src/shaper/harfbuzz.rs index 9da18d524..fcba466b2 100644 --- a/wezterm-font/src/shaper/harfbuzz.rs +++ b/wezterm-font/src/shaper/harfbuzz.rs @@ -593,7 +593,7 @@ impl FontShaper for HarfbuzzShaper { range, presentation_width, ); - metrics::histogram!("shape.harfbuzz", start.elapsed()); + metrics::histogram!("shape.harfbuzz").record(start.elapsed()); /* if let Ok(glyphs) = &result { for g in glyphs { diff --git a/wezterm-gui/Cargo.toml b/wezterm-gui/Cargo.toml index 6c6b91771..a99f6fe3b 100644 --- a/wezterm-gui/Cargo.toml +++ b/wezterm-gui/Cargo.toml @@ -62,7 +62,7 @@ libc = "0.2" lfucache = { path = "../lfucache" } log = "0.4" luahelper = { path = "../luahelper" } -metrics = "0.21" +metrics = "0.22" mlua = {version="0.9", features=["send"]} mux = { path = "../mux" } mux-lua = { path = "../lua-api-crates/mux" } diff --git a/wezterm-gui/src/glyphcache.rs b/wezterm-gui/src/glyphcache.rs index 2925d5a14..535a0eb27 100644 --- a/wezterm-gui/src/glyphcache.rs +++ b/wezterm-gui/src/glyphcache.rs @@ -634,10 +634,10 @@ impl GlyphCache { }; if let Some(entry) = self.glyph_cache.get(&key as &dyn GlyphKeyTrait) { - metrics::histogram!("glyph_cache.glyph_cache.hit.rate", 1.); + metrics::histogram!("glyph_cache.glyph_cache.hit.rate").record(1.); return Ok(Rc::clone(entry)); } - metrics::histogram!("glyph_cache.glyph_cache.miss.rate", 1.); + metrics::histogram!("glyph_cache.glyph_cache.miss.rate").record(1.); let glyph = match self.load_glyph(info, font, followed_by_space, num_cells) { Ok(g) => g, diff --git a/wezterm-gui/src/quad.rs b/wezterm-gui/src/quad.rs index cbf8196af..3f7621ef6 100644 --- a/wezterm-gui/src/quad.rs +++ b/wezterm-gui/src/quad.rs @@ -329,7 +329,7 @@ impl HeapQuadAllocator { other.extend_with(layer_num, &quad.to_vertices()); } } - metrics::histogram!("quad_buffer_apply", start.elapsed()); + metrics::histogram!("quad_buffer_apply").record(start.elapsed()); Ok(()) } } diff --git a/wezterm-gui/src/stats.rs b/wezterm-gui/src/stats.rs index ee48b9cd1..f518b9dbd 100644 --- a/wezterm-gui/src/stats.rs +++ b/wezterm-gui/src/stats.rs @@ -2,7 +2,7 @@ use config::configuration; use config::lua::get_or_create_sub_module; use config::lua::mlua::Lua; use hdrhistogram::Histogram; -use metrics::{Counter, Gauge, Key, KeyName, Recorder, SharedString, Unit}; +use metrics::{Counter, Gauge, Key, KeyName, Metadata, Recorder, SharedString, Unit}; use parking_lot::Mutex; use std::collections::HashMap; use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering}; @@ -291,8 +291,7 @@ impl Stats { let stats = Self::new(); let inner = Arc::clone(&stats.inner); std::thread::spawn(move || Inner::run(inner)); - let rec = Box::new(stats); - metrics::set_boxed_recorder(rec) + metrics::set_global_recorder(stats) .map_err(|e| anyhow::anyhow!("Failed to set metrics recorder:{}", e)) } } @@ -304,7 +303,7 @@ impl Recorder for Stats { fn describe_histogram(&self, _key: KeyName, _unit: Option, _description: SharedString) {} - fn register_counter(&self, key: &Key) -> Counter { + fn register_counter(&self, key: &Key, _metadata: &Metadata) -> Counter { let mut inner = self.inner.lock(); match inner.counters.get(key) { Some(existing) => Counter::from_arc(existing.clone()), @@ -318,11 +317,11 @@ impl Recorder for Stats { } } - fn register_gauge(&self, _key: &Key) -> Gauge { + fn register_gauge(&self, _key: &Key, _metadata: &Metadata) -> Gauge { Gauge::noop() } - fn register_histogram(&self, key: &Key) -> metrics::Histogram { + fn register_histogram(&self, key: &Key, _metadata: &Metadata) -> metrics::Histogram { let mut inner = self.inner.lock(); if key.name().ends_with(".rate") { match inner.throughput.get(key) { diff --git a/wezterm-gui/src/termwindow/mod.rs b/wezterm-gui/src/termwindow/mod.rs index 0ba025e42..71ece24c2 100644 --- a/wezterm-gui/src/termwindow/mod.rs +++ b/wezterm-gui/src/termwindow/mod.rs @@ -1423,7 +1423,7 @@ impl TermWindow { } fn mux_pane_output_event(&mut self, pane_id: PaneId) { - metrics::histogram!("mux.pane_output_event.rate", 1.); + metrics::histogram!("mux.pane_output_event.rate").record(1.); if self.is_pane_visible(pane_id) { if let Some(ref win) = self.window { win.invalidate(); diff --git a/wezterm-gui/src/termwindow/render/mod.rs b/wezterm-gui/src/termwindow/render/mod.rs index f08137b4c..5e7696d54 100644 --- a/wezterm-gui/src/termwindow/render/mod.rs +++ b/wezterm-gui/src/termwindow/render/mod.rs @@ -788,7 +788,7 @@ impl crate::TermWindow { } } }; - metrics::histogram!("cached_cluster_shape", shape_resolve_start.elapsed()); + metrics::histogram!("cached_cluster_shape").record(shape_resolve_start.elapsed()); log::trace!( "shape_resolve for cluster len {} -> elapsed {:?}", cluster.text.len(), diff --git a/wezterm-gui/src/termwindow/render/paint.rs b/wezterm-gui/src/termwindow/render/paint.rs index a33f8d352..5218d2d77 100644 --- a/wezterm-gui/src/termwindow/render/paint.rs +++ b/wezterm-gui/src/termwindow/render/paint.rs @@ -112,8 +112,8 @@ impl crate::TermWindow { self.last_frame_duration, self.fps ); - metrics::histogram!("gui.paint.impl", self.last_frame_duration); - metrics::histogram!("gui.paint.impl.rate", 1.); + metrics::histogram!("gui.paint.impl").record(self.last_frame_duration); + metrics::histogram!("gui.paint.impl.rate").record(1.); // If self.has_animation is some, then the last render detected // image attachments with multiple frames, so we also need to @@ -181,7 +181,7 @@ impl crate::TermWindow { .context("layer_for_zindex(0)")?; let mut layers = layer.quad_allocator(); log::trace!("quad map elapsed {:?}", start.elapsed()); - metrics::histogram!("quad.map", start.elapsed()); + metrics::histogram!("quad.map").record(start.elapsed()); let mut paint_terminal_background = false; diff --git a/wezterm-gui/src/termwindow/render/pane.rs b/wezterm-gui/src/termwindow/render/pane.rs index a2160fa7a..a7c5f797f 100644 --- a/wezterm-gui/src/termwindow/render/pane.rs +++ b/wezterm-gui/src/termwindow/render/pane.rs @@ -577,7 +577,7 @@ impl crate::TermWindow { // TODO: render a thingy to jump to prior prompt } */ - metrics::histogram!("paint_pane.lines", start.elapsed()); + metrics::histogram!("paint_pane.lines").record(start.elapsed()); log::trace!("lines elapsed {:?}", start.elapsed()); Ok(()) diff --git a/wezterm-gui/src/termwindow/render/screen_line.rs b/wezterm-gui/src/termwindow/render/screen_line.rs index 2f2675a02..4a34b40b4 100644 --- a/wezterm-gui/src/termwindow/render/screen_line.rs +++ b/wezterm-gui/src/termwindow/render/screen_line.rs @@ -712,7 +712,7 @@ impl crate::TermWindow { .context("populate_image_quad")?; } - metrics::histogram!("render_screen_line", start.elapsed()); + metrics::histogram!("render_screen_line").record(start.elapsed()); Ok(RenderScreenLineResult { invalidate_on_hover_change, diff --git a/window/Cargo.toml b/window/Cargo.toml index 1a96033cb..689168772 100644 --- a/window/Cargo.toml +++ b/window/Cargo.toml @@ -34,7 +34,7 @@ lazy_static = "1.4" libloading = "0.6" line_drawing = "0.8" log = "0.4" -metrics = "0.21" +metrics = "0.22" promise = { path = "../promise" } raw-window-handle = "0.5" resize = "0.5" diff --git a/window/src/bitmaps/atlas.rs b/window/src/bitmaps/atlas.rs index 5bc2aaa9d..d8b37066a 100644 --- a/window/src/bitmaps/atlas.rs +++ b/window/src/bitmaps/atlas.rs @@ -107,7 +107,7 @@ impl Atlas { self.texture.write(rect, im); - metrics::histogram!("window.atlas.allocate.success.rate", 1.); + metrics::histogram!("window.atlas.allocate.success.rate").record(1.); Ok(Sprite { texture: Rc::clone(&self.texture), coords: rect, @@ -115,13 +115,13 @@ impl Atlas { } else { // It's not possible to satisfy that request let size = (reserve_width.max(reserve_height) as usize).next_power_of_two(); - metrics::histogram!("window.atlas.allocate.failure.rate", 1.); + metrics::histogram!("window.atlas.allocate.failure.rate").record(1.); Err(OutOfTextureSpace { size: Some((self.side * 2).max(size)), current_size: self.side, }) }; - metrics::histogram!("window.atlas.allocate.latency", start.elapsed()); + metrics::histogram!("window.atlas.allocate.latency").record(start.elapsed()); res } diff --git a/window/src/spawn.rs b/window/src/spawn.rs index 55da54e09..5363ef4b1 100644 --- a/window/src/spawn.rs +++ b/window/src/spawn.rs @@ -68,10 +68,10 @@ impl SpawnQueue { // returned function fn pop_func(&self) -> Option { if let Some(func) = self.spawned_funcs.lock().unwrap().pop_front() { - metrics::histogram!("executor.spawn_delay", func.at.elapsed()); + metrics::histogram!("executor.spawn_delay").record(func.at.elapsed()); Some(func.func) } else if let Some(func) = self.spawned_funcs_low_pri.lock().unwrap().pop_front() { - metrics::histogram!("executor.spawn_delay.low_pri", func.at.elapsed()); + metrics::histogram!("executor.spawn_delay.low_pri").record(func.at.elapsed()); Some(func.func) } else { None