aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout/layout_task.rs
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2015-12-16 23:18:30 +0530
committerbors-servo <lbergstrom+bors@mozilla.com>2015-12-16 23:18:30 +0530
commitbc7158310ce8abf6605840f1c23013640703e285 (patch)
tree788e1134def020d1406ef3f9f098edb4fd863f99 /components/layout/layout_task.rs
parent39b205daccb96ebfcc5b396fc828381fa2a8c252 (diff)
parent2ee446de5d987c911f91dafa499d8a9f7df61995 (diff)
downloadservo-bc7158310ce8abf6605840f1c23013640703e285.tar.gz
servo-bc7158310ce8abf6605840f1c23013640703e285.zip
Auto merge of #8903 - KiChjang:layout-reporter-redirect, r=nox
fix for Layout memory reporter uses pre-redirect url Rebase of #7612. Fixes #6872. <!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/8903) <!-- Reviewable:end -->
Diffstat (limited to 'components/layout/layout_task.rs')
-rw-r--r--components/layout/layout_task.rs31
1 files changed, 19 insertions, 12 deletions
diff --git a/components/layout/layout_task.rs b/components/layout/layout_task.rs
index 35a78594034..4f93a147e95 100644
--- a/components/layout/layout_task.rs
+++ b/components/layout/layout_task.rs
@@ -55,6 +55,7 @@ use script_traits::{ConstellationControlMsg, LayoutControlMsg, OpaqueScriptLayou
use sequential;
use serde_json;
use std::borrow::ToOwned;
+use std::cell::RefCell;
use std::collections::HashMap;
use std::collections::hash_state::DefaultState;
use std::mem::transmute;
@@ -119,7 +120,7 @@ pub struct LayoutTask {
id: PipelineId,
/// The URL of the pipeline that we belong to.
- url: Url,
+ url: RefCell<Url>,
/// Is the current reflow of an iframe, as opposed to a root window?
is_iframe: bool,
@@ -404,7 +405,7 @@ impl LayoutTask {
LayoutTask {
id: id,
- url: url,
+ url: RefCell::new(url),
is_iframe: is_iframe,
port: port,
pipeline_port: pipeline_receiver,
@@ -567,7 +568,7 @@ impl LayoutTask {
};
let mut layout_context = self.build_shared_layout_context(&*rw_data,
false,
- &self.url,
+ &self.url.borrow(),
reflow_info.goal);
self.perform_post_style_recalc_layout_passes(&reflow_info,
@@ -625,6 +626,9 @@ impl LayoutTask {
Msg::CreateLayoutTask(info) => {
self.create_layout_task(info)
}
+ Msg::SetFinalUrl(final_url) => {
+ *self.url.borrow_mut() = final_url;
+ },
Msg::PrepareToExit(response_chan) => {
self.prepare_to_exit(response_chan);
return false
@@ -647,15 +651,16 @@ impl LayoutTask {
// FIXME(njn): Just measuring the display tree for now.
let rw_data = possibly_locked_rw_data.lock();
let stacking_context = rw_data.stacking_context.as_ref();
+ let ref formatted_url = format!("url({})", *self.url.borrow());
reports.push(Report {
- path: path![format!("url({})", self.url), "layout-task", "display-list"],
+ path: path![formatted_url, "layout-task", "display-list"],
kind: ReportKind::ExplicitJemallocHeapSize,
size: stacking_context.map_or(0, |sc| sc.heap_size_of_children()),
});
// The LayoutTask has a context in TLS...
reports.push(Report {
- path: path![format!("url({})", self.url), "layout-task", "local-context"],
+ path: path![formatted_url, "layout-task", "local-context"],
kind: ReportKind::ExplicitJemallocHeapSize,
size: heap_size_of_local_context(),
});
@@ -665,7 +670,7 @@ impl LayoutTask {
let sizes = traversal.heap_size_of_tls(heap_size_of_local_context);
for (i, size) in sizes.iter().enumerate() {
reports.push(Report {
- path: path![format!("url({})", self.url),
+ path: path![formatted_url,
format!("layout-worker-{}-local-context", i)],
kind: ReportKind::ExplicitJemallocHeapSize,
size: *size,
@@ -912,7 +917,7 @@ impl LayoutTask {
let document = unsafe { ServoLayoutNode::new(&data.document) };
let document = document.as_document().unwrap();
- debug!("layout: received layout request for: {}", self.url.serialize());
+ debug!("layout: received layout request for: {}", self.url.borrow().serialize());
let mut rw_data = possibly_locked_rw_data.lock();
@@ -943,6 +948,8 @@ impl LayoutTask {
Some(x) => x,
};
+ debug!("layout: received layout request for: {}",
+ self.url.borrow().serialize());
if log_enabled!(log::LogLevel::Debug) {
node.dump();
}
@@ -1007,7 +1014,7 @@ impl LayoutTask {
// Create a layout context for use throughout the following passes.
let mut shared_layout_context = self.build_shared_layout_context(&*rw_data,
viewport_size_changed,
- &self.url,
+ &self.url.borrow(),
data.reflow_info.goal);
if node.is_dirty() || node.has_dirty_descendants() {
@@ -1120,7 +1127,7 @@ impl LayoutTask {
let mut layout_context = self.build_shared_layout_context(&*rw_data,
false,
- &self.url,
+ &self.url.borrow(),
reflow_info.goal);
self.perform_post_main_layout_passes(&reflow_info, &mut *rw_data, &mut layout_context);
@@ -1144,7 +1151,7 @@ impl LayoutTask {
let mut layout_context = self.build_shared_layout_context(&*rw_data,
false,
- &self.url,
+ &self.url.borrow(),
reflow_info.goal);
if let Some(mut root_flow) = self.root_flow.clone() {
@@ -1175,7 +1182,7 @@ impl LayoutTask {
let mut layout_context = self.build_shared_layout_context(&*rw_data,
false,
- &self.url,
+ &self.url.borrow(),
reflow_info.goal);
// No need to do a style recalc here.
@@ -1299,7 +1306,7 @@ impl LayoutTask {
/// Returns profiling information which is passed to the time profiler.
fn profiler_metadata(&self) -> Option<TimerMetadata> {
Some(TimerMetadata {
- url: self.url.serialize(),
+ url: self.url.borrow().serialize(),
iframe: if self.is_iframe {
TimerMetadataFrameType::IFrame
} else {