diff options
author | Josh Matthews <josh@joshmatthews.net> | 2015-07-31 12:46:36 -0400 |
---|---|---|
committer | Josh Matthews <josh@joshmatthews.net> | 2015-08-03 23:05:00 -0400 |
commit | 8620fe599538effe755029e895fca6b9ca3b0f47 (patch) | |
tree | b7e1661271c4e358a7d003cf0b4837196ad198d0 /components/script/script_task.rs | |
parent | c2497fcd49933f3782d529b891f4c8bb5de198c4 (diff) | |
download | servo-8620fe599538effe755029e895fca6b9ca3b0f47.tar.gz servo-8620fe599538effe755029e895fca6b9ca3b0f47.zip |
Start reporting memory usage for Window and all nodes in all DOM trees for frame treese in script tasks.
Diffstat (limited to 'components/script/script_task.rs')
-rw-r--r-- | components/script/script_task.rs | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/components/script/script_task.rs b/components/script/script_task.rs index 279ff364bda..b3ea5b16818 100644 --- a/components/script/script_task.rs +++ b/components/script/script_task.rs @@ -46,6 +46,7 @@ use dom::worker::TrustedWorkerAddress; use parse::html::{ParseContext, parse_html}; use layout_interface::{self, NewLayoutTaskInfo, ScriptLayoutChan, LayoutChan, ReflowGoal}; use layout_interface::{ReflowQueryType}; +use mem::heap_size_of_eventtarget; use network_listener::NetworkListener; use page::{Page, IterablePage, Frame}; use timers::TimerId; @@ -1104,11 +1105,28 @@ impl ScriptTask { fn collect_reports(&self, reports_chan: ReportsChan) { let mut urls = vec![]; + let mut dom_tree_size = 0; + let mut reports = vec![]; for it_page in self.root_page().iter() { - urls.push(it_page.document().url().serialize()); + let current_url = it_page.document().url().serialize(); + urls.push(current_url.clone()); + + for child in NodeCast::from_ref(&*it_page.document()).traverse_preorder() { + let target = EventTargetCast::from_ref(&*child); + dom_tree_size += heap_size_of_eventtarget(target); + } + let window = it_page.window(); + let target = EventTargetCast::from_ref(&*window); + dom_tree_size += heap_size_of_eventtarget(target); + + reports.push(Report { + path: path![format!("url({})", current_url), "dom-tree"], + kind: ReportKind::ExplicitJemallocHeapSize, + size: dom_tree_size, + }) } let path_seg = format!("url({})", urls.join(", ")); - let reports = ScriptTask::get_reports(self.get_cx(), path_seg); + reports.extend(ScriptTask::get_reports(self.get_cx(), path_seg)); reports_chan.send(reports); } |