From f44c4b61e131284287b24dea6da6324cbe9cb252 Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Tue, 7 Jul 2020 12:10:14 +0200 Subject: Add a command to compute memory usage statistics --- crates/ra_ide_db/src/change.rs | 9 +++++++++ crates/rust-analyzer/src/handlers.rs | 13 ++++++++++++- crates/rust-analyzer/src/lsp_ext.rs | 8 ++++++++ crates/rust-analyzer/src/main_loop.rs | 1 + 4 files changed, 30 insertions(+), 1 deletion(-) (limited to 'crates') diff --git a/crates/ra_ide_db/src/change.rs b/crates/ra_ide_db/src/change.rs index d8da3f949..84c6f40ff 100644 --- a/crates/ra_ide_db/src/change.rs +++ b/crates/ra_ide_db/src/change.rs @@ -164,6 +164,15 @@ impl RootDatabase { hir::db::BodyQuery.in_db(self).sweep(sweep); } + // Feature: Memory Usage + // + // Clears rust-analyzer's internal database and prints memory usage statistics. + // + // |=== + // | Editor | Action Name + // + // | VS Code | **Rust Analyzer: Memory Usage (Clears Database)** + // |=== pub fn per_query_memory_usage(&mut self) -> Vec<(String, Bytes)> { let mut acc: Vec<(String, Bytes)> = vec![]; let sweep = SweepStrategy::default().discard_values().sweep_all_revisions(); diff --git a/crates/rust-analyzer/src/handlers.rs b/crates/rust-analyzer/src/handlers.rs index cc83a1406..f374334fe 100644 --- a/crates/rust-analyzer/src/handlers.rs +++ b/crates/rust-analyzer/src/handlers.rs @@ -32,7 +32,7 @@ use crate::{ cargo_target_spec::CargoTargetSpec, config::RustfmtConfig, from_json, from_proto, - global_state::GlobalStateSnapshot, + global_state::{GlobalState, GlobalStateSnapshot}, lsp_ext::{self, InlayHint, InlayHintsParams}, to_proto, LspError, Result, }; @@ -62,6 +62,17 @@ pub(crate) fn handle_analyzer_status(snap: GlobalStateSnapshot, _: ()) -> Result Ok(buf) } +pub(crate) fn handle_memory_usage(state: &mut GlobalState, _: ()) -> Result { + let _p = profile("handle_memory_usage"); + let mem = state.analysis_host.per_query_memory_usage(); + + let mut out = String::new(); + for (name, bytes) in mem { + format_to!(out, "{:>8} {}\n", bytes, name); + } + Ok(out) +} + pub(crate) fn handle_syntax_tree( snap: GlobalStateSnapshot, params: lsp_ext::SyntaxTreeParams, diff --git a/crates/rust-analyzer/src/lsp_ext.rs b/crates/rust-analyzer/src/lsp_ext.rs index d225ad5ff..ba8a0231f 100644 --- a/crates/rust-analyzer/src/lsp_ext.rs +++ b/crates/rust-analyzer/src/lsp_ext.rs @@ -14,6 +14,14 @@ impl Request for AnalyzerStatus { const METHOD: &'static str = "rust-analyzer/analyzerStatus"; } +pub enum MemoryUsage {} + +impl Request for MemoryUsage { + type Params = (); + type Result = String; + const METHOD: &'static str = "rust-analyzer/memoryUsage"; +} + pub enum ReloadWorkspace {} impl Request for ReloadWorkspace { diff --git a/crates/rust-analyzer/src/main_loop.rs b/crates/rust-analyzer/src/main_loop.rs index cfde55431..5900886e7 100644 --- a/crates/rust-analyzer/src/main_loop.rs +++ b/crates/rust-analyzer/src/main_loop.rs @@ -341,6 +341,7 @@ impl GlobalState { .on_sync::(|s, p| { handlers::handle_matching_brace(s.snapshot(), p) })? + .on_sync::(|s, p| handlers::handle_memory_usage(s, p))? .on::(handlers::handle_analyzer_status)? .on::(handlers::handle_syntax_tree)? .on::(handlers::handle_expand_macro)? -- cgit v1.2.3