/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use cssparser::{Parser, ParserInput}; use servo_arc::Arc; use style::custom_properties::{Name, SpecifiedValue, CustomPropertiesMap, CustomPropertiesBuilder, CssEnvironment}; use style::properties::CustomDeclarationValue; use test::{self, Bencher}; fn cascade( name_and_value: &[(&str, &str)], inherited: Option<&Arc>, ) -> Option> { let values = name_and_value.iter().map(|&(name, value)| { let mut input = ParserInput::new(value); let mut parser = Parser::new(&mut input); (Name::from(name), SpecifiedValue::parse(&mut parser).unwrap()) }).collect::>(); let env = CssEnvironment; let mut builder = CustomPropertiesBuilder::new(inherited, &env); for &(ref name, ref val) in &values { builder.cascade(name, &CustomDeclarationValue::Value(val.clone())); } builder.build() } #[bench] fn cascade_custom_simple(b: &mut Bencher) { b.iter(|| { let parent = cascade(&[ ("foo", "10px"), ("bar", "100px"), ], None); test::black_box(cascade(&[ ("baz", "calc(40em + 4px)"), ("bazz", "calc(30em + 4px)"), ], parent.as_ref())) }) }