diff options
Diffstat (limited to 'crates/ra_ide_api/src/status.rs')
-rw-r--r-- | crates/ra_ide_api/src/status.rs | 44 |
1 files changed, 39 insertions, 5 deletions
diff --git a/crates/ra_ide_api/src/status.rs b/crates/ra_ide_api/src/status.rs index e11eed223..c3e5745d5 100644 --- a/crates/ra_ide_api/src/status.rs +++ b/crates/ra_ide_api/src/status.rs | |||
@@ -15,9 +15,13 @@ use crate::{ | |||
15 | symbol_index::{SymbolIndex, LibrarySymbolsQuery}, | 15 | symbol_index::{SymbolIndex, LibrarySymbolsQuery}, |
16 | }; | 16 | }; |
17 | 17 | ||
18 | pub(crate) fn syntax_tree_stats(db: &RootDatabase) -> SyntaxTreeStats { | ||
19 | db.query(ParseQuery).entries::<SyntaxTreeStats>() | ||
20 | } | ||
21 | |||
18 | pub(crate) fn status(db: &RootDatabase) -> String { | 22 | pub(crate) fn status(db: &RootDatabase) -> String { |
19 | let files_stats = db.query(FileTextQuery).entries::<FilesStats>(); | 23 | let files_stats = db.query(FileTextQuery).entries::<FilesStats>(); |
20 | let syntax_tree_stats = db.query(ParseQuery).entries::<SyntaxTreeStats>(); | 24 | let syntax_tree_stats = syntax_tree_stats(db); |
21 | let symbols_stats = db | 25 | let symbols_stats = db |
22 | .query(LibrarySymbolsQuery) | 26 | .query(LibrarySymbolsQuery) |
23 | .entries::<LibrarySymbolsStats>(); | 27 | .entries::<LibrarySymbolsStats>(); |
@@ -26,8 +30,13 @@ pub(crate) fn status(db: &RootDatabase) -> String { | |||
26 | interner.len() | 30 | interner.len() |
27 | }; | 31 | }; |
28 | format!( | 32 | format!( |
29 | "{}\n{}\n{}\nn_defs {}\n", | 33 | "{}\n{}\n{}\n{} defs\n\nmemory:\n{}\ngc {:?} seconds ago", |
30 | files_stats, symbols_stats, syntax_tree_stats, n_defs | 34 | files_stats, |
35 | symbols_stats, | ||
36 | syntax_tree_stats, | ||
37 | n_defs, | ||
38 | MemoryStats::current(), | ||
39 | db.last_gc.elapsed().as_secs(), | ||
31 | ) | 40 | ) |
32 | } | 41 | } |
33 | 42 | ||
@@ -58,9 +67,9 @@ impl FromIterator<TableEntry<FileId, Arc<String>>> for FilesStats { | |||
58 | } | 67 | } |
59 | 68 | ||
60 | #[derive(Default)] | 69 | #[derive(Default)] |
61 | struct SyntaxTreeStats { | 70 | pub(crate) struct SyntaxTreeStats { |
62 | total: usize, | 71 | total: usize, |
63 | retained: usize, | 72 | pub(crate) retained: usize, |
64 | retained_size: Bytes, | 73 | retained_size: Bytes, |
65 | } | 74 | } |
66 | 75 | ||
@@ -118,6 +127,31 @@ impl FromIterator<TableEntry<SourceRootId, Arc<SymbolIndex>>> for LibrarySymbols | |||
118 | } | 127 | } |
119 | } | 128 | } |
120 | 129 | ||
130 | struct MemoryStats { | ||
131 | allocated: Bytes, | ||
132 | resident: Bytes, | ||
133 | } | ||
134 | |||
135 | impl MemoryStats { | ||
136 | fn current() -> MemoryStats { | ||
137 | jemalloc_ctl::epoch().unwrap(); | ||
138 | MemoryStats { | ||
139 | allocated: Bytes(jemalloc_ctl::stats::allocated().unwrap()), | ||
140 | resident: Bytes(jemalloc_ctl::stats::resident().unwrap()), | ||
141 | } | ||
142 | } | ||
143 | } | ||
144 | |||
145 | impl fmt::Display for MemoryStats { | ||
146 | fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { | ||
147 | write!( | ||
148 | fmt, | ||
149 | "{} allocated {} resident", | ||
150 | self.allocated, self.resident, | ||
151 | ) | ||
152 | } | ||
153 | } | ||
154 | |||
121 | #[derive(Default)] | 155 | #[derive(Default)] |
122 | struct Bytes(usize); | 156 | struct Bytes(usize); |
123 | 157 | ||