aboutsummaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
Diffstat (limited to 'crates')
-rw-r--r--crates/ide/src/lib.rs4
-rw-r--r--crates/ide/src/status.rs5
-rw-r--r--crates/ide_db/src/change.rs15
-rw-r--r--crates/ide_db/src/lib.rs15
-rw-r--r--crates/ide_db/src/wasm_shims.rs19
-rw-r--r--crates/rust-analyzer/src/main_loop.rs19
6 files changed, 13 insertions, 64 deletions
diff --git a/crates/ide/src/lib.rs b/crates/ide/src/lib.rs
index 31f2bcba3..96dae9ee0 100644
--- a/crates/ide/src/lib.rs
+++ b/crates/ide/src/lib.rs
@@ -144,10 +144,6 @@ impl AnalysisHost {
144 self.db.apply_change(change) 144 self.db.apply_change(change)
145 } 145 }
146 146
147 pub fn maybe_collect_garbage(&mut self) {
148 self.db.maybe_collect_garbage();
149 }
150
151 pub fn collect_garbage(&mut self) { 147 pub fn collect_garbage(&mut self) {
152 self.db.collect_garbage(); 148 self.db.collect_garbage();
153 } 149 }
diff --git a/crates/ide/src/status.rs b/crates/ide/src/status.rs
index c23708181..1427c50cf 100644
--- a/crates/ide/src/status.rs
+++ b/crates/ide/src/status.rs
@@ -37,13 +37,12 @@ pub(crate) fn status(db: &RootDatabase) -> String {
37 let macro_syntax_tree_stats = macro_syntax_tree_stats(db); 37 let macro_syntax_tree_stats = macro_syntax_tree_stats(db);
38 let symbols_stats = LibrarySymbolsQuery.in_db(db).entries::<LibrarySymbolsStats>(); 38 let symbols_stats = LibrarySymbolsQuery.in_db(db).entries::<LibrarySymbolsStats>();
39 format!( 39 format!(
40 "{}\n{}\n{}\n{} (macros)\n\n\nmemory:\n{}\ngc {:?} seconds ago", 40 "{}\n{}\n{}\n{} (macros)\n{} total\n",
41 files_stats, 41 files_stats,
42 symbols_stats, 42 symbols_stats,
43 syntax_tree_stats, 43 syntax_tree_stats,
44 macro_syntax_tree_stats, 44 macro_syntax_tree_stats,
45 memory_usage(), 45 memory_usage(),
46 db.last_gc.elapsed().as_secs(),
47 ) 46 )
48} 47}
49 48
@@ -121,7 +120,7 @@ struct LibrarySymbolsStats {
121 120
122impl fmt::Display for LibrarySymbolsStats { 121impl fmt::Display for LibrarySymbolsStats {
123 fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { 122 fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
124 write!(fmt, "{} ({}) symbols", self.total, self.size) 123 write!(fmt, "{} ({}) index symbols", self.total, self.size)
125 } 124 }
126} 125}
127 126
diff --git a/crates/ide_db/src/change.rs b/crates/ide_db/src/change.rs
index 8b4fd7ab8..7f98111c4 100644
--- a/crates/ide_db/src/change.rs
+++ b/crates/ide_db/src/change.rs
@@ -1,7 +1,7 @@
1//! Defines a unit of change that can applied to a state of IDE to get the next 1//! Defines a unit of change that can applied to a state of IDE to get the next
2//! state. Changes are transactional. 2//! state. Changes are transactional.
3 3
4use std::{fmt, sync::Arc, time}; 4use std::{fmt, sync::Arc};
5 5
6use base_db::{ 6use base_db::{
7 salsa::{Database, Durability, SweepStrategy}, 7 salsa::{Database, Durability, SweepStrategy},
@@ -81,8 +81,6 @@ impl fmt::Debug for RootChange {
81 } 81 }
82} 82}
83 83
84const GC_COOLDOWN: time::Duration = time::Duration::from_millis(100);
85
86impl RootDatabase { 84impl RootDatabase {
87 pub fn request_cancellation(&mut self) { 85 pub fn request_cancellation(&mut self) {
88 let _p = profile::span("RootDatabase::request_cancellation"); 86 let _p = profile::span("RootDatabase::request_cancellation");
@@ -126,23 +124,12 @@ impl RootDatabase {
126 } 124 }
127 } 125 }
128 126
129 pub fn maybe_collect_garbage(&mut self) {
130 if cfg!(feature = "wasm") {
131 return;
132 }
133
134 if self.last_gc_check.elapsed() > GC_COOLDOWN {
135 self.last_gc_check = crate::wasm_shims::Instant::now();
136 }
137 }
138
139 pub fn collect_garbage(&mut self) { 127 pub fn collect_garbage(&mut self) {
140 if cfg!(feature = "wasm") { 128 if cfg!(feature = "wasm") {
141 return; 129 return;
142 } 130 }
143 131
144 let _p = profile::span("RootDatabase::collect_garbage"); 132 let _p = profile::span("RootDatabase::collect_garbage");
145 self.last_gc = crate::wasm_shims::Instant::now();
146 133
147 let sweep = SweepStrategy::default().discard_values().sweep_all_revisions(); 134 let sweep = SweepStrategy::default().discard_values().sweep_all_revisions();
148 135
diff --git a/crates/ide_db/src/lib.rs b/crates/ide_db/src/lib.rs
index 70ada02f3..0d209c6ec 100644
--- a/crates/ide_db/src/lib.rs
+++ b/crates/ide_db/src/lib.rs
@@ -10,7 +10,6 @@ pub mod defs;
10pub mod search; 10pub mod search;
11pub mod imports_locator; 11pub mod imports_locator;
12pub mod source_change; 12pub mod source_change;
13mod wasm_shims;
14 13
15use std::{fmt, sync::Arc}; 14use std::{fmt, sync::Arc};
16 15
@@ -36,8 +35,6 @@ use crate::{line_index::LineIndex, symbol_index::SymbolsDatabase};
36)] 35)]
37pub struct RootDatabase { 36pub struct RootDatabase {
38 storage: salsa::Storage<RootDatabase>, 37 storage: salsa::Storage<RootDatabase>,
39 pub last_gc: crate::wasm_shims::Instant,
40 pub last_gc_check: crate::wasm_shims::Instant,
41} 38}
42 39
43impl fmt::Debug for RootDatabase { 40impl fmt::Debug for RootDatabase {
@@ -99,11 +96,7 @@ impl Default for RootDatabase {
99 96
100impl RootDatabase { 97impl RootDatabase {
101 pub fn new(lru_capacity: Option<usize>) -> RootDatabase { 98 pub fn new(lru_capacity: Option<usize>) -> RootDatabase {
102 let mut db = RootDatabase { 99 let mut db = RootDatabase { storage: salsa::Storage::default() };
103 storage: salsa::Storage::default(),
104 last_gc: crate::wasm_shims::Instant::now(),
105 last_gc_check: crate::wasm_shims::Instant::now(),
106 };
107 db.set_crate_graph_with_durability(Default::default(), Durability::HIGH); 100 db.set_crate_graph_with_durability(Default::default(), Durability::HIGH);
108 db.set_local_roots_with_durability(Default::default(), Durability::HIGH); 101 db.set_local_roots_with_durability(Default::default(), Durability::HIGH);
109 db.set_library_roots_with_durability(Default::default(), Durability::HIGH); 102 db.set_library_roots_with_durability(Default::default(), Durability::HIGH);
@@ -121,11 +114,7 @@ impl RootDatabase {
121 114
122impl salsa::ParallelDatabase for RootDatabase { 115impl salsa::ParallelDatabase for RootDatabase {
123 fn snapshot(&self) -> salsa::Snapshot<RootDatabase> { 116 fn snapshot(&self) -> salsa::Snapshot<RootDatabase> {
124 salsa::Snapshot::new(RootDatabase { 117 salsa::Snapshot::new(RootDatabase { storage: self.storage.snapshot() })
125 storage: self.storage.snapshot(),
126 last_gc: self.last_gc,
127 last_gc_check: self.last_gc_check,
128 })
129 } 118 }
130} 119}
131 120
diff --git a/crates/ide_db/src/wasm_shims.rs b/crates/ide_db/src/wasm_shims.rs
deleted file mode 100644
index 7af9f9d9b..000000000
--- a/crates/ide_db/src/wasm_shims.rs
+++ /dev/null
@@ -1,19 +0,0 @@
1//! A version of `std::time::Instant` that doesn't panic in WASM.
2
3#[cfg(not(feature = "wasm"))]
4pub use std::time::Instant;
5
6#[cfg(feature = "wasm")]
7#[derive(Clone, Copy, Debug)]
8pub struct Instant;
9
10#[cfg(feature = "wasm")]
11impl Instant {
12 pub fn now() -> Self {
13 Self
14 }
15
16 pub fn elapsed(&self) -> std::time::Duration {
17 std::time::Duration::new(0, 0)
18 }
19}
diff --git a/crates/rust-analyzer/src/main_loop.rs b/crates/rust-analyzer/src/main_loop.rs
index 06ab9d508..c2d0ac791 100644
--- a/crates/rust-analyzer/src/main_loop.rs
+++ b/crates/rust-analyzer/src/main_loop.rs
@@ -189,19 +189,16 @@ impl GlobalState {
189 } 189 }
190 lsp_server::Message::Response(resp) => self.complete_request(resp), 190 lsp_server::Message::Response(resp) => self.complete_request(resp),
191 }, 191 },
192 Event::Task(task) => { 192 Event::Task(task) => match task {
193 match task { 193 Task::Response(response) => self.respond(response),
194 Task::Response(response) => self.respond(response), 194 Task::Diagnostics(diagnostics_per_file) => {
195 Task::Diagnostics(diagnostics_per_file) => { 195 for (file_id, diagnostics) in diagnostics_per_file {
196 for (file_id, diagnostics) in diagnostics_per_file { 196 self.diagnostics.set_native_diagnostics(file_id, diagnostics)
197 self.diagnostics.set_native_diagnostics(file_id, diagnostics)
198 }
199 } 197 }
200 Task::Workspaces(workspaces) => self.switch_workspaces(workspaces),
201 Task::Unit => (),
202 } 198 }
203 self.analysis_host.maybe_collect_garbage(); 199 Task::Workspaces(workspaces) => self.switch_workspaces(workspaces),
204 } 200 Task::Unit => (),
201 },
205 Event::Vfs(mut task) => { 202 Event::Vfs(mut task) => {
206 let _p = profile::span("GlobalState::handle_event/vfs"); 203 let _p = profile::span("GlobalState::handle_event/vfs");
207 loop { 204 loop {