зеркало из https://github.com/mozilla/gecko-dev.git
servo: Merge #4234 - Change time::profile's meta booleans to enums (from tterribe:issue4158); r=metajack
This makes these parameters self-documenting. This patch does not attempt to push those enums into the data structures that feed calls to this function. Fixes #4158. Source-Repo: https://github.com/servo/servo Source-Revision: bc7b5b35b44e82dadb35242e39b190b3d1fcba10
This commit is contained in:
Родитель
5fd40c621b
Коммит
658bba4ee7
|
@ -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();
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче