Skip to content

Commit

Permalink
fix(fast-graph): Use fxhash instead of ahash to make iteration order …
Browse files Browse the repository at this point in the history
…consistent (#7133)

**Description:**

Some operations of `petgraph` assumes the same iteration order.
  • Loading branch information
kdy1 committed Mar 23, 2023
1 parent b178ff5 commit b13eb4c
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 15 deletions.
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 10 additions & 10 deletions crates/swc_fast_graph/Cargo.toml
@@ -1,18 +1,18 @@
[package]
authors = ["강동윤 <kdy1997.dev@gmail.com>"]
authors = ["강동윤 <kdy1997.dev@gmail.com>"]
description = "Faster version of petgraph"
edition = "2021"
include = ["Cargo.toml", "src/**/*.rs"]
license = "Apache-2.0"
name = "swc_fast_graph"
repository = "https://github.com/swc-project/swc.git"
version = "0.17.40"
edition = "2021"
include = ["Cargo.toml", "src/**/*.rs"]
license = "Apache-2.0"
name = "swc_fast_graph"
repository = "https://github.com/swc-project/swc.git"
version = "0.17.40"

[lib]
bench = false

[dependencies]
ahash = "0.7.6"
indexmap = "1.6.1"
petgraph = "0.6"
indexmap = "1.6.1"
petgraph = "0.6"
swc_common = { version = "0.29.39", path = "../swc_common" }
rustc-hash = "1.1.0"
11 changes: 7 additions & 4 deletions crates/swc_fast_graph/src/digraph.rs
Expand Up @@ -6,7 +6,7 @@
use std::{
cmp::Ordering,
fmt,
hash::{self, Hash},
hash::{self, BuildHasherDefault, Hash},
iter::{Cloned, DoubleEndedIterator, FromIterator},
marker::PhantomData,
ops::Deref,
Expand All @@ -25,8 +25,11 @@ use petgraph::{
},
Directed, Direction, EdgeType, Incoming, IntoWeightedEdge, Outgoing, Undirected,
};
use rustc_hash::FxHasher;
use swc_common::collections::AHashSet;

type FxBuildHasher = BuildHasherDefault<FxHasher>;

/// A `GraphMap` with directed edges.
///
/// For example, an edge from *1* to *2* is distinct from an edge from *2* to
Expand Down Expand Up @@ -59,8 +62,8 @@ pub type FastDiGraphMap<N, E> = FastGraphMap<N, E, Directed>;
/// Depends on crate feature `graphmap` (default).
#[derive(Clone)]
pub struct FastGraphMap<N, E, Ty> {
nodes: IndexMap<N, Vec<(N, CompactDirection)>, ahash::RandomState>,
edges: IndexMap<(N, N), E, ahash::RandomState>,
nodes: IndexMap<N, Vec<(N, CompactDirection)>, FxBuildHasher>,
edges: IndexMap<(N, N), E, FxBuildHasher>,
ty: PhantomData<Ty>,
}

Expand Down Expand Up @@ -584,7 +587,7 @@ where
Ty: EdgeType,
{
from: N,
edges: &'a IndexMap<(N, N), E, ahash::RandomState>,
edges: &'a IndexMap<(N, N), E, FxBuildHasher>,
iter: Neighbors<'a, N, Ty>,
}

Expand Down

1 comment on commit b13eb4c

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Benchmark suite Current: b13eb4c Previous: 150c2b6 Ratio
es/full/bugs-1 315323 ns/iter (± 6430) 306309 ns/iter (± 10598) 1.03
es/full/minify/libraries/antd 1569610948 ns/iter (± 19467873) 1544331036 ns/iter (± 23836829) 1.02
es/full/minify/libraries/d3 299419103 ns/iter (± 4311538) 297905755 ns/iter (± 9277237) 1.01
es/full/minify/libraries/echarts 1202365221 ns/iter (± 8302934) 1189776727 ns/iter (± 20333102) 1.01
es/full/minify/libraries/jquery 91587950 ns/iter (± 724273) 90570410 ns/iter (± 701335) 1.01
es/full/minify/libraries/lodash 106031434 ns/iter (± 2093594) 105047033 ns/iter (± 821945) 1.01
es/full/minify/libraries/moment 53049652 ns/iter (± 678799) 52333234 ns/iter (± 322107) 1.01
es/full/minify/libraries/react 19287456 ns/iter (± 176139) 19088112 ns/iter (± 128857) 1.01
es/full/minify/libraries/terser 247454291 ns/iter (± 1879704) 246278714 ns/iter (± 2059315) 1.00
es/full/minify/libraries/three 433871947 ns/iter (± 4225323) 429377063 ns/iter (± 5787317) 1.01
es/full/minify/libraries/typescript 2947579584 ns/iter (± 10990184) 2952679163 ns/iter (± 22958557) 1.00
es/full/minify/libraries/victory 660403306 ns/iter (± 9229098) 636812459 ns/iter (± 12551148) 1.04
es/full/minify/libraries/vue 133399476 ns/iter (± 1042471) 130622693 ns/iter (± 1354843) 1.02
es/full/codegen/es3 28776 ns/iter (± 95) 28414 ns/iter (± 56) 1.01
es/full/codegen/es5 28920 ns/iter (± 151) 28402 ns/iter (± 58) 1.02
es/full/codegen/es2015 28864 ns/iter (± 91) 28451 ns/iter (± 88) 1.01
es/full/codegen/es2016 28858 ns/iter (± 84) 28459 ns/iter (± 87) 1.01
es/full/codegen/es2017 28854 ns/iter (± 74) 28487 ns/iter (± 75) 1.01
es/full/codegen/es2018 28927 ns/iter (± 66) 28404 ns/iter (± 66) 1.02
es/full/codegen/es2019 28865 ns/iter (± 72) 28480 ns/iter (± 40) 1.01
es/full/codegen/es2020 28907 ns/iter (± 74) 28422 ns/iter (± 68) 1.02
es/full/all/es3 185648491 ns/iter (± 2928418) 182764945 ns/iter (± 3474970) 1.02
es/full/all/es5 175159197 ns/iter (± 3557475) 174606539 ns/iter (± 2124503) 1.00
es/full/all/es2015 139310574 ns/iter (± 2786085) 139853870 ns/iter (± 2481156) 1.00
es/full/all/es2016 138231538 ns/iter (± 1628856) 136235429 ns/iter (± 1955167) 1.01
es/full/all/es2017 137224712 ns/iter (± 2081055) 135653999 ns/iter (± 1430636) 1.01
es/full/all/es2018 132559155 ns/iter (± 2051957) 131222362 ns/iter (± 2801201) 1.01
es/full/all/es2019 131027966 ns/iter (± 2003315) 130767849 ns/iter (± 1986608) 1.00
es/full/all/es2020 121990756 ns/iter (± 1829782) 120358561 ns/iter (± 859006) 1.01
es/full/parser 538233 ns/iter (± 9156) 541288 ns/iter (± 6884) 0.99
es/full/base/fixer 22704 ns/iter (± 60) 22549 ns/iter (± 30) 1.01
es/full/base/resolver_and_hygiene 82992 ns/iter (± 105) 84239 ns/iter (± 102) 0.99
serialization of ast node 124 ns/iter (± 1) 123 ns/iter (± 7) 1.01
serialization of serde 126 ns/iter (± 0) 129 ns/iter (± 0) 0.98
css/minify/libraries/bootstrap 29049545 ns/iter (± 118867) 28572222 ns/iter (± 185171) 1.02
css/visitor/compare/clone 2097823 ns/iter (± 20488) 2100638 ns/iter (± 15670) 1.00
css/visitor/compare/visit_mut_span 2265959 ns/iter (± 8142) 2282154 ns/iter (± 6753) 0.99
css/visitor/compare/visit_mut_span_panic 2327552 ns/iter (± 5191) 2332024 ns/iter (± 8079) 1.00
css/visitor/compare/fold_span 3034099 ns/iter (± 18924) 3037640 ns/iter (± 24973) 1.00
css/visitor/compare/fold_span_panic 3232526 ns/iter (± 21977) 3187967 ns/iter (± 19918) 1.01
css/lexer/bootstrap_5_1_3 5180354 ns/iter (± 4826) 5184516 ns/iter (± 31029) 1.00
css/lexer/foundation_6_7_4 4368360 ns/iter (± 22958) 4362809 ns/iter (± 7304) 1.00
css/lexer/tailwind_3_1_1 827535 ns/iter (± 550) 828896 ns/iter (± 4466) 1.00
css/parser/bootstrap_5_1_3 22250375 ns/iter (± 165055) 21859507 ns/iter (± 99910) 1.02
css/parser/foundation_6_7_4 17741174 ns/iter (± 121932) 17447895 ns/iter (± 123322) 1.02
css/parser/tailwind_3_1_1 3382022 ns/iter (± 5396) 3343045 ns/iter (± 4598) 1.01
es/codegen/colors 328732 ns/iter (± 184084) 333070 ns/iter (± 187836) 0.99
es/codegen/large 1171946 ns/iter (± 594834) 1250270 ns/iter (± 641727) 0.94
es/codegen/with-parser/colors 47789 ns/iter (± 448) 47880 ns/iter (± 382) 1.00
es/codegen/with-parser/large 522765 ns/iter (± 1366) 530934 ns/iter (± 1996) 0.98
es/minify/libraries/antd 1372840843 ns/iter (± 19733567) 1336352812 ns/iter (± 16265901) 1.03
es/minify/libraries/d3 256952643 ns/iter (± 1768696) 250237666 ns/iter (± 3015893) 1.03
es/minify/libraries/echarts 1051914303 ns/iter (± 10652007) 1023353452 ns/iter (± 6295699) 1.03
es/minify/libraries/jquery 79214024 ns/iter (± 390762) 78506161 ns/iter (± 482505) 1.01
es/minify/libraries/lodash 94427887 ns/iter (± 760874) 94934344 ns/iter (± 1302753) 0.99
es/minify/libraries/moment 45928014 ns/iter (± 526926) 45568085 ns/iter (± 198539) 1.01
es/minify/libraries/react 17128136 ns/iter (± 161710) 17182166 ns/iter (± 165280) 1.00
es/minify/libraries/terser 211126949 ns/iter (± 1815042) 209222932 ns/iter (± 2836854) 1.01
es/minify/libraries/three 364691696 ns/iter (± 12567378) 354293010 ns/iter (± 4659703) 1.03
es/minify/libraries/typescript 2577839705 ns/iter (± 13513438) 2462938138 ns/iter (± 7532195) 1.05
es/minify/libraries/victory 604721027 ns/iter (± 6666373) 551092666 ns/iter (± 13309865) 1.10
es/minify/libraries/vue 121115283 ns/iter (± 2878289) 115660795 ns/iter (± 1088275) 1.05
es/visitor/compare/clone 2333069 ns/iter (± 11452) 2292927 ns/iter (± 19514) 1.02
es/visitor/compare/visit_mut_span 2708603 ns/iter (± 6975) 2662100 ns/iter (± 9043) 1.02
es/visitor/compare/visit_mut_span_panic 2733576 ns/iter (± 6323) 2718794 ns/iter (± 7833) 1.01
es/visitor/compare/fold_span 3840092 ns/iter (± 8983) 3791228 ns/iter (± 7867) 1.01
es/visitor/compare/fold_span_panic 3988930 ns/iter (± 16142) 3935086 ns/iter (± 21009) 1.01
es/lexer/colors 15315 ns/iter (± 11) 15802 ns/iter (± 24) 0.97
es/lexer/angular 7374241 ns/iter (± 5203) 7706225 ns/iter (± 3629) 0.96
es/lexer/backbone 982291 ns/iter (± 638) 987703 ns/iter (± 335) 0.99
es/lexer/jquery 5536021 ns/iter (± 1408) 5558041 ns/iter (± 2935) 1.00
es/lexer/jquery mobile 8496848 ns/iter (± 3012) 8563667 ns/iter (± 15288) 0.99
es/lexer/mootools 4392421 ns/iter (± 21092) 4405167 ns/iter (± 1440) 1.00
es/lexer/underscore 826173 ns/iter (± 2193) 828422 ns/iter (± 191) 1.00
es/lexer/three 26077684 ns/iter (± 9913) 26184632 ns/iter (± 97682) 1.00
es/lexer/yui 4653886 ns/iter (± 3426) 4736239 ns/iter (± 1412) 0.98
es/parser/colors 29477 ns/iter (± 18) 29320 ns/iter (± 48) 1.01
es/parser/angular 15677874 ns/iter (± 220113) 16164085 ns/iter (± 191455) 0.97
es/parser/backbone 2247605 ns/iter (± 14429) 2251989 ns/iter (± 13392) 1.00
es/parser/jquery 12548874 ns/iter (± 119709) 12328424 ns/iter (± 110230) 1.02
es/parser/jquery mobile 20327311 ns/iter (± 297493) 19813236 ns/iter (± 326616) 1.03
es/parser/mootools 9376481 ns/iter (± 53397) 9360948 ns/iter (± 25111) 1.00
es/parser/underscore 1896791 ns/iter (± 11096) 1902482 ns/iter (± 9573) 1.00
es/parser/three 57569070 ns/iter (± 129948) 56960006 ns/iter (± 340948) 1.01
es/parser/yui 9461557 ns/iter (± 178489) 9370159 ns/iter (± 85883) 1.01
es/preset-env/usage/builtin_type 142411 ns/iter (± 34306) 137314 ns/iter (± 31332) 1.04
es/preset-env/usage/property 21078 ns/iter (± 135) 21021 ns/iter (± 83) 1.00
es/resolver/typescript 120544105 ns/iter (± 3341382) 115440637 ns/iter (± 1890716) 1.04
es/fixer/typescript 81278461 ns/iter (± 822772) 79870747 ns/iter (± 1762029) 1.02
es/hygiene/typescript 174011916 ns/iter (± 1973410) 170987935 ns/iter (± 2190356) 1.02
es/resolver_with_hygiene/typescript 316261369 ns/iter (± 3063587) 317424798 ns/iter (± 1680812) 1.00
es/visitor/base-perf/module_clone 79819 ns/iter (± 1637) 78496 ns/iter (± 1025) 1.02
es/visitor/base-perf/fold_empty 88782 ns/iter (± 1287) 88543 ns/iter (± 1541) 1.00
es/visitor/base-perf/fold_noop_impl_all 90342 ns/iter (± 1836) 90254 ns/iter (± 671) 1.00
es/visitor/base-perf/fold_noop_impl_vec 91073 ns/iter (± 1127) 89537 ns/iter (± 1485) 1.02
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 56 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed_clone 54 ns/iter (± 0) 53 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_boxed 101 ns/iter (± 0) 100 ns/iter (± 0) 1.01
es/visitor/base-perf/boxing_unboxed 98 ns/iter (± 0) 96 ns/iter (± 0) 1.02
es/visitor/base-perf/visit_contains_this 3476 ns/iter (± 93) 3411 ns/iter (± 79) 1.02
es/base/parallel/resolver/typescript 6352565857 ns/iter (± 354731913) 6996883744 ns/iter (± 432104603) 0.91
es/base/parallel/hygiene/typescript 2009172220 ns/iter (± 28090662) 1969916963 ns/iter (± 33895076) 1.02
misc/visitors/time-complexity/time 5 93 ns/iter (± 0) 93 ns/iter (± 0) 1
misc/visitors/time-complexity/time 10 308 ns/iter (± 3) 308 ns/iter (± 3) 1
misc/visitors/time-complexity/time 15 678 ns/iter (± 1) 620 ns/iter (± 19) 1.09
misc/visitors/time-complexity/time 20 1158 ns/iter (± 17) 1134 ns/iter (± 16) 1.02
misc/visitors/time-complexity/time 40 5738 ns/iter (± 44) 5781 ns/iter (± 32) 0.99
misc/visitors/time-complexity/time 60 12946 ns/iter (± 105) 12953 ns/iter (± 126) 1.00
es/full-target/es2016 247960 ns/iter (± 579) 250053 ns/iter (± 245) 0.99
es/full-target/es2017 240579 ns/iter (± 436) 242770 ns/iter (± 290) 0.99
es/full-target/es2018 230277 ns/iter (± 429) 231911 ns/iter (± 198) 0.99
es2020_nullish_coalescing 91904 ns/iter (± 510) 90951 ns/iter (± 562) 1.01
es2020_optional_chaining 124121 ns/iter (± 520) 123236 ns/iter (± 558) 1.01
es2022_class_properties 146341 ns/iter (± 147) 147103 ns/iter (± 277) 0.99
es2018_object_rest_spread 95183 ns/iter (± 213) 94693 ns/iter (± 152) 1.01
es2019_optional_catch_binding 84737 ns/iter (± 133) 84113 ns/iter (± 213) 1.01
es2017_async_to_generator 85099 ns/iter (± 191) 84910 ns/iter (± 145) 1.00
es2016_exponentiation 89437 ns/iter (± 270) 89031 ns/iter (± 226) 1.00
es2015_arrow 93670 ns/iter (± 210) 93385 ns/iter (± 182) 1.00
es2015_block_scoped_fn 91314 ns/iter (± 183) 90657 ns/iter (± 220) 1.01
es2015_block_scoping 168548 ns/iter (± 201) 168926 ns/iter (± 127) 1.00

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.