diff options
author | Bobby Holley <bobbyholley@gmail.com> | 2017-03-14 22:50:38 -0700 |
---|---|---|
committer | Bobby Holley <bobbyholley@gmail.com> | 2017-03-15 11:17:51 -0700 |
commit | 6744ed16394fab75a113f2240fca843160d3efa8 (patch) | |
tree | e4d58aaa218778f952e867450aa9c2da449d8a98 | |
parent | 9f44fd2d9daec8a7665bcf0569fdc0ef77d4c73f (diff) | |
download | servo-6744ed16394fab75a113f2240fca843160d3efa8.tar.gz servo-6744ed16394fab75a113f2240fca843160d3efa8.zip |
Run size_of tests with test-stylo.
MozReview-Commit-ID: KapDMqX6OjH
-rw-r--r-- | components/style/properties/data.py | 6 | ||||
-rw-r--r-- | components/style/properties/properties.mako.rs | 59 | ||||
-rw-r--r-- | ports/geckolib/Cargo.toml | 1 | ||||
-rw-r--r-- | python/servo/testing_commands.py | 2 | ||||
-rw-r--r-- | tests/unit/style/size_of.rs | 43 | ||||
-rw-r--r-- | tests/unit/stylo/Cargo.toml | 3 | ||||
-rw-r--r-- | tests/unit/stylo/lib.rs | 1 | ||||
-rw-r--r-- | tests/unit/stylo/size_of.rs | 13 |
8 files changed, 77 insertions, 51 deletions
diff --git a/components/style/properties/data.py b/components/style/properties/data.py index 0597662d520..57cf0eaee21 100644 --- a/components/style/properties/data.py +++ b/components/style/properties/data.py @@ -211,11 +211,13 @@ class PropertiesData(object): In this situation, the `product` value is ignored while choosing which shorthands and longhands to generate; and instead all properties for - which code exists for either servo or stylo are generated. + which code exists for either servo or stylo are generated. Note that we skip + this behavior when the style crate is being built in gecko mode, because we + need manual glue for such properties and we don't have it. """ def __init__(self, product, testing): self.product = product - self.testing = testing + self.testing = testing and product != "gecko" self.style_structs = [] self.current_style_struct = None self.longhands = [] diff --git a/components/style/properties/properties.mako.rs b/components/style/properties/properties.mako.rs index 7855b3e1c79..59e91f6ce8c 100644 --- a/components/style/properties/properties.mako.rs +++ b/components/style/properties/properties.mako.rs @@ -2387,17 +2387,62 @@ macro_rules! longhand_properties_idents { } } -/// Retuns all longhands SpecifiedValue sizes. This is used in unit tests. +/// Testing function to check the size of a PropertyDeclaration. We implement +/// this here so that the code can be used by both servo and stylo unit tests. +/// This is important because structs can have different sizes in stylo and +/// servo. #[cfg(feature = "testing")] -pub fn specified_value_sizes() -> Vec<(&'static str, usize, bool)> { +pub fn test_size_of_property_declaration() { use std::mem::size_of; - let mut sizes = vec![]; + let old = 48; + let new = size_of::<PropertyDeclaration>(); + if new < old { + panic!("Your changes have decreased the stack size of PropertyDeclaration enum from {} to {}. \ + Good work! Please update the size in components/style/properties/properties.mako.rs.", + old, new) + } else if new > old { + panic!("Your changes have increased the stack size of PropertyDeclaration enum from {} to {}. \ + These enum is present in large quantities in the style, and increasing the size \ + may negatively affect style system performance. Please consider using `boxed=\"True\"` in \ + the longhand If you feel that the increase is necessary, update to the new size in \ + components/style/properties/properties.mako.rs.", + old, new) + } +} + +/// Testing function to check the size of all SpecifiedValues. +#[cfg(feature = "testing")] +pub fn test_size_of_specified_values() { + use std::mem::size_of; + let threshold = 32; + + let mut longhands = vec![]; % for property in data.longhands: - sizes.push(("${property.name}", - size_of::<longhands::${property.ident}::SpecifiedValue>(), - ${"true" if property.boxed else "false"})); + longhands.push(("${property.name}", + size_of::<longhands::${property.ident}::SpecifiedValue>(), + ${"true" if property.boxed else "false"})); % endfor - sizes + let mut failing_messages = vec![]; + + for specified_value in longhands { + if specified_value.1 > threshold && !specified_value.2 { + failing_messages.push( + format!("Your changes have increased the size of {} SpecifiedValue to {}. The threshold is \ + currently {}. SpecifiedValues affect size of PropertyDeclaration enum and \ + increasing the size may negative affect style system performance. Please consider \ + using `boxed=\"True\"` in this longhand.", + specified_value.0, specified_value.1, threshold)); + } else if specified_value.1 <= threshold && specified_value.2 { + failing_messages.push( + format!("Your changes have decreased the size of {} SpecifiedValue to {}. Good work! \ + The threshold is currently {}. Please consider removing `boxed=\"True\"` from this longhand.", + specified_value.0, specified_value.1, threshold)); + } + } + + if !failing_messages.is_empty() { + panic!("{}", failing_messages.join("\n\n")); + } } diff --git a/ports/geckolib/Cargo.toml b/ports/geckolib/Cargo.toml index a787ce685b3..9ed52128eaf 100644 --- a/ports/geckolib/Cargo.toml +++ b/ports/geckolib/Cargo.toml @@ -11,6 +11,7 @@ crate-type = ["staticlib", "rlib"] [features] bindgen = ["style/use_bindgen"] +testing = ["style/testing"] [dependencies] atomic_refcell = "0.1" diff --git a/python/servo/testing_commands.py b/python/servo/testing_commands.py index 0733911d2b4..c00bcc42057 100644 --- a/python/servo/testing_commands.py +++ b/python/servo/testing_commands.py @@ -300,7 +300,7 @@ class MachCommands(CommandBase): release = ["--release"] if release else [] ret = 0 with cd(path.join("ports", "geckolib")): - ret = call(["cargo", "test", "-p", "stylo_tests"] + release, env=env) + ret = call(["cargo", "test", "-p", "stylo_tests", "--features", "testing"] + release, env=env) if ret != 0: return ret with cd(path.join("ports", "geckolib")): diff --git a/tests/unit/style/size_of.rs b/tests/unit/style/size_of.rs index 64eb28adef8..f43163b82c6 100644 --- a/tests/unit/style/size_of.rs +++ b/tests/unit/style/size_of.rs @@ -2,51 +2,12 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use std::mem::size_of; -use style::properties::{PropertyDeclaration, specified_value_sizes}; - #[test] fn size_of_property_declaration() { - let old = 48; - let new = size_of::<PropertyDeclaration>(); - if new < old { - panic!("Your changes have decreased the stack size of PropertyDeclaration enum from {} to {}. \ - Good work! Please update the size in tests/unit/style/size_of.rs.", - old, new) - } else if new > old { - panic!("Your changes have increased the stack size of PropertyDeclaration enum from {} to {}. \ - These enum is present in large quantities in the style, and increasing the size \ - may negatively affect style system performance. Please consider using `boxed=\"True\"` in \ - the longhand If you feel that the increase is necessary, update to the new size in \ - tests/unit/style/size_of.rs.", - old, new) - } + ::style::properties::test_size_of_property_declaration(); } #[test] fn size_of_specified_values() { - let threshold = 32; - let longhands = specified_value_sizes(); - - let mut failing_messages = vec![]; - - for specified_value in longhands { - if specified_value.1 > threshold && !specified_value.2 { - failing_messages.push( - format!("Your changes have increased the size of {} SpecifiedValue to {}. The threshold is \ - currently {}. SpecifiedValues affect size of PropertyDeclaration enum and \ - increasing the size may negative affect style system performance. Please consider \ - using `boxed=\"True\"` in this longhand.", - specified_value.0, specified_value.1, threshold)); - } else if specified_value.1 <= threshold && specified_value.2 { - failing_messages.push( - format!("Your changes have decreased the size of {} SpecifiedValue to {}. Good work! \ - The threshold is currently {}. Please consider removing `boxed=\"True\"` from this longhand.", - specified_value.0, specified_value.1, threshold)); - } - } - - if !failing_messages.is_empty() { - panic!("{}", failing_messages.join("\n\n")); - } + ::style::properties::test_size_of_specified_values(); } diff --git a/tests/unit/stylo/Cargo.toml b/tests/unit/stylo/Cargo.toml index ef4e4669924..769e6f8e1b5 100644 --- a/tests/unit/stylo/Cargo.toml +++ b/tests/unit/stylo/Cargo.toml @@ -11,6 +11,9 @@ name = "stylo_tests" path = "lib.rs" doctest = false +[features] +testing = ["style/testing"] + [dependencies] app_units = "0.4" atomic_refcell = "0.1" diff --git a/tests/unit/stylo/lib.rs b/tests/unit/stylo/lib.rs index 8e2cf196190..e15753a24f2 100644 --- a/tests/unit/stylo/lib.rs +++ b/tests/unit/stylo/lib.rs @@ -19,6 +19,7 @@ extern crate style; extern crate style_traits; mod sanity_checks; +mod size_of; #[path = "../../../ports/geckolib/stylesheet_loader.rs"] mod stylesheet_loader; diff --git a/tests/unit/stylo/size_of.rs b/tests/unit/stylo/size_of.rs new file mode 100644 index 00000000000..f43163b82c6 --- /dev/null +++ b/tests/unit/stylo/size_of.rs @@ -0,0 +1,13 @@ +/* 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 http://mozilla.org/MPL/2.0/. */ + +#[test] +fn size_of_property_declaration() { + ::style::properties::test_size_of_property_declaration(); +} + +#[test] +fn size_of_specified_values() { + ::style::properties::test_size_of_specified_values(); +} |