Bug 1235566 - Respect will-change: background-position. r?dbaron
--- a/layout/base/ActiveLayerTracker.cpp
+++ b/layout/base/ActiveLayerTracker.cpp
@@ -414,16 +414,22 @@ ActiveLayerTracker::IsStyleAnimated(nsDi
(!aBuilder || aBuilder->IsInWillChangeBudget(aFrame, aFrame->GetSize()))) {
return true;
}
if ((aFrame->StyleDisplay()->mWillChangeBitField & NS_STYLE_WILL_CHANGE_OPACITY) &&
aProperty == eCSSProperty_opacity &&
(!aBuilder || aBuilder->IsInWillChangeBudget(aFrame, aFrame->GetSize()))) {
return true;
}
+ if ((aFrame->StyleDisplay()->mWillChangeBitField & NS_STYLE_WILL_CHANGE_BACKGROUND_POS) &&
+ (aProperty == eCSSProperty_background_position_x ||
+ aProperty == eCSSProperty_background_position_y) &&
+ (!aBuilder || aBuilder->IsInWillChangeBudget(aFrame, aFrame->GetSize()))) {
+ return true;
+ }
LayerActivity* layerActivity = GetLayerActivity(aFrame);
if (layerActivity) {
LayerActivity::ActivityIndex activityIndex = LayerActivity::GetActivityIndexForProperty(aProperty);
if (layerActivity->mRestyleCounts[activityIndex] >= 2) {
return true;
}
if (CheckScrollInducedActivity(layerActivity, activityIndex, aBuilder)) {
--- a/layout/style/nsRuleNode.cpp
+++ b/layout/style/nsRuleNode.cpp
@@ -6092,16 +6092,22 @@ nsRuleNode::ComputeDisplayData(void* aSt
display->mWillChangeBitField |= NS_STYLE_WILL_CHANGE_TRANSFORM;
}
if (buffer.EqualsLiteral("opacity")) {
display->mWillChangeBitField |= NS_STYLE_WILL_CHANGE_OPACITY;
}
if (buffer.EqualsLiteral("scroll-position")) {
display->mWillChangeBitField |= NS_STYLE_WILL_CHANGE_SCROLL;
}
+ if (buffer.EqualsLiteral("background") ||
+ buffer.EqualsLiteral("background-position") ||
+ buffer.EqualsLiteral("background-position-x") ||
+ buffer.EqualsLiteral("background-position-y")) {
+ display->mWillChangeBitField |= NS_STYLE_WILL_CHANGE_BACKGROUND_POS;
+ }
nsCSSProperty prop =
nsCSSProps::LookupProperty(buffer,
nsCSSProps::eEnabledForAllContent);
if (prop != eCSSProperty_UNKNOWN &&
prop != eCSSPropertyExtra_variable) {
if (nsCSSProps::PropHasFlags(prop,
CSS_PROPERTY_CREATES_STACKING_CONTEXT)) {
--- a/layout/style/nsStyleConsts.h
+++ b/layout/style/nsStyleConsts.h
@@ -240,16 +240,17 @@ enum class StyleBoxSizing : uint8_t {
// See nsStyleDisplay
#define NS_STYLE_WILL_CHANGE_STACKING_CONTEXT (1<<0)
#define NS_STYLE_WILL_CHANGE_TRANSFORM (1<<1)
#define NS_STYLE_WILL_CHANGE_SCROLL (1<<2)
#define NS_STYLE_WILL_CHANGE_OPACITY (1<<3)
#define NS_STYLE_WILL_CHANGE_FIXPOS_CB (1<<4)
#define NS_STYLE_WILL_CHANGE_ABSPOS_CB (1<<5)
+#define NS_STYLE_WILL_CHANGE_BACKGROUND_POS (1<<5)
// See AnimationEffectReadOnly.webidl
// and mozilla/dom/AnimationEffectReadOnlyBinding.h
namespace dom {
enum class PlaybackDirection : uint32_t;
enum class FillMode : uint32_t;
}