/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ //! This module contains APIs for the `profile` crate used generically in the //! rest of Servo. These APIs are here instead of in `profile` so that these //! modules won't have to depend on `profile`. #![deny(unsafe_code)] pub mod ipc; pub mod mem; pub mod time; /// Measure the given callback with the time profiler and (if enabled) tracing. /// /// `$category` must be const, because we use it to derive the span name. #[macro_export] macro_rules! time_profile { ($category:expr, $meta:expr, $profiler_chan:expr, $($callback:tt)+) => {{ let meta: Option<$crate::time::TimerMetadata> = $meta; #[cfg(feature = "tracing")] let span = tracing::info_span!( $category.variant_name(), servo_profiling = true, url = meta.as_ref().map(|m| m.url.clone()), ); #[cfg(not(feature = "tracing"))] let span = (); $crate::time::profile($category, meta, $profiler_chan, span, $($callback)+) }}; }