servo: Merge #6932 - Implement HeapSizeOf for Url. Fixes #6912 (from boghison:memrs); r=SimonSapin

Fixes #6912

Source-Repo: https://github.com/servo/servo
Source-Revision: c2497fcd49933f3782d529b891f4c8bb5de198c4
This commit is contained in:
Bogdan Cuza 2015-08-03 19:31:26 -06:00
Родитель b4bfd1bd03
Коммит 2c11e45f89
1 изменённых файлов: 42 добавлений и 0 удалений

Просмотреть файл

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