mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
Add weighted telemetry probes for parallel restyles
This commit is contained in:
parent
d573081fe5
commit
337e5288c2
6 changed files with 84 additions and 26 deletions
|
@ -7,7 +7,7 @@
|
|||
|
||||
#![deny(missing_docs)]
|
||||
|
||||
use context::{StyleContext, ThreadLocalStyleContext};
|
||||
use context::{StyleContext, ThreadLocalStyleContext, TraversalStatistics};
|
||||
use dom::{SendNode, TElement, TNode};
|
||||
use parallel;
|
||||
use parallel::{DispatchMode, WORK_UNIT_MAX};
|
||||
|
@ -26,12 +26,14 @@ use traversal::{DomTraversal, PerLevelTraversalData, PreTraverseToken};
|
|||
/// parallel traversal would parallelize it. If a thread pool is provided, we
|
||||
/// then transfer control over to the parallel traversal.
|
||||
///
|
||||
/// Returns true if the traversal was parallel
|
||||
/// Returns true if the traversal was parallel, and also returns the statistics
|
||||
/// object containing information on nodes traversed (on nightly only). Not
|
||||
/// all of its fields will be initialized since we don't call finish().
|
||||
pub fn traverse_dom<E, D>(
|
||||
traversal: &D,
|
||||
token: PreTraverseToken<E>,
|
||||
pool: Option<&rayon::ThreadPool>
|
||||
) -> bool
|
||||
) -> (bool, Option<TraversalStatistics>)
|
||||
where
|
||||
E: TElement,
|
||||
D: DomTraversal<E>,
|
||||
|
@ -40,6 +42,7 @@ where
|
|||
token.traversal_root().expect("Should've ensured we needed to traverse");
|
||||
|
||||
let dump_stats = traversal.shared_context().options.dump_style_statistics;
|
||||
let is_nightly = traversal.shared_context().options.is_nightly();
|
||||
let mut used_parallel = false;
|
||||
let start_time = if dump_stats { Some(time::precise_time_s()) } else { None };
|
||||
|
||||
|
@ -112,9 +115,9 @@ where
|
|||
nodes_remaining_at_current_depth = discovered.len();
|
||||
}
|
||||
}
|
||||
|
||||
// Dump statistics to stdout if requested.
|
||||
if dump_stats {
|
||||
let mut maybe_stats = None;
|
||||
// Accumulate statistics
|
||||
if dump_stats || is_nightly {
|
||||
let mut aggregate =
|
||||
mem::replace(&mut context.thread_local.statistics, Default::default());
|
||||
let parallel = maybe_tls.is_some();
|
||||
|
@ -127,11 +130,14 @@ where
|
|||
}
|
||||
});
|
||||
}
|
||||
aggregate.finish(traversal, parallel, start_time.unwrap());
|
||||
if aggregate.is_large_traversal() {
|
||||
println!("{}", aggregate);
|
||||
|
||||
// dump to stdout if requested
|
||||
if dump_stats && aggregate.is_large_traversal() {
|
||||
aggregate.finish(traversal, parallel, start_time.unwrap());
|
||||
println!("{}", aggregate);
|
||||
}
|
||||
maybe_stats = Some(aggregate);
|
||||
}
|
||||
|
||||
used_parallel
|
||||
(used_parallel, maybe_stats)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue