From 58c6aad1f05f139df2dd1f622ffb4f4964fbb447 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Fri, 10 Mar 2017 03:02:35 +0100 Subject: [PATCH] style: Add the traversal kind to the style stats. --- components/style/context.rs | 15 ++++++++++++++- components/style/parallel.rs | 2 +- components/style/sequential.rs | 2 +- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/components/style/context.rs b/components/style/context.rs index 764d68ea1de..75e71bd844b 100644 --- a/components/style/context.rs +++ b/components/style/context.rs @@ -28,6 +28,7 @@ use stylist::Stylist; use thread_state; use time; use timer::Timer; +use traversal::DomTraversal; /// This structure is used to create a local style context from a shared one. pub struct ThreadLocalStyleContextCreationInfo { @@ -118,6 +119,8 @@ pub struct TraversalStatistics { pub styles_shared: u32, /// Time spent in the traversal, in milliseconds. pub traversal_time_ms: f64, + /// Whether this was a parallel traversal. + pub is_parallel: Option, } /// Implementation of Add to aggregate statistics across different threads. @@ -132,6 +135,7 @@ impl<'a> Add for &'a TraversalStatistics { elements_matched: self.elements_matched + other.elements_matched, styles_shared: self.styles_shared + other.styles_shared, traversal_time_ms: 0.0, + is_parallel: None, } } } @@ -142,6 +146,11 @@ impl fmt::Display for TraversalStatistics { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { debug_assert!(self.traversal_time_ms != 0.0, "should have set traversal time"); try!(writeln!(f, "[PERF] perf block start")); + try!(writeln!(f, "[PERF],traversal,{}", if self.is_parallel.unwrap() { + "parallel" + } else { + "sequential" + })); try!(writeln!(f, "[PERF],elements_traversed,{}", self.elements_traversed)); try!(writeln!(f, "[PERF],elements_styled,{}", self.elements_styled)); try!(writeln!(f, "[PERF],elements_matched,{}", self.elements_matched)); @@ -170,7 +179,11 @@ impl TraversalStatistics { } /// Computes the traversal time given the start time in seconds. - pub fn compute_traversal_time(&mut self, start: f64) { + pub fn finish(&mut self, traversal: &D, start: f64) + where E: TElement, + D: DomTraversal, + { + self.is_parallel = Some(traversal.is_parallel()); self.traversal_time_ms = (time::precise_time_s() - start) * 1000.0; } } diff --git a/components/style/parallel.rs b/components/style/parallel.rs index 8f4a1d1b92d..7f69ce9a01b 100644 --- a/components/style/parallel.rs +++ b/components/style/parallel.rs @@ -86,7 +86,7 @@ pub fn traverse_dom(traversal: &D, Some(ref cx) => &cx.borrow().statistics + &acc, } }); - aggregate.compute_traversal_time(start_time.unwrap()); + aggregate.finish(traversal, start_time.unwrap()); println!("{}", aggregate); } } diff --git a/components/style/sequential.rs b/components/style/sequential.rs index 8e8f0f99b8f..0cb068e6f03 100644 --- a/components/style/sequential.rs +++ b/components/style/sequential.rs @@ -68,7 +68,7 @@ pub fn traverse_dom(traversal: &D, // Dump statistics to stdout if requested. if dump_stats { let tlsc = tlc.borrow_mut(); - tlsc.statistics.compute_traversal_time(start_time.unwrap()); + tlsc.statistics.finish(traversal, start_time.unwrap()); println!("{}", tlsc.statistics); } }