1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
// Copyright 2020 Parity Technologies (UK) Ltd. // This file is part of Substrate. // Substrate is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // Substrate is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with Substrate. If not, see <http://www.gnu.org/licenses/>. //! Substrate tracing primitives and macros. //! //! To trace functions or invidual code in Substrate, this crate provides [`tracing_span`] //! and [`enter_span`]. See the individual docs for how to use these macros. #![cfg_attr(not(feature = "std"), no_std)] #[cfg(feature = "std")] #[doc(hidden)] pub use tracing; /// Runs given code within a tracing span, measuring it's execution time. /// /// If tracing is not enabled, the code is still executed. /// /// # Example /// /// ``` /// sp_tracing::tracing_span! { /// "test-span"; /// 1 + 1; /// // some other complex code /// } /// ``` #[macro_export] macro_rules! tracing_span { ( $name:expr; $( $code:tt )* ) => { { $crate::enter_span!($name); $( $code )* } } } /// Enter a span. /// /// The span will be valid, until the scope is left. /// /// # Example /// /// ``` /// sp_tracing::enter_span!("test-span"); /// ``` #[macro_export] macro_rules! enter_span { ( $name:expr ) => { let __tracing_span__ = $crate::if_tracing!( $crate::tracing::span!($crate::tracing::Level::TRACE, $name) ); let __tracing_guard__ = $crate::if_tracing!(__tracing_span__.enter()); } } /// Generates the given code if the tracing dependency is enabled. #[macro_export] #[cfg(feature = "std")] macro_rules! if_tracing { ( $if:expr ) => {{ $if }} } #[macro_export] #[cfg(not(feature = "std"))] macro_rules! if_tracing { ( $if:expr ) => {{}} }