From 74ce5bd0ae1c8b4b4e3202716712596749d2995e Mon Sep 17 00:00:00 2001 From: Nathan Froyd Date: Tue, 9 May 2017 17:21:04 -0400 Subject: [PATCH] register stylo threads with the gecko profiler Now that we require rayon 0.7, we can register start and stop handlers that take care of dealing with the Gecko profiler for rayon threads in the style thread pool. --- components/style/gecko/global_style_data.rs | 28 +++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/components/style/gecko/global_style_data.rs b/components/style/gecko/global_style_data.rs index 17a317345d19..b1f62b0eac02 100644 --- a/components/style/gecko/global_style_data.rs +++ b/components/style/gecko/global_style_data.rs @@ -5,11 +5,13 @@ //! Global style data use context::StyleSystemOptions; +use gecko_bindings::bindings::{Gecko_RegisterProfilerThread, Gecko_UnregisterProfilerThread}; use num_cpus; use rayon; use shared_lock::SharedRwLock; use std::cmp; use std::env; +use std::ffi::CString; /// Global style data pub struct GlobalStyleData { @@ -26,6 +28,25 @@ pub struct GlobalStyleData { pub options: StyleSystemOptions, } +fn thread_name(index: usize) -> String { + format!("StyleThread#{}", index) +} + +fn thread_startup(index: usize) { + let name = thread_name(index); + let name = CString::new(name).unwrap(); + unsafe { + // Gecko_RegisterProfilerThread copies the passed name here. + Gecko_RegisterProfilerThread(name.as_ptr()); + } +} + +fn thread_shutdown(_: usize) { + unsafe { + Gecko_UnregisterProfilerThread(); + } +} + lazy_static! { /// Global style data pub static ref GLOBAL_STYLE_DATA: GlobalStyleData = { @@ -39,8 +60,11 @@ lazy_static! { let pool = if num_threads <= 1 { None } else { - let configuration = - rayon::Configuration::new().num_threads(num_threads); + let configuration = rayon::Configuration::new() + .num_threads(num_threads) + .thread_name(thread_name) + .start_handler(thread_startup) + .exit_handler(thread_shutdown); let pool = rayon::ThreadPool::new(configuration).ok(); pool };