remove option for origin and mirror changes to layout_thread_2020

This commit is contained in:
Kunal Mohan 2020-02-18 00:57:33 +05:30
parent a5b43b7df1
commit 4a3bf52a7c
No known key found for this signature in database
GPG key ID: 2B475A4524237BAC
7 changed files with 62 additions and 46 deletions

View file

@ -3227,14 +3227,14 @@ where
}, },
} }
}, },
AnimationTickType::Layout => { AnimationTickType::Layout => match self.pipelines.get(&pipeline_id) {
let msg = LayoutControlMsg::TickAnimations; Some(pipeline) => {
match self.pipelines.get(&pipeline_id) { let msg = LayoutControlMsg::TickAnimations(pipeline.load_data.url.origin());
Some(pipeline) => pipeline.layout_chan.send(msg), pipeline.layout_chan.send(msg)
},
None => { None => {
return warn!("Pipeline {:?} got layout tick after closure.", pipeline_id); return warn!("Pipeline {:?} got layout tick after closure.", pipeline_id);
}, },
}
}, },
}; };
if let Err(e) = result { if let Err(e) = result {

View file

@ -88,6 +88,7 @@ impl<'a> LayoutContext<'a> {
state: PendingImageState::Unrequested(url), state: PendingImageState::Unrequested(url),
node: node.into(), node: node.into(),
id: id, id: id,
origin: self.origin.clone(),
}; };
self.pending_images self.pending_images
.as_ref() .as_ref()
@ -108,6 +109,7 @@ impl<'a> LayoutContext<'a> {
state: PendingImageState::PendingResponse, state: PendingImageState::PendingResponse,
node: node.into(), node: node.into(),
id: id, id: id,
origin: self.origin.clone(),
}; };
pending_images.lock().unwrap().push(image); pending_images.lock().unwrap().push(image);
} }

View file

@ -644,18 +644,14 @@ impl LayoutThread {
guards: StylesheetGuards<'a>, guards: StylesheetGuards<'a>,
script_initiated_layout: bool, script_initiated_layout: bool,
snapshot_map: &'a SnapshotMap, snapshot_map: &'a SnapshotMap,
origin: Option<ImmutableOrigin>, origin: ImmutableOrigin,
) -> LayoutContext<'a> { ) -> LayoutContext<'a> {
let thread_local_style_context_creation_data = let thread_local_style_context_creation_data =
ThreadLocalStyleContextCreationInfo::new(self.new_animations_sender.clone()); ThreadLocalStyleContextCreationInfo::new(self.new_animations_sender.clone());
LayoutContext { LayoutContext {
id: self.id, id: self.id,
origin: if let Some(origin) = origin { origin,
origin
} else {
self.url.origin()
},
style_context: SharedStyleContext { style_context: SharedStyleContext {
stylist: &self.stylist, stylist: &self.stylist,
options: GLOBAL_STYLE_DATA.options.clone(), options: GLOBAL_STYLE_DATA.options.clone(),
@ -693,7 +689,7 @@ impl LayoutThread {
Msg::SetQuirksMode(..) => LayoutHangAnnotation::SetQuirksMode, Msg::SetQuirksMode(..) => LayoutHangAnnotation::SetQuirksMode,
Msg::Reflow(..) => LayoutHangAnnotation::Reflow, Msg::Reflow(..) => LayoutHangAnnotation::Reflow,
Msg::GetRPC(..) => LayoutHangAnnotation::GetRPC, Msg::GetRPC(..) => LayoutHangAnnotation::GetRPC,
Msg::TickAnimations => LayoutHangAnnotation::TickAnimations, Msg::TickAnimations(..) => LayoutHangAnnotation::TickAnimations,
Msg::AdvanceClockMs(..) => LayoutHangAnnotation::AdvanceClockMs, Msg::AdvanceClockMs(..) => LayoutHangAnnotation::AdvanceClockMs,
Msg::ReapStyleAndLayoutData(..) => LayoutHangAnnotation::ReapStyleAndLayoutData, Msg::ReapStyleAndLayoutData(..) => LayoutHangAnnotation::ReapStyleAndLayoutData,
Msg::CollectReports(..) => LayoutHangAnnotation::CollectReports, Msg::CollectReports(..) => LayoutHangAnnotation::CollectReports,
@ -739,8 +735,8 @@ impl LayoutThread {
Msg::SetScrollStates(new_scroll_states), Msg::SetScrollStates(new_scroll_states),
possibly_locked_rw_data, possibly_locked_rw_data,
), ),
Request::FromPipeline(LayoutControlMsg::TickAnimations) => { Request::FromPipeline(LayoutControlMsg::TickAnimations(origin)) => {
self.handle_request_helper(Msg::TickAnimations, possibly_locked_rw_data) self.handle_request_helper(Msg::TickAnimations(origin), possibly_locked_rw_data)
}, },
Request::FromPipeline(LayoutControlMsg::GetCurrentEpoch(sender)) => { Request::FromPipeline(LayoutControlMsg::GetCurrentEpoch(sender)) => {
self.handle_request_helper(Msg::GetCurrentEpoch(sender), possibly_locked_rw_data) self.handle_request_helper(Msg::GetCurrentEpoch(sender), possibly_locked_rw_data)
@ -813,7 +809,9 @@ impl LayoutThread {
|| self.handle_reflow(&mut data, possibly_locked_rw_data), || self.handle_reflow(&mut data, possibly_locked_rw_data),
); );
}, },
Msg::TickAnimations => self.tick_all_animations(possibly_locked_rw_data), Msg::TickAnimations(origin) => {
self.tick_all_animations(possibly_locked_rw_data, origin)
},
Msg::SetScrollStates(new_scroll_states) => { Msg::SetScrollStates(new_scroll_states) => {
self.set_scroll_states(new_scroll_states, possibly_locked_rw_data); self.set_scroll_states(new_scroll_states, possibly_locked_rw_data);
}, },
@ -841,8 +839,8 @@ impl LayoutThread {
let _rw_data = possibly_locked_rw_data.lock(); let _rw_data = possibly_locked_rw_data.lock();
sender.send(self.epoch.get()).unwrap(); sender.send(self.epoch.get()).unwrap();
}, },
Msg::AdvanceClockMs(how_many, do_tick) => { Msg::AdvanceClockMs(how_many, do_tick, origin) => {
self.handle_advance_clock_ms(how_many, possibly_locked_rw_data, do_tick); self.handle_advance_clock_ms(how_many, possibly_locked_rw_data, do_tick, origin);
}, },
Msg::GetWebFontLoadState(sender) => { Msg::GetWebFontLoadState(sender) => {
let _rw_data = possibly_locked_rw_data.lock(); let _rw_data = possibly_locked_rw_data.lock();
@ -1022,10 +1020,11 @@ impl LayoutThread {
how_many_ms: i32, how_many_ms: i32,
possibly_locked_rw_data: &mut RwData<'a, 'b>, possibly_locked_rw_data: &mut RwData<'a, 'b>,
tick_animations: bool, tick_animations: bool,
origin: ImmutableOrigin,
) { ) {
self.timer.increment(how_many_ms as f64 / 1000.0); self.timer.increment(how_many_ms as f64 / 1000.0);
if tick_animations { if tick_animations {
self.tick_all_animations(possibly_locked_rw_data); self.tick_all_animations(possibly_locked_rw_data, origin);
} }
} }
@ -1489,8 +1488,7 @@ impl LayoutThread {
self.stylist.flush(&guards, Some(element), Some(&map)); self.stylist.flush(&guards, Some(element), Some(&map));
// Create a layout context for use throughout the following passes. // Create a layout context for use throughout the following passes.
let mut layout_context = let mut layout_context = self.build_layout_context(guards.clone(), true, &map, origin);
self.build_layout_context(guards.clone(), true, &map, Some(origin));
let pool; let pool;
let (thread_pool, num_threads) = if self.parallel_flag { let (thread_pool, num_threads) = if self.parallel_flag {
@ -1718,12 +1716,16 @@ impl LayoutThread {
rw_data.scroll_offsets = layout_scroll_states rw_data.scroll_offsets = layout_scroll_states
} }
fn tick_all_animations<'a, 'b>(&mut self, possibly_locked_rw_data: &mut RwData<'a, 'b>) { fn tick_all_animations<'a, 'b>(
&mut self,
possibly_locked_rw_data: &mut RwData<'a, 'b>,
origin: ImmutableOrigin,
) {
let mut rw_data = possibly_locked_rw_data.lock(); let mut rw_data = possibly_locked_rw_data.lock();
self.tick_animations(&mut rw_data); self.tick_animations(&mut rw_data, origin);
} }
fn tick_animations(&mut self, rw_data: &mut LayoutThreadData) { fn tick_animations(&mut self, rw_data: &mut LayoutThreadData, origin: ImmutableOrigin) {
if self.relayout_event { if self.relayout_event {
println!( println!(
"**** pipeline={}\tForDisplay\tSpecial\tAnimationTick", "**** pipeline={}\tForDisplay\tSpecial\tAnimationTick",
@ -1746,7 +1748,7 @@ impl LayoutThread {
ua_or_user: &ua_or_user_guard, ua_or_user: &ua_or_user_guard,
}; };
let snapshots = SnapshotMap::new(); let snapshots = SnapshotMap::new();
let mut layout_context = self.build_layout_context(guards, false, &snapshots, None); let mut layout_context = self.build_layout_context(guards, false, &snapshots, origin);
let invalid_nodes = { let invalid_nodes = {
// Perform an abbreviated style recalc that operates without access to the DOM. // Perform an abbreviated style recalc that operates without access to the DOM.

View file

@ -74,7 +74,7 @@ use servo_arc::Arc as ServoArc;
use servo_atoms::Atom; use servo_atoms::Atom;
use servo_config::opts; use servo_config::opts;
use servo_config::pref; use servo_config::pref;
use servo_url::ServoUrl; use servo_url::{ImmutableOrigin, ServoUrl};
use std::cell::{Cell, RefCell}; use std::cell::{Cell, RefCell};
use std::collections::HashMap; use std::collections::HashMap;
use std::ops::{Deref, DerefMut}; use std::ops::{Deref, DerefMut};
@ -589,13 +589,14 @@ impl LayoutThread {
guards: StylesheetGuards<'a>, guards: StylesheetGuards<'a>,
script_initiated_layout: bool, script_initiated_layout: bool,
snapshot_map: &'a SnapshotMap, snapshot_map: &'a SnapshotMap,
origin: ImmutableOrigin,
) -> LayoutContext<'a> { ) -> LayoutContext<'a> {
let thread_local_style_context_creation_data = let thread_local_style_context_creation_data =
ThreadLocalStyleContextCreationInfo::new(self.new_animations_sender.clone()); ThreadLocalStyleContextCreationInfo::new(self.new_animations_sender.clone());
LayoutContext { LayoutContext {
id: self.id, id: self.id,
origin: self.url.origin(), origin,
style_context: SharedStyleContext { style_context: SharedStyleContext {
stylist: &self.stylist, stylist: &self.stylist,
options: GLOBAL_STYLE_DATA.options.clone(), options: GLOBAL_STYLE_DATA.options.clone(),
@ -628,7 +629,7 @@ impl LayoutThread {
Msg::SetQuirksMode(..) => LayoutHangAnnotation::SetQuirksMode, Msg::SetQuirksMode(..) => LayoutHangAnnotation::SetQuirksMode,
Msg::Reflow(..) => LayoutHangAnnotation::Reflow, Msg::Reflow(..) => LayoutHangAnnotation::Reflow,
Msg::GetRPC(..) => LayoutHangAnnotation::GetRPC, Msg::GetRPC(..) => LayoutHangAnnotation::GetRPC,
Msg::TickAnimations => LayoutHangAnnotation::TickAnimations, Msg::TickAnimations(..) => LayoutHangAnnotation::TickAnimations,
Msg::AdvanceClockMs(..) => LayoutHangAnnotation::AdvanceClockMs, Msg::AdvanceClockMs(..) => LayoutHangAnnotation::AdvanceClockMs,
Msg::ReapStyleAndLayoutData(..) => LayoutHangAnnotation::ReapStyleAndLayoutData, Msg::ReapStyleAndLayoutData(..) => LayoutHangAnnotation::ReapStyleAndLayoutData,
Msg::CollectReports(..) => LayoutHangAnnotation::CollectReports, Msg::CollectReports(..) => LayoutHangAnnotation::CollectReports,
@ -674,8 +675,8 @@ impl LayoutThread {
Msg::SetScrollStates(new_scroll_states), Msg::SetScrollStates(new_scroll_states),
possibly_locked_rw_data, possibly_locked_rw_data,
), ),
Request::FromPipeline(LayoutControlMsg::TickAnimations) => { Request::FromPipeline(LayoutControlMsg::TickAnimations(origin)) => {
self.handle_request_helper(Msg::TickAnimations, possibly_locked_rw_data) self.handle_request_helper(Msg::TickAnimations(origin), possibly_locked_rw_data)
}, },
Request::FromPipeline(LayoutControlMsg::GetCurrentEpoch(sender)) => { Request::FromPipeline(LayoutControlMsg::GetCurrentEpoch(sender)) => {
self.handle_request_helper(Msg::GetCurrentEpoch(sender), possibly_locked_rw_data) self.handle_request_helper(Msg::GetCurrentEpoch(sender), possibly_locked_rw_data)
@ -748,7 +749,7 @@ impl LayoutThread {
|| self.handle_reflow(&mut data, possibly_locked_rw_data), || self.handle_reflow(&mut data, possibly_locked_rw_data),
); );
}, },
Msg::TickAnimations => self.tick_all_animations(), Msg::TickAnimations(origin) => self.tick_all_animations(origin),
Msg::SetScrollStates(new_scroll_states) => { Msg::SetScrollStates(new_scroll_states) => {
self.set_scroll_states(new_scroll_states, possibly_locked_rw_data); self.set_scroll_states(new_scroll_states, possibly_locked_rw_data);
}, },
@ -776,8 +777,8 @@ impl LayoutThread {
let _rw_data = possibly_locked_rw_data.lock(); let _rw_data = possibly_locked_rw_data.lock();
sender.send(self.epoch.get()).unwrap(); sender.send(self.epoch.get()).unwrap();
}, },
Msg::AdvanceClockMs(how_many, do_tick) => { Msg::AdvanceClockMs(how_many, do_tick, origin) => {
self.handle_advance_clock_ms(how_many, do_tick); self.handle_advance_clock_ms(how_many, do_tick, origin);
}, },
Msg::GetWebFontLoadState(sender) => { Msg::GetWebFontLoadState(sender) => {
let _rw_data = possibly_locked_rw_data.lock(); let _rw_data = possibly_locked_rw_data.lock();
@ -914,10 +915,15 @@ impl LayoutThread {
} }
/// Advances the animation clock of the document. /// Advances the animation clock of the document.
fn handle_advance_clock_ms<'a, 'b>(&mut self, how_many_ms: i32, tick_animations: bool) { fn handle_advance_clock_ms<'a, 'b>(
&mut self,
how_many_ms: i32,
tick_animations: bool,
origin: ImmutableOrigin,
) {
self.timer.increment(how_many_ms as f64 / 1000.0); self.timer.increment(how_many_ms as f64 / 1000.0);
if tick_animations { if tick_animations {
self.tick_all_animations(); self.tick_all_animations(origin);
} }
} }
@ -995,6 +1001,8 @@ impl LayoutThread {
Au::from_f32_px(initial_viewport.height), Au::from_f32_px(initial_viewport.height),
); );
let origin = data.origin.clone();
// Calculate the actual viewport as per DEVICE-ADAPT § 6 // Calculate the actual viewport as per DEVICE-ADAPT § 6
// If the entire flow tree is invalid, then it will be reflowed anyhow. // If the entire flow tree is invalid, then it will be reflowed anyhow.
let document_shared_lock = document.style_shared_lock(); let document_shared_lock = document.style_shared_lock();
@ -1117,7 +1125,7 @@ impl LayoutThread {
self.stylist.flush(&guards, Some(element), Some(&map)); self.stylist.flush(&guards, Some(element), Some(&map));
// Create a layout context for use throughout the following passes. // Create a layout context for use throughout the following passes.
let mut layout_context = self.build_layout_context(guards.clone(), true, &map); let mut layout_context = self.build_layout_context(guards.clone(), true, &map, origin);
let traversal = RecalcStyle::new(layout_context); let traversal = RecalcStyle::new(layout_context);
let token = { let token = {
@ -1324,11 +1332,11 @@ impl LayoutThread {
rw_data.scroll_offsets = layout_scroll_states rw_data.scroll_offsets = layout_scroll_states
} }
fn tick_all_animations<'a, 'b>(&mut self) { fn tick_all_animations<'a, 'b>(&mut self, origin: ImmutableOrigin) {
self.tick_animations(); self.tick_animations(origin);
} }
fn tick_animations(&mut self) { fn tick_animations(&mut self, origin: ImmutableOrigin) {
if self.relayout_event { if self.relayout_event {
println!( println!(
"**** pipeline={}\tForDisplay\tSpecial\tAnimationTick", "**** pipeline={}\tForDisplay\tSpecial\tAnimationTick",
@ -1347,7 +1355,7 @@ impl LayoutThread {
ua_or_user: &ua_or_user_guard, ua_or_user: &ua_or_user_guard,
}; };
let snapshots = SnapshotMap::new(); let snapshots = SnapshotMap::new();
let mut layout_context = self.build_layout_context(guards, false, &snapshots); let mut layout_context = self.build_layout_context(guards, false, &snapshots, origin);
self.perform_post_style_recalc_layout_passes( self.perform_post_style_recalc_layout_passes(
root, root,

View file

@ -1548,7 +1548,11 @@ impl Window {
/// forces a reflow if `tick` is true. /// forces a reflow if `tick` is true.
pub fn advance_animation_clock(&self, delta: i32, tick: bool) { pub fn advance_animation_clock(&self, delta: i32, tick: bool) {
self.layout_chan self.layout_chan
.send(Msg::AdvanceClockMs(delta, tick)) .send(Msg::AdvanceClockMs(
delta,
tick,
self.origin().immutable().clone(),
))
.unwrap(); .unwrap();
} }

View file

@ -47,13 +47,13 @@ pub enum Msg {
GetRPC(Sender<Box<dyn LayoutRPC + Send>>), GetRPC(Sender<Box<dyn LayoutRPC + Send>>),
/// Requests that the layout thread render the next frame of all animations. /// Requests that the layout thread render the next frame of all animations.
TickAnimations, TickAnimations(ImmutableOrigin),
/// Updates layout's timer for animation testing from script. /// Updates layout's timer for animation testing from script.
/// ///
/// The inner field is the number of *milliseconds* to advance, and the bool /// The inner field is the number of *milliseconds* to advance, and the bool
/// field is whether animations should be force-ticked. /// field is whether animations should be force-ticked.
AdvanceClockMs(i32, bool), AdvanceClockMs(i32, bool, ImmutableOrigin),
/// Destroys layout data associated with a DOM node. /// Destroys layout data associated with a DOM node.
/// ///

View file

@ -124,7 +124,7 @@ pub enum LayoutControlMsg {
/// Requests the current epoch (layout counter) from this layout. /// Requests the current epoch (layout counter) from this layout.
GetCurrentEpoch(IpcSender<Epoch>), GetCurrentEpoch(IpcSender<Epoch>),
/// Asks layout to run another step in its animation. /// Asks layout to run another step in its animation.
TickAnimations, TickAnimations(ImmutableOrigin),
/// Tells layout about the new scrolling offsets of each scrollable stacking context. /// Tells layout about the new scrolling offsets of each scrollable stacking context.
SetScrollStates(Vec<ScrollState>), SetScrollStates(Vec<ScrollState>),
/// Requests the current load state of Web fonts. `true` is returned if fonts are still loading /// Requests the current load state of Web fonts. `true` is returned if fonts are still loading