From ab8a795b41a1e5d25bc9cbd48e85d86624b40fe3 Mon Sep 17 00:00:00 2001 From: Aidan Montare Date: Tue, 3 Jun 2025 11:50:28 -0600 Subject: [PATCH] log highlight time as total time spent on syntax_highlighter.advance ...instead of time taken to create the Highlighter. This still outputs INFO messages at each cursor move, which seems excessive. Would it make sense to only output when a file is first opened? --- helix-core/src/syntax.rs | 5 +---- helix-term/src/ui/document.rs | 6 ++++++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/helix-core/src/syntax.rs b/helix-core/src/syntax.rs index 5415e52c4..ccfb00808 100644 --- a/helix-core/src/syntax.rs +++ b/helix-core/src/syntax.rs @@ -500,10 +500,7 @@ impl Syntax { loader: &'a Loader, range: impl RangeBounds, ) -> Highlighter<'a> { - let highlight_time = Instant::now(); - let ret = Highlighter::new(&self.inner, source, loader, range); - log::info!("tree-sitter: creating highlighter took: {} us", highlight_time.elapsed().as_micros()); - ret + Highlighter::new(&self.inner, source, loader, range) } pub fn query_iter<'a, QueryLoader, LayerState, Range>( diff --git a/helix-term/src/ui/document.rs b/helix-term/src/ui/document.rs index 524d829c4..38ad7ebb9 100644 --- a/helix-term/src/ui/document.rs +++ b/helix-term/src/ui/document.rs @@ -1,4 +1,5 @@ use std::cmp::min; +use std::time::{Duration, Instant}; use helix_core::doc_formatter::{DocumentFormatter, GraphemeSource, TextFormat}; use helix_core::graphemes::Grapheme; @@ -90,6 +91,7 @@ pub fn render_text( let mut is_in_indent_area = true; let mut last_line_indent_level = 0; let mut reached_view_top = false; + let mut total_highlight_time = Duration::new(0, 0); loop { let Some(mut grapheme) = formatter.next() else { @@ -132,9 +134,11 @@ pub fn render_text( } // acquire the correct grapheme style + let highlight_time = Instant::now(); while grapheme.char_idx >= syntax_highlighter.pos { syntax_highlighter.advance(); } + total_highlight_time += highlight_time.elapsed(); while grapheme.char_idx >= overlay_highlighter.pos { overlay_highlighter.advance(); } @@ -168,6 +172,8 @@ pub fn render_text( last_line_end = grapheme.visual_pos.col + grapheme_width; } + log::info!("tree-sitter highlight time: {} us", total_highlight_time.as_micros()); + renderer.draw_indent_guides(last_line_indent_level, last_line_pos.visual_line); decorations.render_virtual_lines(renderer, last_line_pos, last_line_end) }