aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_tt/src/buffer.rs
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2020-05-17 00:06:23 +0100
committerGitHub <[email protected]>2020-05-17 00:06:23 +0100
commit1afdc579297f68dadbe8ee580040ec6ca95cc58b (patch)
tree478b8f648fed106b71ea455410be08707dfac4f2 /crates/ra_tt/src/buffer.rs
parent8944a9b35a71c58d2ed903fb2b29dfeeb10d29cd (diff)
parent1e9172d70cf714dc006c1cbc4a029ae6e848d35b (diff)
Merge #4489
4489: Memory allocation optimization r=matklad a=simonvandel I did some profiling using DHAT, and this was what I could easily optimize without much knowledge of the codebase. This speeds up analysis-stats on rust-analyser by ~4% on my local machine. **Benchmark** ➜ rust-analyzer-base git:(master) hyperfine --min-runs=2 '/home/simon/Documents/rust-analyzer/target/release/rust-analyzer analysis-stats .' '/home/simon/Documents/rust-analyzer-base/target/release/rust-analyzer analysis-stats .' Benchmark #1: /home/simon/Documents/rust-analyzer/target/release/rust-analyzer analysis-stats . Time (mean ± σ): 49.621 s ± 0.317 s [User: 48.725 s, System: 0.792 s] Range (min … max): 49.397 s … 49.846 s 2 runs Benchmark #2: /home/simon/Documents/rust-analyzer-base/target/release/rust-analyzer analysis-stats . Time (mean ± σ): 51.764 s ± 0.045 s [User: 50.882 s, System: 0.756 s] Range (min … max): 51.733 s … 51.796 s 2 runs Summary '/home/simon/Documents/rust-analyzer/target/release/rust-analyzer analysis-stats .' ran 1.04 ± 0.01 times faster than '/home/simon/Documents/rust-analyzer-base/target/release/rust-analyzer analysis-stats .' Co-authored-by: Simon Vandel Sillesen <[email protected]>
Diffstat (limited to 'crates/ra_tt/src/buffer.rs')
-rw-r--r--crates/ra_tt/src/buffer.rs4
1 files changed, 3 insertions, 1 deletions
diff --git a/crates/ra_tt/src/buffer.rs b/crates/ra_tt/src/buffer.rs
index 14b3f707d..5967f44cd 100644
--- a/crates/ra_tt/src/buffer.rs
+++ b/crates/ra_tt/src/buffer.rs
@@ -42,7 +42,9 @@ impl<'t> TokenBuffer<'t> {
42 buffers: &mut Vec<Box<[Entry<'t>]>>, 42 buffers: &mut Vec<Box<[Entry<'t>]>>,
43 next: Option<EntryPtr>, 43 next: Option<EntryPtr>,
44 ) -> usize { 44 ) -> usize {
45 let mut entries = vec![]; 45 // Must contain everything in tokens and then the Entry::End
46 let start_capacity = tokens.len() + 1;
47 let mut entries = Vec::with_capacity(start_capacity);
46 let mut children = vec![]; 48 let mut children = vec![];
47 49
48 for (idx, tt) in tokens.iter().enumerate() { 50 for (idx, tt) in tokens.iter().enumerate() {