contracts: Fix printing the `Schedule` (#3021)
Printing the `Schedule` is a useful debugging tool and general sanity check. It is much more easy to interpret than the raw weights. The printing relied on using `println` and hence was only available from the native runtime. This is no longer available. This is why in this PR we switch to using `log` which works from Wasm. I made sure that the `WeightDebug` is only derived when `runtime-benchmarks` is set so that we don't increase the size of the binary. Some other changes were necessary to make this actually work inside the runtime. For example, I needed to remove `format!` and usage of floats. Please note that this removed the decimal from the number because truncating the fraction without using floats would not be easy and would require custom code. I think the precision here is sufficient. This is how the output looks like now: ``` Schedule { limits: Limits { event_topics: 4, globals: 256, locals: 1024, parameters: 128, memory_pages: 16, table_size: 4096, br_table_size: 256, subject_len: 32, payload_len: 16384, runtime_memory: 134217728, }, instruction_weights: InstructionWeights { base: 2565, _phantom: PhantomData<kitchensink_runtime::Runtime>, }, host_fn_weights: HostFnWeights { caller: 322 ns, 6 bytes, is_contract: 28 µs, 2684 bytes, code_hash: 29 µs, 2688 bytes, own_code_hash: 400 ns, 6 bytes, caller_is_origin: 176 ns, 3 bytes, caller_is_root: 158 ns, 3 bytes, address: 315 ns, 6 bytes, gas_left: 355 ns, 6 bytes, balance: 1 µs, 6 bytes, value_transferred: 314 ns, 6 bytes, minimum_balance: 318 ns, 6 bytes, block_number: 313 ns, 6 bytes, now: 325 ns, 6 bytes, weight_to_fee: 1 µs, 14 bytes, input: 263 ns, 6 bytes, input_per_byte: 989 ps, 0 bytes, r#return: 0 ps, 45 bytes, return_per_byte: 320 ps, 0 bytes, terminate: 1 ms, 5266 bytes, random: 1 µs, 10 bytes, deposit_event: 1 µs, 10 bytes, deposit_event_per_topic: 127 µs, 2508 bytes, deposit_event_per_byte: 501 ps, 0 bytes, debug_message: 226 ns, 7 bytes, debug_message_per_byte: 1 ns, 0 bytes, set_storage: 131 µs, 293 bytes, set_storage_per_new_byte: 576 ps, 0 bytes, set_storage_per_old_byte: 184 ps, 1 bytes, set_code_hash: 297 µs, 3090 bytes, clear_storage: 131 µs, 289 bytes, clear_storage_per_byte: 92 ps, 1 bytes, contains_storage: 29 µs, 289 bytes, contains_storage_per_byte: 213 ps, 1 bytes, get_storage: 29 µs, 297 bytes, get_storage_per_byte: 980 ps, 1 bytes, take_storage: 131 µs, 297 bytes, take_storage_per_byte: 921 ps, 1 bytes, transfer: 156 µs, 2520 bytes, call: 484 µs, 2721 bytes, delegate_call: 406 µs, 2637 bytes, call_transfer_surcharge: 607 µs, 5227 bytes, call_per_cloned_byte: 970 ps, 0 bytes, instantiate: 1 ms, 2731 bytes, instantiate_transfer_surcharge: 131 µs, 2549 bytes, instantiate_per_input_byte: 1 ns, 0 bytes, instantiate_per_salt_byte: 1 ns, 0 bytes, hash_sha2_256: 377 ns, 8 bytes, hash_sha2_256_per_byte: 1 ns, 0 bytes, hash_keccak_256: 767 ns, 8 bytes, hash_keccak_256_per_byte: 3 ns, 0 bytes, hash_blake2_256: 443 ns, 8 bytes, hash_blake2_256_per_byte: 1 ns, 0 bytes, hash_blake2_128: 440 ns, 8 bytes, hash_blake2_128_per_byte: 1 ns, 0 bytes, ecdsa_recover: 45 µs, 77 bytes, ecdsa_to_eth_address: 11 µs, 42 bytes, sr25519_verify: 41 µs, 112 bytes, sr25519_verify_per_byte: 5 ns, 1 bytes, reentrance_count: 174 ns, 3 bytes, account_reentrance_count: 248 ns, 40 bytes, instantiation_nonce: 154 ns, 3 bytes, add_delegate_dependency: 131 µs, 2606 bytes, remove_delegate_dependency: 130 µs, 2568 bytes, }, } ############################################### Lazy deletion weight per key: Weight(ref_time: 126109302, proof_size: 70) Lazy deletion keys per block: 15859 ```
Please register or sign in to comment