diff options
author | bors-servo <release+servo@mozilla.com> | 2014-01-29 12:28:39 -0800 |
---|---|---|
committer | bors-servo <release+servo@mozilla.com> | 2014-01-29 12:28:39 -0800 |
commit | 7e3075522dd7584f6f898041536e7706c4775f4d (patch) | |
tree | 1abc9cedc80d90352e3641ae41c37c59cda1c81d | |
parent | 6c63de1c03a99d55d1718829f9ba23dd09c69b54 (diff) | |
parent | 21656b874d2632b79cf9dbdd322e330e72d2cada (diff) | |
download | servo-7e3075522dd7584f6f898041536e7706c4775f4d.tar.gz servo-7e3075522dd7584f6f898041536e7706c4775f4d.zip |
auto merge of #1587 : pcwalton/servo/profile-damage, r=larsbergstrom
WebKit calls it) into one supercategory in the profiler.
r? @larsbergstrom
-rw-r--r-- | src/components/main/layout/layout_task.rs | 70 | ||||
-rw-r--r-- | src/components/util/time.rs | 21 |
2 files changed, 54 insertions, 37 deletions
diff --git a/src/components/main/layout/layout_task.rs b/src/components/main/layout/layout_task.rs index 9315b225781..61af5250de1 100644 --- a/src/components/main/layout/layout_task.rs +++ b/src/components/main/layout/layout_task.rs @@ -508,47 +508,53 @@ impl LayoutTask { // Create a layout context for use throughout the following passes. let mut layout_ctx = self.build_layout_context(node); - // Initialize layout data for each node. - // - // FIXME: This is inefficient. We don't need an entire traversal to do this! - profile(time::LayoutAuxInitCategory, self.profiler_chan.clone(), || { - node.initialize_style_for_subtree(self.chan.clone()); - }); + let mut layout_root = profile(time::LayoutStyleRecalcCategory, + self.profiler_chan.clone(), + || { + // Initialize layout data for each node. + // + // FIXME: This is inefficient. We don't need an entire traversal to do this! + profile(time::LayoutAuxInitCategory, self.profiler_chan.clone(), || { + node.initialize_style_for_subtree(self.chan.clone()); + }); - // Perform CSS selector matching if necessary. - match data.damage.level { - ReflowDocumentDamage => {} - _ => { - profile(time::LayoutSelectorMatchCategory, self.profiler_chan.clone(), || { - match self.parallel_traversal { - None => node.match_subtree(self.stylist), - Some(ref mut traversal) => { - parallel::match_and_cascade_subtree(node, &mut layout_ctx, traversal) + // Perform CSS selector matching if necessary. + match data.damage.level { + ReflowDocumentDamage => {} + _ => { + profile(time::LayoutSelectorMatchCategory, self.profiler_chan.clone(), || { + match self.parallel_traversal { + None => node.match_subtree(self.stylist), + Some(ref mut traversal) => { + parallel::match_and_cascade_subtree(node, &mut layout_ctx, traversal) + } } - } - }); - - // If we're doing layout sequentially, do the cascade separately. - // - // TODO(pcwalton): Integrate this into `match_subtree`. - if self.parallel_traversal.is_none() { - profile(time::LayoutSelectorCascadeCategory, self.profiler_chan.clone(), || { - node.cascade_subtree(None); }); + + // If we're doing layout sequentially, do the cascade separately. + // + // TODO(pcwalton): Integrate this into `match_subtree`. + if self.parallel_traversal.is_none() { + profile(time::LayoutSelectorCascadeCategory, self.profiler_chan.clone(), || { + node.cascade_subtree(None); + }); + } } } - } - // Construct the flow tree. - let mut layout_root = profile(time::LayoutTreeBuilderCategory, - self.profiler_chan.clone(), - || self.construct_flow_tree(&mut layout_ctx, *node)); + // Construct the flow tree. + profile(time::LayoutTreeBuilderCategory, + self.profiler_chan.clone(), + || self.construct_flow_tree(&mut layout_ctx, *node)) + }); // Propagate damage. - layout_root.traverse_preorder(&mut PropagateDamageTraversal { - all_style_damage: all_style_damage + profile(time::LayoutDamagePropagateCategory, self.profiler_chan.clone(), || { + layout_root.traverse_preorder(&mut PropagateDamageTraversal { + all_style_damage: all_style_damage + }); + layout_root.traverse_postorder(&mut ComputeDamageTraversal.clone()); }); - layout_root.traverse_postorder(&mut ComputeDamageTraversal.clone()); // Perform the primary layout passes over the flow tree to compute the locations of all // the boxes. diff --git a/src/components/util/time.rs b/src/components/util/time.rs index 905f24afdab..049cc64e9f0 100644 --- a/src/components/util/time.rs +++ b/src/components/util/time.rs @@ -50,10 +50,12 @@ pub enum ProfilerCategory { CompositingCategory, LayoutQueryCategory, LayoutPerformCategory, + LayoutStyleRecalcCategory, LayoutAuxInitCategory, LayoutSelectorMatchCategory, LayoutSelectorCascadeCategory, LayoutTreeBuilderCategory, + LayoutDamagePropagateCategory, LayoutMainCategory, LayoutParallelWarmupCategory, LayoutShapingCategory, @@ -78,6 +80,7 @@ impl ProfilerCategory { buckets.insert(CompositingCategory, ~[]); buckets.insert(LayoutQueryCategory, ~[]); buckets.insert(LayoutPerformCategory, ~[]); + buckets.insert(LayoutStyleRecalcCategory, ~[]); buckets.insert(LayoutAuxInitCategory, ~[]); buckets.insert(LayoutSelectorMatchCategory, ~[]); buckets.insert(LayoutSelectorCascadeCategory, ~[]); @@ -85,6 +88,7 @@ impl ProfilerCategory { buckets.insert(LayoutMainCategory, ~[]); buckets.insert(LayoutParallelWarmupCategory, ~[]); buckets.insert(LayoutShapingCategory, ~[]); + buckets.insert(LayoutDamagePropagateCategory, ~[]); buckets.insert(LayoutDispListBuildCategory, ~[]); buckets.insert(GfxRegenAvailableFontsCategory, ~[]); buckets.insert(RenderingDrawingCategory, ~[]); @@ -98,9 +102,16 @@ impl ProfilerCategory { // and should be printed to indicate this pub fn format(self) -> ~str { let padding = match self { - LayoutAuxInitCategory | LayoutSelectorMatchCategory | LayoutSelectorCascadeCategory | - LayoutTreeBuilderCategory | LayoutMainCategory | LayoutDispListBuildCategory | - LayoutShapingCategory | LayoutParallelWarmupCategory => " - ", + LayoutStyleRecalcCategory | + LayoutMainCategory | + LayoutDispListBuildCategory | + LayoutShapingCategory | + LayoutDamagePropagateCategory => "+ ", + LayoutAuxInitCategory | + LayoutSelectorCascadeCategory | + LayoutParallelWarmupCategory | + LayoutSelectorMatchCategory | + LayoutTreeBuilderCategory => "| + ", _ => "" }; format!("{:s}{:?}", padding, self) @@ -190,7 +201,7 @@ impl Profiler { } fn print_buckets(&mut self) { - println(format!("{:31s} {:15s} {:15s} {:15s} {:15s} {:15s}", + println(format!("{:39s} {:15s} {:15s} {:15s} {:15s} {:15s}", "_category_", "_mean (ms)_", "_median (ms)_", "_min (ms)_", "_max (ms)_", "_bucket size_")); for (category, data) in self.buckets.iter() { @@ -210,7 +221,7 @@ impl Profiler { data[data_len / 2], data.iter().min().unwrap(), data.iter().max().unwrap()); - println(format!("{:-30s}: {:15.4f} {:15.4f} {:15.4f} {:15.4f} {:15u}", + println(format!("{:-35s}: {:15.4f} {:15.4f} {:15.4f} {:15.4f} {:15u}", category.format(), mean, median, min, max, data_len)); } } |