@@ -4963,6 +4963,8 @@ pub(crate) mod test_utils {
4963
4963
#[ cfg( all( test, feature = "unstable" , not( feature = "no-std" ) ) ) ]
4964
4964
mod benches {
4965
4965
use super :: * ;
4966
+ use bitcoin:: secp256k1:: PublicKey ;
4967
+ use ln:: features:: InvoiceFeatures ;
4966
4968
use routing:: scoring:: Scorer ;
4967
4969
use util:: logger:: { Logger , Record } ;
4968
4970
@@ -4973,47 +4975,29 @@ mod benches {
4973
4975
fn log ( & self , _record : & Record ) { }
4974
4976
}
4975
4977
4976
- #[ bench]
4977
- fn generate_routes ( bench : & mut Bencher ) {
4978
+ fn read_network_graph ( ) -> NetworkGraph {
4978
4979
let mut d = test_utils:: get_route_file ( ) . unwrap ( ) ;
4979
- let graph = NetworkGraph :: read ( & mut d) . unwrap ( ) ;
4980
- let nodes = graph. read_only ( ) . nodes ( ) . clone ( ) ;
4981
- let scorer = Scorer :: with_fixed_penalty ( 0 ) ;
4982
-
4983
- // First, get 100 (source, destination) pairs for which route-getting actually succeeds...
4984
- let mut path_endpoints = Vec :: new ( ) ;
4985
- let mut seed: usize = 0xdeadbeef ;
4986
- ' load_endpoints: for _ in 0 ..100 {
4987
- loop {
4988
- seed *= 0xdeadbeef ;
4989
- let src = PublicKey :: from_slice ( nodes. keys ( ) . skip ( seed % nodes. len ( ) ) . next ( ) . unwrap ( ) . as_slice ( ) ) . unwrap ( ) ;
4990
- seed *= 0xdeadbeef ;
4991
- let dst = PublicKey :: from_slice ( nodes. keys ( ) . skip ( seed % nodes. len ( ) ) . next ( ) . unwrap ( ) . as_slice ( ) ) . unwrap ( ) ;
4992
- let payment_params = PaymentParameters :: from_node_id ( dst) ;
4993
- let amt = seed as u64 % 1_000_000 ;
4994
- if get_route ( & src, & payment_params, & graph, None , amt, 42 , & DummyLogger { } , & scorer) . is_ok ( ) {
4995
- path_endpoints. push ( ( src, dst, amt) ) ;
4996
- continue ' load_endpoints;
4997
- }
4998
- }
4999
- }
4980
+ NetworkGraph :: read ( & mut d) . unwrap ( )
4981
+ }
5000
4982
5001
- // ...then benchmark finding paths between the nodes we learned.
5002
- let mut idx = 0 ;
5003
- bench. iter ( || {
5004
- let ( src, dst, amt) = path_endpoints[ idx % path_endpoints. len ( ) ] ;
5005
- let payment_params = PaymentParameters :: from_node_id ( dst) ;
5006
- assert ! ( get_route( & src, & payment_params, & graph, None , amt, 42 , & DummyLogger { } , & scorer) . is_ok( ) ) ;
5007
- idx += 1 ;
5008
- } ) ;
4983
+ #[ bench]
4984
+ fn generate_routes_with_default_scorer ( bench : & mut Bencher ) {
4985
+ let network_graph = read_network_graph ( ) ;
4986
+ let scorer = Scorer :: default ( ) ;
4987
+ generate_routes ( bench, & network_graph, scorer, InvoiceFeatures :: empty ( ) ) ;
5009
4988
}
5010
4989
5011
4990
#[ bench]
5012
- fn generate_mpp_routes ( bench : & mut Bencher ) {
5013
- let mut d = test_utils:: get_route_file ( ) . unwrap ( ) ;
5014
- let graph = NetworkGraph :: read ( & mut d) . unwrap ( ) ;
4991
+ fn generate_mpp_routes_with_default_scorer ( bench : & mut Bencher ) {
4992
+ let network_graph = read_network_graph ( ) ;
4993
+ let scorer = Scorer :: default ( ) ;
4994
+ generate_routes ( bench, & network_graph, scorer, InvoiceFeatures :: known ( ) ) ;
4995
+ }
4996
+
4997
+ fn generate_routes < S : Score > (
4998
+ bench : & mut Bencher , graph : & NetworkGraph , scorer : S , features : InvoiceFeatures
4999
+ ) {
5015
5000
let nodes = graph. read_only ( ) . nodes ( ) . clone ( ) ;
5016
- let scorer = Scorer :: with_fixed_penalty ( 0 ) ;
5017
5001
5018
5002
// First, get 100 (source, destination) pairs for which route-getting actually succeeds...
5019
5003
let mut path_endpoints = Vec :: new ( ) ;
@@ -5024,9 +5008,9 @@ mod benches {
5024
5008
let src = PublicKey :: from_slice ( nodes. keys ( ) . skip ( seed % nodes. len ( ) ) . next ( ) . unwrap ( ) . as_slice ( ) ) . unwrap ( ) ;
5025
5009
seed *= 0xdeadbeef ;
5026
5010
let dst = PublicKey :: from_slice ( nodes. keys ( ) . skip ( seed % nodes. len ( ) ) . next ( ) . unwrap ( ) . as_slice ( ) ) . unwrap ( ) ;
5027
- let payment_params = PaymentParameters :: from_node_id ( dst) . with_features ( InvoiceFeatures :: known ( ) ) ;
5011
+ let params = PaymentParameters :: from_node_id ( dst) . with_features ( features . clone ( ) ) ;
5028
5012
let amt = seed as u64 % 1_000_000 ;
5029
- if get_route ( & src, & payment_params , & graph, None , amt, 42 , & DummyLogger { } , & scorer) . is_ok ( ) {
5013
+ if get_route ( & src, & params , & graph, None , amt, 42 , & DummyLogger { } , & scorer) . is_ok ( ) {
5030
5014
path_endpoints. push ( ( src, dst, amt) ) ;
5031
5015
continue ' load_endpoints;
5032
5016
}
@@ -5037,8 +5021,8 @@ mod benches {
5037
5021
let mut idx = 0 ;
5038
5022
bench. iter ( || {
5039
5023
let ( src, dst, amt) = path_endpoints[ idx % path_endpoints. len ( ) ] ;
5040
- let payment_params = PaymentParameters :: from_node_id ( dst) . with_features ( InvoiceFeatures :: known ( ) ) ;
5041
- assert ! ( get_route( & src, & payment_params , & graph, None , amt, 42 , & DummyLogger { } , & scorer) . is_ok( ) ) ;
5024
+ let params = PaymentParameters :: from_node_id ( dst) . with_features ( features . clone ( ) ) ;
5025
+ assert ! ( get_route( & src, & params , & graph, None , amt, 42 , & DummyLogger { } , & scorer) . is_ok( ) ) ;
5042
5026
idx += 1 ;
5043
5027
} ) ;
5044
5028
}
0 commit comments