aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <metajack+bors@gmail.com>2015-08-17 08:56:29 -0600
committerbors-servo <metajack+bors@gmail.com>2015-08-17 08:56:29 -0600
commit72fa45155b93a9763967cf215e3a9e60e3883cd9 (patch)
tree78d1bff9673e593ce63a1490cbb5d762e56f125a
parentd90907cb5f7399196b76b3117e19ff4d1b775a96 (diff)
parent97e3b24aa661a88c39ab2182162f7010032a7caa (diff)
downloadservo-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.rs31
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));