diff options
author | bors-servo <metajack+bors@gmail.com> | 2015-08-17 08:56:29 -0600 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2015-08-17 08:56:29 -0600 |
commit | 72fa45155b93a9763967cf215e3a9e60e3883cd9 (patch) | |
tree | 78d1bff9673e593ce63a1490cbb5d762e56f125a | |
parent | d90907cb5f7399196b76b3117e19ff4d1b775a96 (diff) | |
parent | 97e3b24aa661a88c39ab2182162f7010032a7caa (diff) | |
download | servo-72fa45155b93a9763967cf215e3a9e60e3883cd9.tar.gz servo-72fa45155b93a9763967cf215e3a9e60e3883cd9.zip |
Auto merge of #7252 - nnethercote:fix-reporter-panics, r=Ms2ger
Fix panics in the script_task memory reporter.
These are caused by page_root being empty.
@jdm, I think it was #6874 that introduced these. I'm seeing them all the time when starting Servo on Reddit with memory profiling enabled. With this patch applied they go away.
<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/7252)
<!-- Reviewable:end -->
-rw-r--r-- | components/script/script_task.rs | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/components/script/script_task.rs b/components/script/script_task.rs index 23ab43828e3..faf1f06d202 100644 --- a/components/script/script_task.rs +++ b/components/script/script_task.rs @@ -1188,23 +1188,26 @@ impl ScriptTask { let mut urls = vec![]; let mut dom_tree_size = 0; let mut reports = vec![]; - for it_page in self.root_page().iter() { - 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); + if let Some(root_page) = self.page.borrow().as_ref() { + for it_page in root_page.iter() { + 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 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(", ")); reports.extend(ScriptTask::get_reports(self.get_cx(), path_seg)); |