Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clean up the parsers into a single interface #13675

Merged
merged 9 commits into from Oct 11, 2016

Add time profiling to ServoXMLParser::parse_sync

  • Loading branch information
nox committed Oct 11, 2016
commit 609299e1e45e93939f75f8439fc7ac3276ca5881
@@ -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",
@@ -83,6 +83,7 @@ pub enum ProfilerCategory {
ScriptWebSocketEvent = 0x73,
ScriptWorkerEvent = 0x74,
ScriptServiceWorkerEvent = 0x75,
ScriptParseXML = 0x76,
ApplicationHeartbeat = 0x90,
}

@@ -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 {
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.