From ce8400bbfd8786003a112633992a3ec2b003859b Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Mon, 9 Aug 2021 18:56:19 +0300 Subject: [PATCH] internal: drop latest requests tracking From the dawn of time, when dinosaurs roamed the and we didn't have hierarchical profiling, there was the `latest_requests` infra we used to track the time of ten last requests. Today, no one is actually using it and, what's more, it itself became pretty useless -- LSP grew way more chatty, and 10 requests don't really paint any kind of picture. Personally, it's been years since I last looked at latest requests in the status output. So, let's remove a tiny bit of state from the big ball of complexity that is `GlobalState` and `main_loop`! --- crates/rust-analyzer/src/global_state.rs | 10 +----- crates/rust-analyzer/src/handlers.rs | 6 ---- crates/rust-analyzer/src/lib.rs | 1 - crates/rust-analyzer/src/request_metrics.rs | 37 --------------------- 4 files changed, 1 insertion(+), 53 deletions(-) delete mode 100644 crates/rust-analyzer/src/request_metrics.rs diff --git a/crates/rust-analyzer/src/global_state.rs b/crates/rust-analyzer/src/global_state.rs index b21fff7071..a7ebbcd28b 100644 --- a/crates/rust-analyzer/src/global_state.rs +++ b/crates/rust-analyzer/src/global_state.rs @@ -27,7 +27,6 @@ use crate::{ mem_docs::MemDocs, op_queue::OpQueue, reload::SourceRootConfig, - request_metrics::{LatestRequests, RequestMetrics}, thread_pool::TaskPool, to_proto::url_from_abs_path, Result, @@ -105,8 +104,6 @@ pub(crate) struct GlobalState { OpQueue<(Arc>, Vec>)>, pub(crate) prime_caches_queue: OpQueue<()>, - - latest_requests: Arc>, } /// An immutable snapshot of the world's state at a point in time. @@ -114,7 +111,6 @@ pub(crate) struct GlobalStateSnapshot { pub(crate) config: Arc, pub(crate) analysis: Analysis, pub(crate) check_fixes: CheckFixes, - pub(crate) latest_requests: Arc>, mem_docs: MemDocs, pub(crate) semantic_tokens_cache: Arc>>, vfs: Arc)>>, @@ -169,7 +165,6 @@ impl GlobalState { prime_caches_queue: OpQueue::default(), fetch_build_data_queue: OpQueue::default(), - latest_requests: Default::default(), }; // Apply any required database inputs from the config. this.update_configuration(config); @@ -230,7 +225,6 @@ impl GlobalState { workspaces: Arc::clone(&self.workspaces), analysis: self.analysis_host.analysis(), vfs: Arc::clone(&self.vfs), - latest_requests: Arc::clone(&self.latest_requests), check_fixes: Arc::clone(&self.diagnostics.check_fixes), mem_docs: self.mem_docs.clone(), semantic_tokens_cache: Arc::clone(&self.semantic_tokens_cache), @@ -270,9 +264,7 @@ impl GlobalState { pub(crate) fn respond(&mut self, response: lsp_server::Response) { if let Some((method, start)) = self.req_queue.incoming.complete(response.id.clone()) { let duration = start.elapsed(); - log::info!("handled req#{} in {:?}", response.id, duration); - let metrics = RequestMetrics { id: response.id.clone(), method, duration }; - self.latest_requests.write().record(metrics); + log::info!("handled {} - ({}) in {:0.2?}", method, response.id, duration); self.send(response.into()); } } diff --git a/crates/rust-analyzer/src/handlers.rs b/crates/rust-analyzer/src/handlers.rs index c9a25e086a..460271a269 100644 --- a/crates/rust-analyzer/src/handlers.rs +++ b/crates/rust-analyzer/src/handlers.rs @@ -79,12 +79,6 @@ pub(crate) fn handle_analyzer_status( .status(file_id) .unwrap_or_else(|_| "Analysis retrieval was cancelled".to_owned()), ); - format_to!(buf, "\n\nRequests:\n"); - let requests = snap.latest_requests.read(); - for (is_last, r) in requests.iter() { - let mark = if is_last { "*" } else { " " }; - format_to!(buf, "{}{:4} {:<36}{}ms\n", mark, r.id, r.method, r.duration.as_millis()); - } Ok(buf) } diff --git a/crates/rust-analyzer/src/lib.rs b/crates/rust-analyzer/src/lib.rs index a5997d69d9..c8c996f0da 100644 --- a/crates/rust-analyzer/src/lib.rs +++ b/crates/rust-analyzer/src/lib.rs @@ -30,7 +30,6 @@ mod semantic_tokens; mod markdown; mod diagnostics; mod line_index; -mod request_metrics; mod lsp_utils; mod thread_pool; mod mem_docs; diff --git a/crates/rust-analyzer/src/request_metrics.rs b/crates/rust-analyzer/src/request_metrics.rs deleted file mode 100644 index b1019e2d6f..0000000000 --- a/crates/rust-analyzer/src/request_metrics.rs +++ /dev/null @@ -1,37 +0,0 @@ -//! Records stats about requests -use std::time::Duration; - -use lsp_server::RequestId; - -#[derive(Debug)] -pub(crate) struct RequestMetrics { - pub(crate) id: RequestId, - pub(crate) method: String, - pub(crate) duration: Duration, -} - -const N_COMPLETED_REQUESTS: usize = 10; - -#[derive(Debug, Default)] -pub(crate) struct LatestRequests { - // hand-rolling VecDeque here to print things in a nicer way - buf: [Option; N_COMPLETED_REQUESTS], - idx: usize, -} - -impl LatestRequests { - pub(crate) fn record(&mut self, request: RequestMetrics) { - // special case: don't track status request itself - if request.method == "rust-analyzer/analyzerStatus" { - return; - } - let idx = self.idx; - self.buf[idx] = Some(request); - self.idx = (idx + 1) % N_COMPLETED_REQUESTS; - } - - pub(crate) fn iter(&self) -> impl Iterator { - let idx = self.idx; - self.buf.iter().enumerate().filter_map(move |(i, req)| Some((i == idx, req.as_ref()?))) - } -}