From a64553bbaf9e058f02d278dfa7104ea96fc58dd8 Mon Sep 17 00:00:00 2001 From: Greg Depoire--Ferrer <56923875+greg904@users.noreply.github.com> Date: Wed, 16 Feb 2022 20:57:46 +0000 Subject: [PATCH] Reuse Rasterizer in Display::new Instead of creating a `Rasterizer` to guess the window dimensions, dropping it and then creating a new one for the glyph cache, reuse the same `Rasterizer`. This prevents the font from being loaded twice during startup. --- alacritty/src/display/mod.rs | 9 +++++---- alacritty/src/renderer/mod.rs | 8 +++++--- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/alacritty/src/display/mod.rs b/alacritty/src/display/mod.rs index ef4cfc10..c58ded5d 100644 --- a/alacritty/src/display/mod.rs +++ b/alacritty/src/display/mod.rs @@ -232,7 +232,8 @@ impl Display { }; // Guess the target window dimensions. - let metrics = GlyphCache::static_metrics(config.font.clone(), estimated_dpr)?; + let mut rasterizer = Rasterizer::new(estimated_dpr as f32, config.font.use_thin_strokes)?; + let metrics = GlyphCache::static_metrics(&mut rasterizer, config.font.clone())?; let (cell_width, cell_height) = compute_cell_size(config, &metrics); // Guess the target window size if the user has specified the number of lines/columns. @@ -256,12 +257,13 @@ impl Display { )?; info!("Device pixel ratio: {}", window.dpr); + rasterizer.update_dpr(window.dpr as f32); // Create renderer. let mut renderer = QuadRenderer::new()?; let (glyph_cache, cell_width, cell_height) = - Self::new_glyph_cache(window.dpr, &mut renderer, config)?; + Self::new_glyph_cache(rasterizer, &mut renderer, config)?; if let Some(dimensions) = dimensions { if (estimated_dpr - window.dpr).abs() < f64::EPSILON { @@ -361,12 +363,11 @@ impl Display { } fn new_glyph_cache( - dpr: f64, + rasterizer: Rasterizer, renderer: &mut QuadRenderer, config: &UiConfig, ) -> Result<(GlyphCache, f32, f32), Error> { let font = config.font.clone(); - let rasterizer = Rasterizer::new(dpr as f32, config.font.use_thin_strokes)?; // Initialize glyph cache. let glyph_cache = { diff --git a/alacritty/src/renderer/mod.rs b/alacritty/src/renderer/mod.rs index ad59a4e1..e7878b6d 100644 --- a/alacritty/src/renderer/mod.rs +++ b/alacritty/src/renderer/mod.rs @@ -404,10 +404,12 @@ impl GlyphCache { } /// Calculate font metrics without access to a glyph cache. - pub fn static_metrics(font: Font, dpr: f64) -> Result { - let mut rasterizer = crossfont::Rasterizer::new(dpr as f32, font.use_thin_strokes)?; + pub fn static_metrics( + rasterizer: &mut crossfont::Rasterizer, + font: Font, + ) -> Result { let regular_desc = GlyphCache::make_desc(font.normal(), Slant::Normal, Weight::Normal); - let regular = Self::load_regular_font(&mut rasterizer, ®ular_desc, font.size())?; + let regular = Self::load_regular_font(rasterizer, ®ular_desc, font.size())?; rasterizer.get_glyph(GlyphKey { font_key: regular, character: 'm', size: font.size() })?; rasterizer.metrics(regular, font.size())