Mercurial > public > mercurial-scm > hg
diff rust/hg-core/src/dirstate/parsers.rs @ 43826:5ac243a92e37
rust-performance: introduce FastHashMap type alias for HashMap
Rust's default hashing is slow, because it is meant for preventing collision
attacks.
For all of the current Rust code, we don't care about those attacks, because
if an person with bad intentions has write access to your repo, you have other
issues.
I've chosen to use the TwoXHash crate because it was made by a reputable member
of the Rust community and has very good benchmarks.
For now it does not seem to improve performance by much for the current code,
but it's something else to not worry about when benchmarking code: in a
previous experiment with copytracing in Rust, it accounted for more than 10%
of the time of the entire script.
Differential Revision: https://phab.mercurial-scm.org/D7116
author | Rapha?l Gom?s <rgomes@octobus.net> |
---|---|
date | Mon, 14 Oct 2019 13:57:30 +0200 |
parents | 7a01778bc7b7 |
children | d880805d5442 |
line wrap: on
line diff
--- a/rust/hg-core/src/dirstate/parsers.rs Mon Dec 02 14:44:26 2019 +0100 +++ b/rust/hg-core/src/dirstate/parsers.rs Mon Oct 14 13:57:30 2019 +0200 @@ -157,13 +157,12 @@ #[cfg(test)] mod tests { use super::*; - use crate::utils::hg_path::HgPathBuf; - use std::collections::HashMap; + use crate::{utils::hg_path::HgPathBuf, FastHashMap}; #[test] fn test_pack_dirstate_empty() { - let mut state_map: StateMap = HashMap::new(); - let copymap = HashMap::new(); + let mut state_map: StateMap = FastHashMap::default(); + let copymap = FastHashMap::default(); let parents = DirstateParents { p1: *b"12345678910111213141", p2: *b"00000000000000000000", @@ -194,7 +193,7 @@ .collect(); let mut state_map = expected_state_map.clone(); - let copymap = HashMap::new(); + let copymap = FastHashMap::default(); let parents = DirstateParents { p1: *b"12345678910111213141", p2: *b"00000000000000000000", @@ -230,7 +229,7 @@ .cloned() .collect(); let mut state_map = expected_state_map.clone(); - let mut copymap = HashMap::new(); + let mut copymap = FastHashMap::default(); copymap.insert( HgPathBuf::from_bytes(b"f1"), HgPathBuf::from_bytes(b"copyname"), @@ -270,7 +269,7 @@ .iter() .cloned() .collect(); - let mut copymap = HashMap::new(); + let mut copymap = FastHashMap::default(); copymap.insert( HgPathBuf::from_bytes(b"f1"), HgPathBuf::from_bytes(b"copyname"), @@ -284,8 +283,8 @@ pack_dirstate(&mut state_map, ©map, parents.clone(), now) .unwrap(); - let mut new_state_map: StateMap = HashMap::new(); - let mut new_copy_map: CopyMap = HashMap::new(); + let mut new_state_map: StateMap = FastHashMap::default(); + let mut new_copy_map: CopyMap = FastHashMap::default(); let new_parents = parse_dirstate( &mut new_state_map, &mut new_copy_map, @@ -341,7 +340,7 @@ .iter() .cloned() .collect(); - let mut copymap = HashMap::new(); + let mut copymap = FastHashMap::default(); copymap.insert( HgPathBuf::from_bytes(b"f1"), HgPathBuf::from_bytes(b"copyname"), @@ -359,8 +358,8 @@ pack_dirstate(&mut state_map, ©map, parents.clone(), now) .unwrap(); - let mut new_state_map: StateMap = HashMap::new(); - let mut new_copy_map: CopyMap = HashMap::new(); + let mut new_state_map: StateMap = FastHashMap::default(); + let mut new_copy_map: CopyMap = FastHashMap::default(); let new_parents = parse_dirstate( &mut new_state_map, &mut new_copy_map, @@ -388,7 +387,7 @@ .iter() .cloned() .collect(); - let mut copymap = HashMap::new(); + let mut copymap = FastHashMap::default(); copymap.insert( HgPathBuf::from_bytes(b"f1"), HgPathBuf::from_bytes(b"copyname"), @@ -402,8 +401,8 @@ pack_dirstate(&mut state_map, ©map, parents.clone(), now) .unwrap(); - let mut new_state_map: StateMap = HashMap::new(); - let mut new_copy_map: CopyMap = HashMap::new(); + let mut new_state_map: StateMap = FastHashMap::default(); + let mut new_copy_map: CopyMap = FastHashMap::default(); let new_parents = parse_dirstate( &mut new_state_map, &mut new_copy_map,