diff --git a/components/style/Cargo.toml b/components/style/Cargo.toml index be0d5fb5d94..04cb51df3c6 100644 --- a/components/style/Cargo.toml +++ b/components/style/Cargo.toml @@ -16,7 +16,7 @@ doctest = false gecko = ["nsstring_vendor", "rayon/unstable", "num_cpus"] use_bindgen = ["bindgen", "regex"] servo = ["serde/unstable", "serde", "serde_derive", "heapsize", "heapsize_derive", - "style_traits/servo", "servo_atoms", "html5ever-atoms", + "style_traits/servo", "servo_atoms", "servo_config", "html5ever-atoms", "cssparser/heapsize", "cssparser/serde", "encoding", "rayon/unstable", "servo_url", "servo_url/servo"] testing = [] @@ -49,7 +49,7 @@ selectors = { path = "../selectors" } serde = {version = "0.9", optional = true} serde_derive = {version = "0.9", optional = true} servo_atoms = {path = "../atoms", optional = true} -servo_config = {path = "../config"} +servo_config = {path = "../config", optional = true} smallvec = "0.3" style_traits = {path = "../style_traits"} servo_url = {path = "../url", optional = true} diff --git a/components/style/context.rs b/components/style/context.rs index 39643af2f8e..6a9d3fd5bb9 100644 --- a/components/style/context.rs +++ b/components/style/context.rs @@ -17,10 +17,10 @@ use matching::StyleSharingCandidateCache; use parking_lot::RwLock; #[cfg(feature = "gecko")] use selector_parser::PseudoElement; use selectors::matching::ElementSelectorFlags; -use servo_config::opts; +#[cfg(feature = "servo")] use servo_config::opts; use shared_lock::StylesheetGuards; use std::collections::HashMap; -use std::env; +#[cfg(not(feature = "servo"))] use std::env; use std::fmt; use std::ops::Add; use std::sync::{Arc, Mutex}; @@ -170,6 +170,7 @@ impl fmt::Display for TraversalStatistics { } } +#[cfg(not(feature = "servo"))] lazy_static! { /// Whether to dump style statistics, computed statically. We use an environmental /// variable so that this is easy to set for Gecko builds, and matches the @@ -182,10 +183,20 @@ lazy_static! { }; } +#[cfg(feature = "servo")] +fn shall_stat_style_sharing() -> bool { + opts::get().style_sharing_stats +} + +#[cfg(not(feature = "servo"))] +fn shall_stat_style_sharing() -> bool { + *DUMP_STYLE_STATISTICS +} + impl TraversalStatistics { /// Returns whether statistics dumping is enabled. pub fn should_dump() -> bool { - *DUMP_STYLE_STATISTICS || opts::get().style_sharing_stats + shall_stat_style_sharing() } /// Computes the traversal time given the start time in seconds. diff --git a/components/style/lib.rs b/components/style/lib.rs index d11deca488b..d36001b2f3d 100644 --- a/components/style/lib.rs +++ b/components/style/lib.rs @@ -70,7 +70,7 @@ extern crate rayon; extern crate selectors; #[cfg(feature = "servo")] #[macro_use] extern crate serde_derive; #[cfg(feature = "servo")] #[macro_use] extern crate servo_atoms; -extern crate servo_config; +#[cfg(feature = "servo")] extern crate servo_config; #[cfg(feature = "servo")] extern crate servo_url; extern crate smallvec; #[macro_use] diff --git a/components/style/matching.rs b/components/style/matching.rs index dbcb0040216..e6c9de52025 100644 --- a/components/style/matching.rs +++ b/components/style/matching.rs @@ -23,7 +23,7 @@ use selector_parser::{PseudoElement, RestyleDamage, SelectorImpl}; use selectors::bloom::BloomFilter; use selectors::matching::{ElementSelectorFlags, StyleRelations}; use selectors::matching::AFFECTED_BY_PSEUDO_ELEMENTS; -use servo_config::opts; +#[cfg(feature = "servo")] use servo_config::opts; use sink::ForgetfulSink; use std::sync::Arc; use stylist::ApplicableDeclarationBlock; @@ -783,6 +783,16 @@ pub enum StyleSharingBehavior { Disallow, } +#[cfg(feature = "servo")] +fn is_share_style_cache_disabled() -> bool { + opts::get().disable_share_style_cache +} + +#[cfg(not(feature = "servo"))] +fn is_share_style_cache_disabled() -> bool { + false +} + /// The public API that elements expose for selector matching. pub trait MatchMethods : TElement { /// Performs selector matching and property cascading on an element and its eager pseudos. @@ -1069,7 +1079,7 @@ pub trait MatchMethods : TElement { shared_context: &SharedStyleContext, data: &mut AtomicRefMut) -> StyleSharingResult { - if opts::get().disable_share_style_cache { + if is_share_style_cache_disabled() { return StyleSharingResult::CannotShare } diff --git a/components/style/stylesheets.rs b/components/style/stylesheets.rs index 865b2fb4b75..822f59478a0 100644 --- a/components/style/stylesheets.rs +++ b/components/style/stylesheets.rs @@ -27,6 +27,7 @@ use parser::{Parse, ParserContext, log_css_error}; use properties::{PropertyDeclarationBlock, parse_property_declaration_list}; use selector_parser::{SelectorImpl, SelectorParser}; use selectors::parser::SelectorList; +#[cfg(feature = "servo")] use servo_config::prefs::PREFS; #[cfg(not(feature = "gecko"))] use servo_url::ServoUrl; @@ -997,6 +998,16 @@ impl<'a, 'b> NestedRuleParser<'a, 'b> { } } +#[cfg(feature = "servo")] +fn is_viewport_enabled() -> bool { + PREFS.get("layout.viewport.enabled").as_boolean().unwrap_or(false) +} + +#[cfg(not(feature = "servo"))] +fn is_viewport_enabled() -> bool { + true +} + impl<'a, 'b> AtRuleParser for NestedRuleParser<'a, 'b> { type Prelude = AtRulePrelude; type AtRule = CssRule; @@ -1017,8 +1028,7 @@ impl<'a, 'b> AtRuleParser for NestedRuleParser<'a, 'b> { Ok(AtRuleType::WithBlock(AtRulePrelude::FontFace)) }, "viewport" => { - if PREFS.get("layout.viewport.enabled").as_boolean().unwrap_or(false) || - cfg!(feature = "gecko") { + if is_viewport_enabled() { Ok(AtRuleType::WithBlock(AtRulePrelude::Viewport)) } else { Err(()) diff --git a/components/style/traversal.rs b/components/style/traversal.rs index f334c40f225..37e52eafb8f 100644 --- a/components/style/traversal.rs +++ b/components/style/traversal.rs @@ -13,7 +13,7 @@ use dom::{DirtyDescendants, NodeInfo, TElement, TNode}; use matching::{MatchMethods, StyleSharingBehavior}; use restyle_hints::{RESTYLE_DESCENDANTS, RESTYLE_SELF}; use selector_parser::RestyleDamage; -use servo_config::opts; +#[cfg(feature = "servo")] use servo_config::opts; use std::borrow::BorrowMut; use stylist::Stylist; @@ -100,6 +100,16 @@ impl TraversalDriver { } } +#[cfg(feature = "servo")] +fn is_servo_nonincremental_layout() -> bool { + opts::get().nonincremental_layout +} + +#[cfg(not(feature = "servo"))] +fn is_servo_nonincremental_layout() -> bool { + false +} + /// A DOM Traversal trait, that is used to generically implement styling for /// Gecko and Servo. pub trait DomTraversal : Sync { @@ -175,7 +185,7 @@ pub trait DomTraversal : Sync { /// Returns true if traversal is needed for the given node and subtree. fn node_needs_traversal(node: E::ConcreteNode, animation_only: bool) -> bool { // Non-incremental layout visits every node. - if cfg!(feature = "servo") && opts::get().nonincremental_layout { + if is_servo_nonincremental_layout() { return true; }