aboutsummaryrefslogtreecommitdiffstats
path: root/components/util/mem.rs
diff options
context:
space:
mode:
authorBogdan Cuza <boghison22@gmail.com>2015-08-03 22:02:34 +0300
committerBogdan Cuza <boghison22@gmail.com>2015-08-03 22:02:56 +0300
commit46442d28fa432ae4fee8a184d96ffc273b67e4bc (patch)
tree6cc9e49aed1fb7fb302935ef85615c5635ee2f55 /components/util/mem.rs
parent028707f5cd3263fd1476669207f67d5b9d5d4806 (diff)
downloadservo-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.rs42
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()