Skip to content

Commit

Permalink
Add time profiling to ServoXMLParser::parse_sync
Browse files Browse the repository at this point in the history
  • Loading branch information
nox committed Oct 11, 2016
1 parent 1f23810 commit 609299e
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 0 deletions.
1 change: 1 addition & 0 deletions components/profile/time.rs
Expand Up @@ -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",
Expand Down
1 change: 1 addition & 0 deletions components/profile_traits/time.rs
Expand Up @@ -83,6 +83,7 @@ pub enum ProfilerCategory {
ScriptWebSocketEvent = 0x73,
ScriptWorkerEvent = 0x74,
ScriptServiceWorkerEvent = 0x75,
ScriptParseXML = 0x76,
ApplicationHeartbeat = 0x90,
}

Expand Down
15 changes: 15 additions & 0 deletions components/script/dom/servoxmlparser.rs
Expand Up @@ -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;
Expand Down Expand Up @@ -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 {
Expand Down

0 comments on commit 609299e

Please sign in to comment.