mirror of
https://github.com/servo/servo.git
synced 2025-08-04 13:10:20 +01:00
style: Add the traversal kind to the style stats.
This commit is contained in:
parent
d3e7f1f0f4
commit
58c6aad1f0
3 changed files with 16 additions and 3 deletions
|
@ -28,6 +28,7 @@ use stylist::Stylist;
|
||||||
use thread_state;
|
use thread_state;
|
||||||
use time;
|
use time;
|
||||||
use timer::Timer;
|
use timer::Timer;
|
||||||
|
use traversal::DomTraversal;
|
||||||
|
|
||||||
/// This structure is used to create a local style context from a shared one.
|
/// This structure is used to create a local style context from a shared one.
|
||||||
pub struct ThreadLocalStyleContextCreationInfo {
|
pub struct ThreadLocalStyleContextCreationInfo {
|
||||||
|
@ -118,6 +119,8 @@ pub struct TraversalStatistics {
|
||||||
pub styles_shared: u32,
|
pub styles_shared: u32,
|
||||||
/// Time spent in the traversal, in milliseconds.
|
/// Time spent in the traversal, in milliseconds.
|
||||||
pub traversal_time_ms: f64,
|
pub traversal_time_ms: f64,
|
||||||
|
/// Whether this was a parallel traversal.
|
||||||
|
pub is_parallel: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Implementation of Add to aggregate statistics across different threads.
|
/// 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,
|
elements_matched: self.elements_matched + other.elements_matched,
|
||||||
styles_shared: self.styles_shared + other.styles_shared,
|
styles_shared: self.styles_shared + other.styles_shared,
|
||||||
traversal_time_ms: 0.0,
|
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 {
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
debug_assert!(self.traversal_time_ms != 0.0, "should have set traversal time");
|
debug_assert!(self.traversal_time_ms != 0.0, "should have set traversal time");
|
||||||
try!(writeln!(f, "[PERF] perf block start"));
|
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_traversed,{}", self.elements_traversed));
|
||||||
try!(writeln!(f, "[PERF],elements_styled,{}", self.elements_styled));
|
try!(writeln!(f, "[PERF],elements_styled,{}", self.elements_styled));
|
||||||
try!(writeln!(f, "[PERF],elements_matched,{}", self.elements_matched));
|
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.
|
/// Computes the traversal time given the start time in seconds.
|
||||||
pub fn compute_traversal_time(&mut self, start: f64) {
|
pub fn finish<E, D>(&mut self, traversal: &D, start: f64)
|
||||||
|
where E: TElement,
|
||||||
|
D: DomTraversal<E>,
|
||||||
|
{
|
||||||
|
self.is_parallel = Some(traversal.is_parallel());
|
||||||
self.traversal_time_ms = (time::precise_time_s() - start) * 1000.0;
|
self.traversal_time_ms = (time::precise_time_s() - start) * 1000.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -86,7 +86,7 @@ pub fn traverse_dom<E, D>(traversal: &D,
|
||||||
Some(ref cx) => &cx.borrow().statistics + &acc,
|
Some(ref cx) => &cx.borrow().statistics + &acc,
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
aggregate.compute_traversal_time(start_time.unwrap());
|
aggregate.finish(traversal, start_time.unwrap());
|
||||||
println!("{}", aggregate);
|
println!("{}", aggregate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,7 +68,7 @@ pub fn traverse_dom<E, D>(traversal: &D,
|
||||||
// Dump statistics to stdout if requested.
|
// Dump statistics to stdout if requested.
|
||||||
if dump_stats {
|
if dump_stats {
|
||||||
let tlsc = tlc.borrow_mut();
|
let tlsc = tlc.borrow_mut();
|
||||||
tlsc.statistics.compute_traversal_time(start_time.unwrap());
|
tlsc.statistics.finish(traversal, start_time.unwrap());
|
||||||
println!("{}", tlsc.statistics);
|
println!("{}", tlsc.statistics);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue