aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/layout/layout_task.rs30
-rw-r--r--components/layout/parallel.rs14
-rw-r--r--components/util/time.rs20
3 files changed, 41 insertions, 23 deletions
diff --git a/components/layout/layout_task.rs b/components/layout/layout_task.rs
index 6f030d98ea6..5a7b7011f99 100644
--- a/components/layout/layout_task.rs
+++ b/components/layout/layout_task.rs
@@ -54,7 +54,7 @@ use servo_util::opts;
use servo_util::smallvec::{SmallVec, SmallVec1, VecLike};
use servo_util::task::spawn_named_with_send_on_failure;
use servo_util::task_state;
-use servo_util::time::{TimeProfilerChan, profile};
+use servo_util::time::{TimeProfilerChan, profile, TimeRootWindow, TimeIFrame, TimeIncremental, TimeFirstReflow};
use servo_util::time;
use servo_util::workqueue::WorkQueue;
use std::cell::Cell;
@@ -396,7 +396,9 @@ impl LayoutTask {
},
ReflowMsg(data) => {
profile(time::LayoutPerformCategory,
- Some((&data.url, data.iframe, self.first_reflow.get())),
+ Some((&data.url,
+ if data.iframe { TimeIFrame } else { TimeRootWindow },
+ if self.first_reflow.get() { TimeFirstReflow } else { TimeIncremental })),
self.time_profiler_chan.clone(),
|| self.handle_reflow(&*data, possibly_locked_rw_data));
},
@@ -562,8 +564,8 @@ impl LayoutTask {
// operation out.
parallel::traverse_flow_tree_preorder(layout_root,
&data.url,
- data.iframe,
- self.first_reflow.get(),
+ if data.iframe { TimeIFrame } else { TimeRootWindow },
+ if self.first_reflow.get() { TimeFirstReflow } else { TimeIncremental },
self.time_profiler_chan.clone(),
shared_layout_context,
traversal);
@@ -612,7 +614,9 @@ impl LayoutTask {
rw_data: &mut RWGuard<'a>) {
let writing_mode = flow::base(layout_root.deref()).writing_mode;
profile(time::LayoutDispListBuildCategory,
- Some((&data.url, data.iframe, self.first_reflow.get())),
+ Some((&data.url,
+ if data.iframe { TimeIFrame } else { TimeRootWindow },
+ if self.first_reflow.get() { TimeFirstReflow } else { TimeIncremental })),
self.time_profiler_chan.clone(),
|| {
shared_layout_ctx.dirty =
@@ -632,8 +636,8 @@ impl LayoutTask {
Some(ref mut traversal) => {
parallel::build_display_list_for_subtree(layout_root,
&data.url,
- data.iframe,
- self.first_reflow.get(),
+ if data.iframe { TimeIFrame } else { TimeRootWindow },
+ if self.first_reflow.get() { TimeFirstReflow } else { TimeIncremental },
self.time_profiler_chan.clone(),
shared_layout_ctx,
traversal);
@@ -758,8 +762,8 @@ impl LayoutTask {
let mut layout_root = profile(time::LayoutStyleRecalcCategory,
Some((&data.url,
- data.iframe,
- self.first_reflow.get())),
+ if data.iframe { TimeIFrame } else { TimeRootWindow },
+ if self.first_reflow.get() { TimeFirstReflow } else { TimeIncremental })),
self.time_profiler_chan.clone(),
|| {
// Perform CSS selector matching and flow construction.
@@ -777,7 +781,9 @@ impl LayoutTask {
});
profile(time::LayoutRestyleDamagePropagation,
- Some((&data.url, data.iframe, self.first_reflow.get())),
+ Some((&data.url,
+ if data.iframe { TimeIFrame } else { TimeRootWindow },
+ if self.first_reflow.get() { TimeFirstReflow } else { TimeIncremental })),
self.time_profiler_chan.clone(),
|| {
if opts::get().nonincremental_layout ||
@@ -798,7 +804,9 @@ impl LayoutTask {
// Perform the primary layout passes over the flow tree to compute the locations of all
// the boxes.
profile(time::LayoutMainCategory,
- Some((&data.url, data.iframe, self.first_reflow.get())),
+ Some((&data.url,
+ if data.iframe { TimeIFrame } else { TimeRootWindow },
+ if self.first_reflow.get() { TimeFirstReflow } else { TimeIncremental })),
self.time_profiler_chan.clone(),
|| {
let rw_data = rw_data.deref_mut();
diff --git a/components/layout/parallel.rs b/components/layout/parallel.rs
index d0dbf469c2b..6d1ce6643c8 100644
--- a/components/layout/parallel.rs
+++ b/components/layout/parallel.rs
@@ -20,7 +20,7 @@ use wrapper::{PostorderNodeMutTraversal, UnsafeLayoutNode};
use wrapper::{PreorderDomTraversal, PostorderDomTraversal};
use servo_util::opts;
-use servo_util::time::{TimeProfilerChan, profile};
+use servo_util::time::{TimeProfilerChan, profile, TimerMetadataFrameType, TimerMetadataReflowType};
use servo_util::time;
use servo_util::workqueue::{WorkQueue, WorkUnit, WorkerProxy};
use std::mem;
@@ -423,8 +423,8 @@ pub fn traverse_dom_preorder(root: LayoutNode,
pub fn traverse_flow_tree_preorder(root: &mut FlowRef,
url: &Url,
- iframe: bool,
- first_reflow: bool,
+ iframe: TimerMetadataFrameType,
+ reflow_type: TimerMetadataReflowType,
time_profiler_chan: TimeProfilerChan,
shared_layout_context: &SharedLayoutContext,
queue: &mut WorkQueue<*const SharedLayoutContext,UnsafeFlow>) {
@@ -436,7 +436,7 @@ pub fn traverse_flow_tree_preorder(root: &mut FlowRef,
queue.data = shared_layout_context as *const _;
- profile(time::LayoutParallelWarmupCategory, Some((url, iframe, first_reflow)), time_profiler_chan, || {
+ profile(time::LayoutParallelWarmupCategory, Some((url, iframe, reflow_type)), time_profiler_chan, || {
queue.push(WorkUnit {
fun: assign_inline_sizes,
data: mut_owned_flow_to_unsafe_flow(root),
@@ -450,14 +450,14 @@ pub fn traverse_flow_tree_preorder(root: &mut FlowRef,
pub fn build_display_list_for_subtree(root: &mut FlowRef,
url: &Url,
- iframe: bool,
- first_reflow: bool,
+ iframe: TimerMetadataFrameType,
+ reflow_type: TimerMetadataReflowType,
time_profiler_chan: TimeProfilerChan,
shared_layout_context: &SharedLayoutContext,
queue: &mut WorkQueue<*const SharedLayoutContext,UnsafeFlow>) {
queue.data = shared_layout_context as *const _;
- profile(time::LayoutParallelWarmupCategory, Some((url, iframe, first_reflow)), time_profiler_chan, || {
+ profile(time::LayoutParallelWarmupCategory, Some((url, iframe, reflow_type)), time_profiler_chan, || {
queue.push(WorkUnit {
fun: compute_absolute_positions,
data: mut_owned_flow_to_unsafe_flow(root),
diff --git a/components/util/time.rs b/components/util/time.rs
index 6c244caf141..4fdc23b023d 100644
--- a/components/util/time.rs
+++ b/components/util/time.rs
@@ -246,10 +246,20 @@ impl TimeProfiler {
}
}
+#[deriving(Eq, PartialEq)]
+pub enum TimerMetadataFrameType {
+ TimeRootWindow,
+ TimeIFrame,
+}
+
+#[deriving(Eq, PartialEq)]
+pub enum TimerMetadataReflowType {
+ TimeIncremental,
+ TimeFirstReflow,
+}
pub fn profile<T>(category: TimeProfilerCategory,
- // url, iframe?, first reflow?
- meta: Option<(&Url, bool, bool)>,
+ meta: Option<(&Url, TimerMetadataFrameType, TimerMetadataReflowType)>,
time_profiler_chan: TimeProfilerChan,
callback: || -> T)
-> T {
@@ -257,11 +267,11 @@ pub fn profile<T>(category: TimeProfilerCategory,
let val = callback();
let end_time = precise_time_ns();
let ms = (end_time - start_time) as f64 / 1000000f64;
- let meta = meta.map(|(url, iframe, first_reflow)|
+ let meta = meta.map(|(url, iframe, reflow_type)|
TimerMetadata {
url: url.serialize(),
- iframe: iframe,
- incremental: !first_reflow,
+ iframe: iframe == TimeIFrame,
+ incremental: reflow_type == TimeIncremental,
});
time_profiler_chan.send(TimeMsg((category, meta), ms));
return val;