Revert "Backed out changeset b10e6ba9cbdb because gecko part had to be backed out."

This reverts commit b96d96d448.

The fix on the Gecko side is trivial, and I can land it after this lands.
This commit is contained in:
Emilio Cobos Álvarez 2017-07-20 17:26:53 +02:00
parent 3d3f30a3f9
commit ef4fbfaa6b
No known key found for this signature in database
GPG key ID: 056B727BB9C1027C
6 changed files with 18 additions and 10 deletions

View file

@ -161,7 +161,9 @@ pub fn recalc_style_for_animations(context: &LayoutContext,
&mut fragment.style,
&ServoMetricsProvider);
let difference =
RestyleDamage::compute_style_difference(&old_style, &fragment.style);
RestyleDamage::compute_style_difference(&old_style,
&old_style,
&fragment.style);
damage |= difference.damage;
}
}

View file

@ -1047,8 +1047,9 @@ extern "C" {
-> CSSPseudoElementType;
}
extern "C" {
pub fn Gecko_CalcStyleDifference(oldstyle: *mut nsStyleContext,
newstyle: ServoComputedValuesBorrowed,
pub fn Gecko_CalcStyleDifference(old_style: *const ServoStyleContext,
new_style: *const ServoStyleContext,
old_style_bits: u64,
any_style_changed: *mut bool)
-> nsChangeHint;
}

View file

@ -48,14 +48,14 @@ impl GeckoRestyleDamage {
/// accessed from layout.
pub fn compute_style_difference(
source: &nsStyleContext,
new_style: &Arc<ComputedValues>
old_style: &ComputedValues,
new_style: &Arc<ComputedValues>,
) -> StyleDifference {
// TODO(emilio): Const-ify this?
let context = source as *const nsStyleContext as *mut nsStyleContext;
let mut any_style_changed: bool = false;
let hint = unsafe {
bindings::Gecko_CalcStyleDifference(context,
&new_style,
bindings::Gecko_CalcStyleDifference(old_style.as_style_context(),
new_style.as_style_context(),
source.mBits,
&mut any_style_changed)
};
let change = if any_style_changed { StyleChange::Changed } else { StyleChange::Unchanged };

View file

@ -768,7 +768,7 @@ pub trait MatchMethods : TElement {
) -> StyleDifference {
debug_assert!(pseudo.map_or(true, |p| p.is_eager()));
if let Some(source) = self.existing_style_for_restyle_damage(old_values, pseudo) {
return RestyleDamage::compute_style_difference(source, new_values)
return RestyleDamage::compute_style_difference(source, old_values, new_values)
}
let new_display = new_values.get_box().clone_display();

View file

@ -137,6 +137,10 @@ impl ComputedValues {
let atom = Atom::from(atom);
PseudoElement::from_atom(&atom)
}
pub fn as_style_context(&self) -> &::gecko_bindings::structs::mozilla::ServoStyleContext {
&self.0
}
}
impl Drop for ComputedValues {

View file

@ -60,7 +60,8 @@ impl HeapSizeOf for ServoRestyleDamage {
impl ServoRestyleDamage {
/// Compute the `StyleDifference` (including the appropriate restyle damage)
/// for a given style change between `old` and `new`.
pub fn compute_style_difference(old: &ComputedValues,
pub fn compute_style_difference(_source: &ComputedValues,
old: &ComputedValues,
new: &ComputedValues)
-> StyleDifference {
let damage = compute_damage(old, new);