diff options
author | bors-servo <metajack+bors@gmail.com> | 2014-12-08 23:01:05 -0700 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2014-12-08 23:01:05 -0700 |
commit | 2f80a3bac66ae3d0a84b5f4317ebfb537c5c6e2c (patch) | |
tree | 2a86d17f8cd6d50c41b5a465ca240390779d0ffc | |
parent | 2741fd2e139b9cb8e9f14857877f567ecae3bced (diff) | |
parent | f221cb5178f2f4d837d22ea7f168768622c3268d (diff) | |
download | servo-2f80a3bac66ae3d0a84b5f4317ebfb537c5c6e2c.tar.gz servo-2f80a3bac66ae3d0a84b5f4317ebfb537c5c6e2c.zip |
auto merge of #4160 : Manishearth/servo/a-test-size-dom, r=cgaebel
-rw-r--r-- | components/script/lib.rs | 3 | ||||
-rw-r--r-- | components/script/tests.rs | 48 |
2 files changed, 51 insertions, 0 deletions
diff --git a/components/script/lib.rs b/components/script/lib.rs index de1ddbe5987..2cf8f99d4f3 100644 --- a/components/script/lib.rs +++ b/components/script/lib.rs @@ -226,3 +226,6 @@ pub mod script_task; mod timers; pub mod textinput; mod devtools; + +#[cfg(all(test, target_word_size = "64"))] +mod tests; diff --git a/components/script/tests.rs b/components/script/tests.rs new file mode 100644 index 00000000000..6675fefd07b --- /dev/null +++ b/components/script/tests.rs @@ -0,0 +1,48 @@ +/* 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/. */ + +use dom::characterdata::CharacterData; +use dom::element::Element; +use dom::eventtarget::EventTarget; +use dom::htmldivelement::HTMLDivElement; +use dom::htmlelement::HTMLElement; +use dom::htmlspanelement::HTMLSpanElement; +use dom::node::Node; +use dom::text::Text; + +use std::mem::size_of; + +// Macro so that we can stringify type names +// I'd really prefer the tests themselves to be run at plugin time, +// however rustc::middle doesn't have access to the full type data +macro_rules! sizeof_checker ( + ($testname: ident, $t:ty, $known_size:expr) => ( + #[test] + fn $testname() { + let new = size_of::<$t>(); + let old = $known_size; + if new < old { + panic!("Your changes have decreased the stack size of commonly used DOM struct {} from {} to {}. \ + Good work! Please update the size in script/tests.rs", + stringify!($t), old, new) + } else if new > old { + panic!("Your changes have increased the stack size of commonly used DOM struct {} from {} to {}. \ + These structs are present in large quantities in the DOM, and increasing the size \ + may dramatically affect our memory footprint. Please consider choosing a design which \ + avoids this increase. If you feel that the increase is necessary, \ + update to the new size in script/tests.rs.", + stringify!($t), old, new) + } + }); +) + +// Update the sizes here +sizeof_checker!(size_event_target, EventTarget, 56) +sizeof_checker!(size_node, Node, 304) +sizeof_checker!(size_element, Element, 448) +sizeof_checker!(size_htmlelement, HTMLElement, 448) +sizeof_checker!(size_div, HTMLDivElement, 448) +sizeof_checker!(size_span, HTMLSpanElement, 448) +sizeof_checker!(size_text, Text, 336) +sizeof_checker!(size_characterdata, CharacterData, 336) |