Auto merge of #6932 - boghison:memrs, r=SimonSapin

Implement HeapSizeOf for Url. Fixes #6912

Fixes #6912
<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/6932)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2015-08-03 19:31:26 -06:00
commit c2497fcd49

View file

@ -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()