Plumb URL into interval profiler tracing events (#34337)

Signed-off-by: Delan Azabani <dazabani@igalia.com>
This commit is contained in:
Delan Azabani 2024-11-22 21:31:00 +08:00 committed by GitHub
parent fd3af6ad04
commit 3a32af0c85
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 21 additions and 4 deletions

View file

@ -59,7 +59,12 @@ impl AutoEntryScript {
AutoEntryScript { AutoEntryScript {
global: DomRoot::from_ref(global), global: DomRoot::from_ref(global),
#[cfg(feature = "tracing")] #[cfg(feature = "tracing")]
span: tracing::info_span!("ScriptEvaluate", servo_profiling = true).entered(), span: tracing::info_span!(
"ScriptEvaluate",
servo_profiling = true,
url = global.get_url().to_string(),
)
.entered(),
} }
}) })
} }

View file

@ -18,10 +18,15 @@ pub mod time;
#[macro_export] #[macro_export]
macro_rules! time_profile { macro_rules! time_profile {
($category:expr, $meta:expr, $profiler_chan:expr, $($callback:tt)+) => {{ ($category:expr, $meta:expr, $profiler_chan:expr, $($callback:tt)+) => {{
let meta: Option<$crate::time::TimerMetadata> = $meta;
#[cfg(feature = "tracing")] #[cfg(feature = "tracing")]
let span = tracing::info_span!($category.variant_name(), servo_profiling = true); let span = tracing::info_span!(
$category.variant_name(),
servo_profiling = true,
url = meta.as_ref().map(|m| m.url.clone()),
);
#[cfg(not(feature = "tracing"))] #[cfg(not(feature = "tracing"))]
let span = (); let span = ();
$crate::time::profile($category, $meta, $profiler_chan, span, $($callback)+) $crate::time::profile($category, meta, $profiler_chan, span, $($callback)+)
}}; }};
} }

View file

@ -55,10 +55,16 @@ pub enum ProfilerMsg {
Exit(IpcSender<()>), Exit(IpcSender<()>),
} }
/// Usage sites of variants marked “Rust tracing only” are not visible to rust-analyzer.
#[repr(u32)] #[repr(u32)]
#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)] #[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
pub enum ProfilerCategory { pub enum ProfilerCategory {
/// The compositor is rasterising or presenting.
///
/// Not associated with a specific URL.
Compositing = 0x00, Compositing = 0x00,
/// The script thread is doing layout work.
LayoutPerform = 0x10, LayoutPerform = 0x10,
/// Events currently only used by Layout 2013. /// Events currently only used by Layout 2013.

View file

@ -50,7 +50,8 @@ pub fn init_tracing() {
// The servo.pftrace file can be uploaded to https://ui.perfetto.dev for analysis. // The servo.pftrace file can be uploaded to https://ui.perfetto.dev for analysis.
let file = std::fs::File::create("servo.pftrace").unwrap(); let file = std::fs::File::create("servo.pftrace").unwrap();
let perfetto_layer = tracing_perfetto::PerfettoLayer::new(std::sync::Mutex::new(file)) let perfetto_layer = tracing_perfetto::PerfettoLayer::new(std::sync::Mutex::new(file))
.with_filter_by_marker(|field_name| field_name == "servo_profiling"); .with_filter_by_marker(|field_name| field_name == "servo_profiling")
.with_debug_annotations(true);
subscriber.with(perfetto_layer) subscriber.with(perfetto_layer)
}; };