From 1602f8dd2d20bf7b9a3afaf7d05d5f2bfc95c78c Mon Sep 17 00:00:00 2001
From: Guillaume Thiolliere <gui.thiolliere@gmail.com>
Date: Tue, 23 Mar 2021 15:53:46 +0100
Subject: [PATCH] Add tracing logic in pallet macro for hooks and dispatchables
 (#8305)

* span in hooks

* add span for dispatchable

* Update frame/support/src/lib.rs

* Update frame/support/src/lib.rs

Co-authored-by: David <dvdplm@gmail.com>

Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com>
Co-authored-by: David <dvdplm@gmail.com>
---
 .../frame/support/procedural/src/pallet/expand/call.rs |  8 ++++++--
 .../support/procedural/src/pallet/expand/hooks.rs      | 10 ++++++++++
 substrate/frame/support/src/lib.rs                     |  3 +++
 3 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/substrate/frame/support/procedural/src/pallet/expand/call.rs b/substrate/frame/support/procedural/src/pallet/expand/call.rs
index 137e055405a..295cf14d37f 100644
--- a/substrate/frame/support/procedural/src/pallet/expand/call.rs
+++ b/substrate/frame/support/procedural/src/pallet/expand/call.rs
@@ -162,9 +162,13 @@ pub fn expand_call(def: &mut Def) -> proc_macro2::TokenStream {
 			) -> #frame_support::dispatch::DispatchResultWithPostInfo {
 				match self {
 					#(
-						Self::#fn_name( #( #args_name, )* ) =>
+						Self::#fn_name( #( #args_name, )* ) => {
+							#frame_support::sp_tracing::enter_span!(
+								#frame_support::sp_tracing::trace_span!(stringify!(#fn_name))
+							);
 							<#pallet_ident<#type_use_gen>>::#fn_name(origin, #( #args_name, )* )
-								.map(Into::into).map_err(Into::into),
+								.map(Into::into).map_err(Into::into)
+						},
 					)*
 					Self::__Ignore(_, _) => {
 						let _ = origin; // Use origin for empty Call enum
diff --git a/substrate/frame/support/procedural/src/pallet/expand/hooks.rs b/substrate/frame/support/procedural/src/pallet/expand/hooks.rs
index 3976f2c602d..2d12d5ecf9d 100644
--- a/substrate/frame/support/procedural/src/pallet/expand/hooks.rs
+++ b/substrate/frame/support/procedural/src/pallet/expand/hooks.rs
@@ -55,6 +55,9 @@ pub fn expand_hooks(def: &mut Def) -> proc_macro2::TokenStream {
 			for #pallet_ident<#type_use_gen> #where_clause
 		{
 			fn on_finalize(n: <T as #frame_system::Config>::BlockNumber) {
+				#frame_support::sp_tracing::enter_span!(
+					#frame_support::sp_tracing::trace_span!("on_finalize")
+				);
 				<
 					Self as #frame_support::traits::Hooks<
 						<T as #frame_system::Config>::BlockNumber
@@ -86,6 +89,9 @@ pub fn expand_hooks(def: &mut Def) -> proc_macro2::TokenStream {
 			fn on_initialize(
 				n: <T as #frame_system::Config>::BlockNumber
 			) -> #frame_support::weights::Weight {
+				#frame_support::sp_tracing::enter_span!(
+					#frame_support::sp_tracing::trace_span!("on_initialize")
+				);
 				<
 					Self as #frame_support::traits::Hooks<
 						<T as #frame_system::Config>::BlockNumber
@@ -99,6 +105,10 @@ pub fn expand_hooks(def: &mut Def) -> proc_macro2::TokenStream {
 			for #pallet_ident<#type_use_gen> #where_clause
 		{
 			fn on_runtime_upgrade() -> #frame_support::weights::Weight {
+				#frame_support::sp_tracing::enter_span!(
+					#frame_support::sp_tracing::trace_span!("on_runtime_update")
+				);
+
 				// log info about the upgrade.
 				let new_storage_version = #frame_support::crate_to_pallet_version!();
 				let pallet_name = <
diff --git a/substrate/frame/support/src/lib.rs b/substrate/frame/support/src/lib.rs
index d0d034a55f5..220e7a06bdf 100644
--- a/substrate/frame/support/src/lib.rs
+++ b/substrate/frame/support/src/lib.rs
@@ -1229,6 +1229,9 @@ pub mod pallet_prelude {
 /// NOTE: OnRuntimeUpgrade is implemented with `Hooks::on_runtime_upgrade` and some additional
 /// logic. E.g. logic to write pallet version into storage.
 ///
+/// NOTE: The macro also adds some tracing logic when implementing the above traits. The following
+///  hooks emit traces: `on_initialize`, `on_finalize` and `on_runtime_upgrade`.
+///
 /// # Call: `#[pallet::call]` mandatory
 ///
 /// Implementation of pallet dispatchables.
-- 
GitLab