Format metrics #21373

This commit is contained in:
kingdido999 2018-09-11 15:04:41 +08:00
parent 795e7f6002
commit b3b188a6ff

View file

@ -64,14 +64,14 @@ fn set_metric<U: ProgressiveWebMetric>(
category: ProfilerCategory, category: ProfilerCategory,
attr: &Cell<Option<u64>>, attr: &Cell<Option<u64>>,
metric_time: Option<u64>, metric_time: Option<u64>,
url: &ServoUrl) url: &ServoUrl,
{ ) {
let navigation_start = match pwm.get_navigation_start() { let navigation_start = match pwm.get_navigation_start() {
Some(time) => time, Some(time) => time,
None => { None => {
warn!("Trying to set metric before navigation start"); warn!("Trying to set metric before navigation start");
return; return;
} },
}; };
let now = match metric_time { let now = match metric_time {
Some(time) => time, Some(time) => time,
@ -96,10 +96,12 @@ fn set_metric<U: ProgressiveWebMetric>(
// Print the metric to console if the print-pwm option was given. // Print the metric to console if the print-pwm option was given.
if opts::get().print_pwm { if opts::get().print_pwm {
println!("Navigation start: {}", pwm.get_navigation_start().unwrap().to_ms()); println!(
"Navigation start: {}",
pwm.get_navigation_start().unwrap().to_ms()
);
println!("{:?} {:?} {:?}", url, metric_type, time.to_ms()); println!("{:?} {:?} {:?}", url, metric_type, time.to_ms());
} }
} }
// spec: https://github.com/WICG/time-to-interactive // spec: https://github.com/WICG/time-to-interactive
@ -120,7 +122,7 @@ pub struct InteractiveMetrics {
time_to_interactive: Cell<Option<u64>>, time_to_interactive: Cell<Option<u64>>,
#[ignore_malloc_size_of = "can't measure channels"] #[ignore_malloc_size_of = "can't measure channels"]
time_profiler_chan: ProfilerChan, time_profiler_chan: ProfilerChan,
url: ServoUrl url: ServoUrl,
} }
#[derive(Clone, Copy, Debug, MallocSizeOf)] #[derive(Clone, Copy, Debug, MallocSizeOf)]
@ -128,7 +130,6 @@ pub struct InteractiveWindow {
start: u64, start: u64,
} }
impl InteractiveWindow { impl InteractiveWindow {
pub fn new() -> InteractiveWindow { pub fn new() -> InteractiveWindow {
InteractiveWindow { InteractiveWindow {
@ -194,11 +195,8 @@ impl InteractiveMetrics {
// can set either dlc or tti first, but both must be set to actually calc metric // can set either dlc or tti first, but both must be set to actually calc metric
// when the second is set, set_tti is called with appropriate time // when the second is set, set_tti is called with appropriate time
pub fn maybe_set_tti<T>( pub fn maybe_set_tti<T>(&self, profiler_metadata_factory: &T, metric: InteractiveFlag)
&self, where
profiler_metadata_factory: &T,
metric: InteractiveFlag,
) where
T: ProfilerMetadataFactory, T: ProfilerMetadataFactory,
{ {
if self.get_tti().is_some() { if self.get_tti().is_some() {
@ -212,7 +210,7 @@ impl InteractiveMetrics {
let dcl = self.dom_content_loaded.get(); let dcl = self.dom_content_loaded.get();
let mta = self.main_thread_available.get(); let mta = self.main_thread_available.get();
let (dcl, mta) = match (dcl, mta) { let (dcl, mta) = match (dcl, mta) {
(Some(dcl), Some(mta)) => (dcl, mta), (Some(dcl), Some(mta)) => (dcl, mta),
_ => return, _ => return,
}; };
let metric_time = match dcl.partial_cmp(&mta) { let metric_time = match dcl.partial_cmp(&mta) {
@ -249,7 +247,7 @@ impl ProgressiveWebMetric for InteractiveMetrics {
self.navigation_start = Some(time); self.navigation_start = Some(time);
} }
fn send_queued_constellation_msg(&self, _name: ProgressiveWebMetricType, _time: u64) { } fn send_queued_constellation_msg(&self, _name: ProgressiveWebMetricType, _time: u64) {}
fn get_time_profiler_chan(&self) -> &ProfilerChan { fn get_time_profiler_chan(&self) -> &ProfilerChan {
&self.time_profiler_chan &self.time_profiler_chan
@ -279,8 +277,8 @@ impl PaintTimeMetrics {
time_profiler_chan: ProfilerChan, time_profiler_chan: ProfilerChan,
constellation_chan: IpcSender<LayoutMsg>, constellation_chan: IpcSender<LayoutMsg>,
script_chan: IpcSender<ConstellationControlMsg>, script_chan: IpcSender<ConstellationControlMsg>,
url: ServoUrl) url: ServoUrl,
-> PaintTimeMetrics { ) -> PaintTimeMetrics {
PaintTimeMetrics { PaintTimeMetrics {
pending_metrics: RefCell::new(HashMap::new()), pending_metrics: RefCell::new(HashMap::new()),
navigation_start: None, navigation_start: None,
@ -317,17 +315,22 @@ impl PaintTimeMetrics {
&self, &self,
profiler_metadata_factory: &T, profiler_metadata_factory: &T,
epoch: Epoch, epoch: Epoch,
display_list: &DisplayList) display_list: &DisplayList,
where T: ProfilerMetadataFactory { ) where
T: ProfilerMetadataFactory,
{
if self.first_paint.get().is_some() && self.first_contentful_paint.get().is_some() { if self.first_paint.get().is_some() && self.first_contentful_paint.get().is_some() {
// If we already set all paint metrics, we just bail out. // If we already set all paint metrics, we just bail out.
return; return;
} }
self.pending_metrics.borrow_mut().insert(epoch, ( self.pending_metrics.borrow_mut().insert(
profiler_metadata_factory.new_metadata(), epoch,
display_list.is_contentful(), (
)); profiler_metadata_factory.new_metadata(),
display_list.is_contentful(),
),
);
// Send the pending metric information to the compositor thread. // Send the pending metric information to the compositor thread.
// The compositor will record the current time after painting the // The compositor will record the current time after painting the
@ -340,7 +343,8 @@ impl PaintTimeMetrics {
pub fn maybe_set_metric(&self, epoch: Epoch, paint_time: u64) { pub fn maybe_set_metric(&self, epoch: Epoch, paint_time: u64) {
if self.first_paint.get().is_some() && self.first_contentful_paint.get().is_some() || if self.first_paint.get().is_some() && self.first_contentful_paint.get().is_some() ||
self.navigation_start.is_none() { self.navigation_start.is_none()
{
// If we already set all paint metrics or we have not set navigation start yet, // If we already set all paint metrics or we have not set navigation start yet,
// we just bail out. // we just bail out.
return; return;