diff options
author | Bogdan Cuza <boghison22@gmail.com> | 2015-08-03 22:02:34 +0300 |
---|---|---|
committer | Bogdan Cuza <boghison22@gmail.com> | 2015-08-03 22:02:56 +0300 |
commit | 46442d28fa432ae4fee8a184d96ffc273b67e4bc (patch) | |
tree | 6cc9e49aed1fb7fb302935ef85615c5635ee2f55 /components/util/mem.rs | |
parent | 028707f5cd3263fd1476669207f67d5b9d5d4806 (diff) | |
download | servo-46442d28fa432ae4fee8a184d96ffc273b67e4bc.tar.gz servo-46442d28fa432ae4fee8a184d96ffc273b67e4bc.zip |
Implement HeapSizeOf for Url. Fixes #6912
Diffstat (limited to 'components/util/mem.rs')
-rw-r--r-- | components/util/mem.rs | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/components/util/mem.rs b/components/util/mem.rs index 87c61652a60..51ec56c0f05 100644 --- a/components/util/mem.rs +++ b/components/util/mem.rs @@ -16,6 +16,7 @@ use cursor::Cursor; use euclid::{Point2D, Rect, SideOffsets2D, Size2D, Matrix2D, Matrix4}; use geometry::Au; use range::Range; +use url; extern { // Get the size of a heap block. @@ -87,6 +88,47 @@ impl<T: HeapSizeOf> HeapSizeOf for Option<T> { } } +impl HeapSizeOf for url::Url { + fn heap_size_of_children(&self) -> usize { + let &url::Url { ref scheme, ref scheme_data, ref query, ref fragment } = self; + scheme.heap_size_of_children() + + scheme_data.heap_size_of_children() + + query.heap_size_of_children() + + fragment.heap_size_of_children() + } +} + +impl HeapSizeOf for url::SchemeData { + fn heap_size_of_children(&self) -> usize { + match self { + &url::SchemeData::Relative(ref data) => data.heap_size_of_children(), + &url::SchemeData::NonRelative(ref str) => str.heap_size_of_children() + } + } +} + +impl HeapSizeOf for url::RelativeSchemeData { + fn heap_size_of_children(&self) -> usize { + let &url::RelativeSchemeData { ref username, ref password, ref host, + ref port, ref default_port, ref path } = self; + username.heap_size_of_children() + + password.heap_size_of_children() + + host.heap_size_of_children() + + port.heap_size_of_children() + + default_port.heap_size_of_children() + + path.heap_size_of_children() + } +} + +impl HeapSizeOf for url::Host { + fn heap_size_of_children(&self) -> usize { + match self { + &url::Host::Domain(ref str) => str.heap_size_of_children(), + &url::Host::Ipv6(_) => 0 + } + } +} + impl<T: HeapSizeOf> HeapSizeOf for Arc<T> { fn heap_size_of_children(&self) -> usize { (**self).heap_size_of_children() |