commit | d42802a455c0d50482dbe8b526cdd79c53b035f4 | [log] [tgz] |
---|---|---|
author | James Farrell <jamesfarrell@google.com> | Tue Sep 12 03:55:00 2023 +0000 |
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | Tue Sep 12 03:55:00 2023 +0000 |
tree | 188a8dbe354f7da7e436e6fc8e3c5275649977d7 | |
parent | 314245bba059d429a07eabbb431dd103e52cee2e [diff] | |
parent | 76e1b53cc8ea909a0c1f3755238ac8af9454e166 [diff] |
Add cargo2android.json am: f494a86803 am: 2dfa516632 am: 19fd99c5f7 am: 99b54c8c64 am: 76e1b53cc8 Original change: https://android-review.googlesource.com/c/platform/external/rust/crates/fxhash/+/2744519 Change-Id: I2b080a12cf341ce32fd430166d109f1817529e1c Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This hashing algorithm was extracted from the Rustc compiler. This is the same hashing algoirthm used for some internal operations in FireFox. The strength of this algorithm is in hashing 8 bytes at a time on 64-bit platforms, where the FNV algorithm works on one byte at a time.
It is not a cryptographically secure hash, so it is strongly recommended that you do not use this hash for cryptographic purproses. Furthermore, this hashing algorithm was not designed to prevent any attacks for determining collisions which could be used to potentially cause quadratic behavior in HashMap
s. So it is not recommended to expose this hash in places where collissions or DDOS attacks may be a concern.
Building an Fx backed hashmap.
extern crate fxhash; use fxhash::FxHashMap; let mut hashmap = FxHashMap::new(); hashmap.insert("black", 0); hashmap.insert("white", 255);
Building an Fx backed hashset.
extern crate fxhash; use fxhash::FxHashSet; let mut hashmap = FxHashSet::new(); hashmap.insert("black"); hashmap.insert("white");
Generally fxhash
is than fnv
on u32
, u64
, or any byte sequence with length >= 5. However, keep in mind that hashing speed is not the only characteristic worth considering. That being said, Rustc had an observable increase in speed when switching from fnv
backed hashmaps to fx
based hashmaps.
bench_fnv_003 ... bench: 3 ns/iter (+/- 0) bench_fnv_004 ... bench: 2 ns/iter (+/- 0) bench_fnv_011 ... bench: 6 ns/iter (+/- 1) bench_fnv_012 ... bench: 5 ns/iter (+/- 1) bench_fnv_023 ... bench: 14 ns/iter (+/- 3) bench_fnv_024 ... bench: 14 ns/iter (+/- 4) bench_fnv_068 ... bench: 57 ns/iter (+/- 11) bench_fnv_132 ... bench: 145 ns/iter (+/- 30) bench_fx_003 ... bench: 4 ns/iter (+/- 0) bench_fx_004 ... bench: 3 ns/iter (+/- 1) bench_fx_011 ... bench: 5 ns/iter (+/- 2) bench_fx_012 ... bench: 4 ns/iter (+/- 1) bench_fx_023 ... bench: 7 ns/iter (+/- 3) bench_fx_024 ... bench: 4 ns/iter (+/- 1) bench_fx_068 ... bench: 10 ns/iter (+/- 3) bench_fx_132 ... bench: 19 ns/iter (+/- 5) bench_seahash_003 ... bench: 30 ns/iter (+/- 12) bench_seahash_004 ... bench: 32 ns/iter (+/- 22) bench_seahash_011 ... bench: 30 ns/iter (+/- 4) bench_seahash_012 ... bench: 31 ns/iter (+/- 1) bench_seahash_023 ... bench: 32 ns/iter (+/- 6) bench_seahash_024 ... bench: 31 ns/iter (+/- 5) bench_seahash_068 ... bench: 40 ns/iter (+/- 9) bench_seahash_132 ... bench: 50 ns/iter (+/- 12)