// Copyright (C) Parity Technologies (UK) Ltd. and Dijital Kurdistan Tech Institute // SPDX-License-Identifier: Apache-2.0 // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. //! Benchmarking for the `pezcumulus-pezpallet-dmp-queue`. #![cfg(feature = "runtime-benchmarks")] use crate::*; use alloc::vec; use pezframe_benchmarking::v2::*; use pezframe_support::{pezpallet_prelude::*, traits::Hooks}; #[benchmarks] mod benchmarks { use super::*; /// This benchmark uses the proper maximal message length. #[benchmark] fn on_idle_good_msg() { let msg = vec![123; MaxDmpMessageLenOf::::get() as usize]; Pages::::insert(0, vec![(123, msg.clone())]); PageIndex::::put(PageIndexData { begin_used: 0, end_used: 1, overweight_count: 0 }); MigrationStatus::::set(MigrationState::StartedExport { next_begin_used: 0 }); #[block] { Pezpallet::::on_idle(0u32.into(), Weight::MAX); } assert_last_event::(Event::Exported { page: 0 }.into()); } /// This benchmark uses 64 KiB messages to emulate a large old message. #[benchmark] fn on_idle_large_msg() { let msg = vec![123; 1 << 16]; Pages::::insert(0, vec![(123, msg.clone())]); PageIndex::::put(PageIndexData { begin_used: 0, end_used: 1, overweight_count: 0 }); MigrationStatus::::set(MigrationState::StartedExport { next_begin_used: 0 }); #[block] { Pezpallet::::on_idle(0u32.into(), Weight::MAX); } assert_last_event::(Event::Exported { page: 0 }.into()); } #[benchmark] fn on_idle_overweight_good_msg() { let msg = vec![123; MaxDmpMessageLenOf::::get() as usize]; Overweight::::insert(0, (123, msg.clone())); PageIndex::::put(PageIndexData { begin_used: 0, end_used: 1, overweight_count: 1 }); MigrationStatus::::set(MigrationState::StartedOverweightExport { next_overweight_index: 0, }); #[block] { Pezpallet::::on_idle(0u32.into(), Weight::MAX); } assert_last_event::(Event::ExportedOverweight { index: 0 }.into()); } #[benchmark] fn on_idle_overweight_large_msg() { let msg = vec![123; 1 << 16]; Overweight::::insert(0, (123, msg.clone())); PageIndex::::put(PageIndexData { begin_used: 0, end_used: 1, overweight_count: 1 }); MigrationStatus::::set(MigrationState::StartedOverweightExport { next_overweight_index: 0, }); #[block] { Pezpallet::::on_idle(0u32.into(), Weight::MAX); } assert_last_event::(Event::ExportOverweightFailed { index: 0 }.into()); } impl_benchmark_test_suite!(Pezpallet, crate::mock::new_test_ext(), crate::mock::Runtime); } fn assert_last_event(generic_event: ::RuntimeEvent) { let events = pezframe_system::Pezpallet::::events(); let system_event: ::RuntimeEvent = generic_event.into(); let pezframe_system::EventRecord { event, .. } = events.last().expect("Event expected"); assert_eq!(event, &system_event.into()); }