Add time profiling to ServoXMLParser::parse_sync

This commit is contained in:
Anthony Ramine 2016-10-09 00:19:09 +02:00
parent 1f23810a34
commit 609299e1e4
3 changed files with 17 additions and 0 deletions

View file

@ -138,6 +138,7 @@ impl Formattable for ProfilerCategory {
ProfilerCategory::ScriptInputEvent => "Script Input Event",
ProfilerCategory::ScriptNetworkEvent => "Script Network Event",
ProfilerCategory::ScriptParseHTML => "Script Parse HTML",
ProfilerCategory::ScriptParseXML => "Script Parse XML",
ProfilerCategory::ScriptPlannedNavigation => "Script Planned Navigation",
ProfilerCategory::ScriptResize => "Script Resize",
ProfilerCategory::ScriptEvent => "Script Event",

View file

@ -83,6 +83,7 @@ pub enum ProfilerCategory {
ScriptWebSocketEvent = 0x73,
ScriptWorkerEvent = 0x74,
ScriptServiceWorkerEvent = 0x75,
ScriptParseXML = 0x76,
ApplicationHeartbeat = 0x90,
}

View file

@ -9,12 +9,15 @@ use dom::bindings::js::{JS, Root};
use dom::bindings::reflector::reflect_dom_object;
use dom::bindings::trace::JSTraceable;
use dom::document::Document;
use dom::globalscope::GlobalScope;
use dom::node::Node;
use dom::servoparser::ServoParser;
use dom::window::Window;
use js::jsapi::JSTracer;
use msg::constellation_msg::PipelineId;
use parse::{Parser, ParserRef};
use profile_traits::time::{ProfilerCategory, TimerMetadata};
use profile_traits::time::{TimerMetadataFrameType, TimerMetadataReflowType, profile};
use script_thread::ScriptThread;
use std::cell::Cell;
use url::Url;
@ -106,6 +109,18 @@ impl ServoXMLParser {
}
pub fn parse_sync(&self) {
let metadata = TimerMetadata {
url: self.upcast().document().url().as_str().into(),
iframe: TimerMetadataFrameType::RootWindow,
incremental: TimerMetadataReflowType::FirstReflow,
};
profile(ProfilerCategory::ScriptParseXML,
Some(metadata),
self.upcast().document().window().upcast::<GlobalScope>().time_profiler_chan().clone(),
|| self.do_parse_sync())
}
fn do_parse_sync(&self) {
// This parser will continue to parse while there is either pending input or
// the parser remains unsuspended.
loop {