From 9a3cdc6d7c3b65dbdb1c299517f679e7e74ddeff Mon Sep 17 00:00:00 2001 From: Nick Fitzgerald Date: Fri, 31 Mar 2017 17:11:00 -0500 Subject: [PATCH] servo: Merge #16211 - Little HTML profile trace dumps related stuff (from fitzgen:little-trace-dump-stuff); r=jdm Updates to fix the labels in the rendered traces, and some other tiny stuff. r? @jdm --- - [X] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [X] There are tests for these changes Source-Repo: https://github.com/servo/servo Source-Revision: 64841090253992440b66ca12020e1125f0763cb0 --HG-- extra : subtree_source : https%3A//hg.mozilla.org/projects/converted-servo-linear extra : subtree_revision : aa83b46529f305c7a01086d6251c2b0deb661efc --- servo/components/profile/time.rs | 10 ++------- servo/components/profile/trace-dump.js | 7 +----- servo/components/profile/trace_dump.rs | 31 +++++++++++++++----------- 3 files changed, 21 insertions(+), 27 deletions(-) diff --git a/servo/components/profile/time.rs b/servo/components/profile/time.rs index be3be16655fe1..928eca4a2633a 100644 --- a/servo/components/profile/time.rs +++ b/servo/components/profile/time.rs @@ -15,10 +15,8 @@ use std::borrow::ToOwned; use std::cmp::Ordering; use std::collections::BTreeMap; use std::error::Error; -use std::fs; use std::fs::File; use std::io::{self, Write}; -use std::path; use std::path::Path; use std::time::Duration; use std_time::precise_time_ns; @@ -178,9 +176,7 @@ impl Profiler { let outputoption = option.clone(); thread::Builder::new().name("Time profiler".to_owned()).spawn(move || { let trace = file_path.as_ref() - .map(path::Path::new) - .map(fs::File::create) - .map(|res| TraceDump::new(res.unwrap())); + .and_then(|p| TraceDump::new(p).ok()); let mut profiler = Profiler::new(port, trace, Some(outputoption)); profiler.start(); }).expect("Thread spawning failed"); @@ -207,9 +203,7 @@ impl Profiler { // Spawn the time profiler thread::Builder::new().name("Time profiler".to_owned()).spawn(move || { let trace = file_path.as_ref() - .map(path::Path::new) - .map(fs::File::create) - .map(|res| TraceDump::new(res.unwrap())); + .and_then(|p| TraceDump::new(p).ok()); let mut profiler = Profiler::new(port, trace, None); profiler.start(); }).expect("Thread spawning failed"); diff --git a/servo/components/profile/trace-dump.js b/servo/components/profile/trace-dump.js index d6f1c570e94d7..93a7c3dff6031 100644 --- a/servo/components/profile/trace-dump.js +++ b/servo/components/profile/trace-dump.js @@ -244,11 +244,6 @@ Make sure to upstream changes, or they will get lost! return increment; }; - // Get the category name for the given trace. - const traceCategory = exports.traceCategory = trace => { - return Object.keys(trace.category)[0]; - }; - /*** Window Specific Code ***************************************************/ if (!window) { @@ -528,7 +523,7 @@ Make sure to upstream changes, or they will get lost! inner.style.width = state.nsToSelectionPx(trace.endTime - trace.startTime) + "px"; inner.style.marginLeft = state.nsToSelectionPx(trace.startTime - state.startSelection) + "px"; - let category = traceCategory(trace); + let category = trace.category; inner.textContent = category; inner.style.backgroundColor = state.getColorForCategory(category); diff --git a/servo/components/profile/trace_dump.rs b/servo/components/profile/trace_dump.rs index 1344b8a4ccf5a..b0c8f9d7ef509 100644 --- a/servo/components/profile/trace_dump.rs +++ b/servo/components/profile/trace_dump.rs @@ -7,9 +7,11 @@ use profile_traits::time::{ProfilerCategory, TimerMetadata}; use serde_json; use std::fs; -use std::io::Write; +use std::io::{self, Write}; +use std::path; /// An RAII class for writing the HTML trace dump. +#[derive(Debug)] pub struct TraceDump { file: fs::File, } @@ -35,9 +37,12 @@ struct TraceEntry { impl TraceDump { /// Create a new TraceDump and write the prologue of the HTML file out to /// disk. - pub fn new(mut file: fs::File) -> TraceDump { - write_prologue(&mut file); - TraceDump { file: file } + pub fn new

(trace_file_path: P) -> io::Result + where P: AsRef + { + let mut file = fs::File::create(trace_file_path)?; + write_prologue(&mut file)?; + Ok(TraceDump { file: file }) } /// Write one trace to the trace dump file. @@ -62,18 +67,18 @@ impl Drop for TraceDump { /// Write the epilogue of the trace dump HTML file out to disk on /// destruction. fn drop(&mut self) { - write_epilogue(&mut self.file); + write_epilogue(&mut self.file).unwrap(); } } -fn write_prologue(file: &mut fs::File) { - writeln!(file, "{}", include_str!("./trace-dump-prologue-1.html")).unwrap(); - writeln!(file, "{}", include_str!("./trace-dump.css")).unwrap(); - writeln!(file, "{}", include_str!("./trace-dump-prologue-2.html")).unwrap(); +fn write_prologue(file: &mut fs::File) -> io::Result<()> { + writeln!(file, "{}", include_str!("./trace-dump-prologue-1.html"))?; + writeln!(file, "{}", include_str!("./trace-dump.css"))?; + writeln!(file, "{}", include_str!("./trace-dump-prologue-2.html")) } -fn write_epilogue(file: &mut fs::File) { - writeln!(file, "{}", include_str!("./trace-dump-epilogue-1.html")).unwrap(); - writeln!(file, "{}", include_str!("./trace-dump.js")).unwrap(); - writeln!(file, "{}", include_str!("./trace-dump-epilogue-2.html")).unwrap(); +fn write_epilogue(file: &mut fs::File) -> io::Result<()> { + writeln!(file, "{}", include_str!("./trace-dump-epilogue-1.html"))?; + writeln!(file, "{}", include_str!("./trace-dump.js"))?; + writeln!(file, "{}", include_str!("./trace-dump-epilogue-2.html")) }