• Sam Johnson's avatar
    new proc-macro-based benchmarking syntax (#12924) · 42e5c27c
    Sam Johnson authored
    * add stub for new benchmark macro
    
    * benchmark syntax
    
    * add #[extrinsic call] separator
    
    * parse #[benchmark] item as a function
    
    * proper emission of error when #[extrinsic_call] annotation is missing
    
    * clean up
    
    * enclosing module via benchmarks! { } working
    
    * use an attribute macro on the module instead of benchmarks! { }
    
    * cargo fmt
    
    * working component implementation
    
    * WIP
    
    * working
    
    * add syntax for Linear<A, B>
    
    * parsing of param ranges (still need to build tuple though)
    
    * params parsing WIP
    
    * clean up (don't need extrinsic call name)
    
    * use proper Result syntax for BenchmarkDef parsing
    
    * proper parsing of Linear<0, 1> style args
    
    * successfully parse and make use of linear component ranges 💥
    
    * rename support variable => home because eventually will be moved
    
    * compile-time check that param range types implement ParamRange
    
    * switch to using balances as example, failing on instance pallet
    
    * successfully set up __origin and __call with balances 💥
    
    * clean up
    
    * use a module
    
    * don't need a variable for transfer
    
    * rename benchmark_transfer -> transfer because no longer conflicts
    
    * clean up
    
    * working with transfer_increasing_users as well 💥
    
    * re-add BareBlock
    
    * add comments for undocumented structs+functions+traits
    
    * refactor in preparation for removing module requirements
    
    * switch to a block instead of a module
    
    * use the outer macro pattern to to enable #[benchmarks] aggregation
    
    * successfully generate SelectedBenchmark 💥
    
    * implement components for SelectedBenchmark
    
    * implement instance for SelectedBenchmark
    
    * properly track #[extra]
    
    * working impl for fn benchmarks()
    
    * run_benchmarks WIP
    
    * finish run_benchmark! impl 💥
    
    * import balances transfer_best_case benchmark
    
    * import transfer_keep_alive balances pallet benchmark
    
    * import set_balance_creating balances pallet benchmark
    
    * import set_balance_killing balances pallet benchmark
    
    * import force_transfer balances pallet benchmark
    
    * add #[extra] annotation and docs to transfer_increasing_users
    
    * import transfer_all balances pallet benchmark
    
    * import force_unreserve balances pallet benchmark
    
    * prepare to implement impl_benchmark_test_suite!
    
    * ensure tests cover #[extra] before and after #[benchmark] tag
    
    * refactor
    
    * clean up
    
    * fix
    
    * move to outer
    
    * switch to benchmarks/instance_benchmarks
    
    * test impl almost done, strange compiler error
    
    * benchmark test suites working 💥
    
    * clean up
    
    * add stub and basic parsing for where_clause
    
    * working except where clause and extrinsic calls containing method chains
    
    * assume option (2) for now wrt https://github.com/paritytech/substrate/pull/12924#issuecomment-1372938718
    
    * clean up
    
    * switch to attribute-style
    
    * properly handle where clauses
    
    * fix subtle missing where clause, now just MessageQueue issues
    
    * fix block formatting in message-queue pallet
    
    * switch to block vs non-block parsing of extrinsic call
    
    * working now but some benchmark tests failing
    
    * message-queue tests working (run order issue fixed) 🎉
    
    
    
    * add comments and internal docs for fame_support_procedural::benchmark
    
    * fix license years
    
    * docs for lib.rs
    
    * add docs to new support procedural macros
    
    * don't allow #[benchmark] outside of benchmarking module
    
    * add docs
    
    * use benchmark(extra, skip_meta) style args
    
    * update docs accordingly
    
    * appease clippy
    
    * bump ci
    
    * add notes about `extra` and `skip_meta`
    
    * fix doc tests
    
    * re-run CI
    
    * use `ignore` instead of `no_run` on doc examples
    
    * bump CI
    
    * replace some if-lets with if-elses
    
    * more refactoring of if-let statements
    
    * fix remaining if-lets in BenchmarkDef::from()
    
    * fix if-lets in benchmarks()
    
    * fix remaining if-lets, use nested find_map for extrinsic call
    
    * switch to use #[extrinsic_call] or #[block] situationally
    
    * refactor ExtrinsicCallDef => BenchmarkCallDef
    
    * update docs with info about #[block]
    
    * add macro stub for #[extrinsic_call]
    
    * fix docs and add stub for #[block] as well
    
    * remove unused extern crate line
    
    * fix clippy nits
    
    * Use V2 bench syntax in pallet-example-basic
    
    Just testing the dev-ex...
    
    Signed-off-by: default avatarOliver Tale-Yazdi <[email protected]>
    
    * carry over comment
    
    * use curly-brace style for impl_benchmark_test_suite!
    
    * remove unneeded parenthesis
    
    * proper handling of _() extrinsic call style
    
    * add docs for _() syntax
    
    * fix crate access
    
    * simplify keyword access
    
    Co-authored-by: default avatarKeith Yeung <[email protected]>
    
    * simplify module content destructuring
    
    Co-authored-by: default avatarKeith Yeung <[email protected]>
    
    * fix crate access "frame_benchmarking" => "frame-benchmarking", compiles
    
    * use _() extrinsic call syntax where possible in balances
    
    * simplify attr.path.segments.last()
    
    Co-authored-by: default avatarKeith Yeung <[email protected]>
    
    * fix compile error being suppressed
    
    * simplify extrinsic call keyword parsing
    
    Co-authored-by: default avatarKeith Yeung <[email protected]>
    
    * use ? operator instead of return None
    
    Co-authored-by: default avatarKeith Yeung <[email protected]>
    
    * rename generics => type_use_generics
    rename full_generics => type_impl_generics
    
    * simplify extrinsic call extraction with transpose
    
    * bump CI
    
    * nit
    
    * proper handling of too many + too few block/extrinsic call annotations
    
    * change to B >= A
    
    Co-authored-by: default avatarOliver Tale-Yazdi <[email protected]>
    
    * remove unneeded ignore
    
    Co-authored-by: default avatarOliver Tale-Yazdi <[email protected]>
    
    * remove another ignore
    
    Co-authored-by: default avatarOliver Tale-Yazdi <[email protected]>
    
    * add ui tests
    
    * use _() style extrinsic call on accumulate_dummy
    
    Co-authored-by: default avatarOliver Tale-Yazdi <[email protected]>
    
    * add range check to ParamRange
    
    * ui test for bad param ranges
    
    * fix failing example
    
    * add ignore back to other failing example
    
    * tweak expr_call span
    
    Co-authored-by: default avatarKeith Yeung <[email protected]>
    
    * fix typo
    
    * eliminate a match
    
    Co-authored-by: default avatarKeith Yeung <[email protected]>
    
    * change pub fn benchmarks to return Result<TokenStream>
    
    * fix origin error span
    
    * more informative error for invalid benchmark parameter name
    
    * fix spans on a few benchmark errors
    
    * remove unneeded clone
    
    * refactor inner loop of benchmark function parsing
    
    * preserve mod attributes
    
    * refactor outer loop of benchmark def parsing code, greatly simplified
    
    * simplify to use a ? operator when parsing benchmark attr path
    
    * fix another ? operator
    
    * further simplify benchmark function attr parsing with more ? ops
    
    * refactor extrinsic call handling to use if let rather than match
    
    * replace is_ok => is_err
    
    Co-authored-by: default avatarKeith Yeung <[email protected]>
    
    * re-use name during expansion of benchmark def
    
    * remove unneeded clone
    
    * fix span for origin missing error
    
    * fix missing semi
    
    Signed-off-by: default avatarOliver Tale-Yazdi <[email protected]>
    Co-authored-by: default avatarOliver Tale-Yazdi <[email protected]>
    Co-authored-by: default avatarKeith Yeung <[email protected]>
    Co-authored-by: parity-processbot <>
    42e5c27c