Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
style: Use update() to update declarations from Servo_DeclarationBloc…
…k_SetPropertyToAnimationValue.

This method is used when updating the SMIL override style and from Web
Animations' Animation.commitStyles method. By using update we accurately return
false when no change is made to a declaration block.

For SMIL this simply acts as an optimization, meaning we can avoid updating the
SMIL override style ub some cases.

For Animation.commitStyles, however, this allows us to avoid generating
a mutation record. Normally making a redundant change to an attribute *does*
generate a mutation record but the style attribute is different. All browsers
avoid generating a mutation record for a redundant change to inline style.
This is specified in the behavior for setProperty[1] which does not update the
style attribute if updated is false.

[1] https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-setproperty

Differential Revision: https://phabricator.services.mozilla.com/D30871
  • Loading branch information
birtles authored and emilio committed May 29, 2019
1 parent eba393c commit 7cf2e38
Showing 1 changed file with 8 additions and 0 deletions.
8 changes: 8 additions & 0 deletions components/style/properties/properties.mako.rs
Expand Up @@ -2337,6 +2337,14 @@ impl SourcePropertyDeclaration {
}
}

/// Create one with a single PropertyDeclaration.
#[inline]
pub fn with_one(decl: PropertyDeclaration) -> Self {
let mut result = Self::new();
result.declarations.push(decl);
result
}

/// Similar to Vec::drain: leaves this empty when the return value is dropped.
pub fn drain(&mut self) -> SourcePropertyDeclarationDrain {
SourcePropertyDeclarationDrain {
Expand Down

0 comments on commit 7cf2e38

Please sign in to comment.