mod command;
mod logging;
mod types;
mod writer;
use crate::shared::HostInfoParams;
use clap::ValueEnum;
use frame_support::Serialize;
use sc_cli::{
WasmExecutionMethod, WasmtimeInstantiationStrategy, DEFAULT_WASMTIME_INSTANTIATION_STRATEGY,
DEFAULT_WASM_EXECUTION_METHOD,
};
use std::{fmt::Debug, path::PathBuf};
const LOG_TARGET: &'static str = "frame::benchmark::pallet";
fn parse_pallet_name(pallet: &str) -> std::result::Result<String, String> {
Ok(pallet.replace("-", "_"))
}
#[derive(Debug, Clone, Copy, ValueEnum)]
pub enum ListOutput {
All,
Pallets,
}
#[derive(Debug, clap::Parser)]
pub struct PalletCmd {
#[arg(short, long, alias = "pallet", num_args = 1.., value_delimiter = ',', value_parser = parse_pallet_name, required_unless_present_any = ["list", "json_input", "all"], default_value_if("all", "true", Some("*".into())))]
pub pallets: Vec<String>,
#[arg(short, long, required_unless_present_any = ["list", "json_input", "all"], default_value_if("all", "true", Some("*".into())))]
pub extrinsic: Option<String>,
#[arg(long, value_parser, num_args = 1.., value_delimiter = ',')]
pub exclude_pallets: Vec<String>,
#[arg(long, value_parser, num_args = 1.., value_delimiter = ',')]
pub exclude_extrinsics: Vec<String>,
#[arg(long)]
pub all: bool,
#[arg(short, long, default_value_t = 50)]
pub steps: u32,
#[arg(long = "low", value_delimiter = ',')]
pub lowest_range_values: Vec<u32>,
#[arg(long = "high", value_delimiter = ',')]
pub highest_range_values: Vec<u32>,
#[arg(short, long, default_value_t = 20)]
pub repeat: u32,
#[arg(long)]
pub external_repeat: Option<u32>,
#[arg(long, default_value_t = 10)]
pub min_duration: u64,
#[arg(long = "json")]
pub json_output: bool,
#[arg(long, conflicts_with = "json_output")]
pub json_file: Option<PathBuf>,
#[arg(long)]
pub no_median_slopes: bool,
#[arg(long)]
pub no_min_squares: bool,
#[arg(long)]
pub output: Option<PathBuf>,
#[arg(long)]
pub header: Option<PathBuf>,
#[arg(long)]
pub template: Option<PathBuf>,
#[allow(missing_docs)]
#[clap(flatten)]
pub hostinfo_params: HostInfoParams,
#[arg(long)]
pub output_analysis: Option<String>,
#[arg(long, default_value("median-slopes"))]
pub output_pov_analysis: Option<String>,
#[arg(long, default_value("max-encoded-len"), value_enum)]
pub default_pov_mode: command::PovEstimationMode,
#[arg(long)]
pub ignore_unknown_pov_mode: bool,
#[arg(long)]
pub heap_pages: Option<u64>,
#[arg(long)]
pub no_verify: bool,
#[arg(long)]
pub extra: bool,
#[allow(missing_docs)]
#[clap(flatten)]
pub shared_params: sc_cli::SharedParams,
#[arg(
long = "wasm-execution",
value_name = "METHOD",
value_enum,
ignore_case = true,
default_value_t = DEFAULT_WASM_EXECUTION_METHOD,
)]
pub wasm_method: WasmExecutionMethod,
#[arg(
long = "wasm-instantiation-strategy",
value_name = "STRATEGY",
default_value_t = DEFAULT_WASMTIME_INSTANTIATION_STRATEGY,
value_enum,
)]
pub wasmtime_instantiation_strategy: WasmtimeInstantiationStrategy,
#[arg(long, conflicts_with = "chain", required_if_eq("genesis_builder", "runtime"))]
pub runtime: Option<PathBuf>,
#[arg(long)]
pub runtime_log: Option<String>,
#[arg(long)]
pub allow_missing_host_functions: bool,
#[arg(long, value_enum, alias = "genesis-builder-policy")]
pub genesis_builder: Option<GenesisBuilderPolicy>,
#[arg(long, default_value = sp_genesis_builder::DEV_RUNTIME_PRESET)]
pub genesis_builder_preset: String,
#[arg(long = "execution")]
pub execution: Option<String>,
#[arg(long = "db-cache", value_name = "MiB", default_value_t = 1024)]
pub database_cache_size: u32,
#[arg(long, value_enum, ignore_case = true, num_args = 0..=1, require_equals = true, default_missing_value("All"))]
pub list: Option<ListOutput>,
#[arg(long, requires("list"))]
pub no_csv_header: bool,
#[arg(long)]
pub no_storage_info: bool,
#[clap(long = "map-size", default_value = "1000000")]
pub worst_case_map_values: u32,
#[clap(long, default_value = "2")]
pub additional_trie_layers: u8,
#[arg(long)]
pub json_input: Option<PathBuf>,
#[arg(long)]
pub unsafe_overwrite_results: bool,
#[arg(long)]
quiet: bool,
#[arg(long)]
disable_proof_recording: bool,
#[arg(long)]
pub genesis_patch: Option<PathBuf>,
}
#[derive(clap::ValueEnum, Debug, Eq, PartialEq, Clone, Copy, Serialize)]
#[clap(rename_all = "kebab-case")]
pub enum GenesisBuilderPolicy {
None,
Runtime,
SpecRuntime,
#[value(alias = "spec")]
SpecGenesis,
}