From 3764de542be242a28d023a05b808dc69e4952a98 Mon Sep 17 00:00:00 2001 From: Sebastian Hengst Date: Sat, 2 Sep 2017 20:43:36 +0200 Subject: [PATCH] Backed out changeset b49d8d47c3f1 (bug 1382078) --- dom/xbl/nsBindingManager.cpp | 51 +++---------------------------- dom/xbl/nsBindingManager.h | 14 +++------ dom/xbl/nsXBLPrototypeBinding.cpp | 8 ----- dom/xbl/nsXBLPrototypeBinding.h | 1 - layout/style/ServoStyleSet.cpp | 50 ++++++------------------------ layout/style/ServoStyleSet.h | 43 ++++++-------------------- layout/style/test/mochitest.ini | 1 + 7 files changed, 30 insertions(+), 138 deletions(-) diff --git a/dom/xbl/nsBindingManager.cpp b/dom/xbl/nsBindingManager.cpp index e1bc1e066fb8..39d631d78560 100644 --- a/dom/xbl/nsBindingManager.cpp +++ b/dom/xbl/nsBindingManager.cpp @@ -50,7 +50,6 @@ #include "nsThreadUtils.h" #include "mozilla/dom/NodeListBinding.h" #include "mozilla/dom/ScriptSettings.h" -#include "mozilla/ServoStyleSet.h" #include "mozilla/Unused.h" using namespace mozilla; @@ -746,59 +745,19 @@ nsBindingManager::MediumFeaturesChanged(nsPresContext* aPresContext) { bool rulesChanged = false; RefPtr presContext = aPresContext; - bool isStyledByServo = mDocument->IsStyledByServo(); EnumerateBoundContentBindings([=, &rulesChanged](nsXBLBinding* aBinding) { - if (isStyledByServo) { - ServoStyleSet* styleSet = aBinding->PrototypeBinding()->GetServoStyleSet(); - if (styleSet) { - bool styleSetChanged = false; - - if (styleSet->IsPresContextChanged(presContext)) { - styleSetChanged = true; - } else { - // PresContext is not changed. This means aPresContext is still - // alive since the last time it initialized this XBL styleset. - // It's safe to check whether medium features changed. - bool viewportUnitsUsed = false; - styleSetChanged = - styleSet->MediumFeaturesChangedRules(&viewportUnitsUsed); - MOZ_ASSERT(!viewportUnitsUsed, - "Non-master stylesets shouldn't get flagged as using " - "viewport units!"); - } - rulesChanged = rulesChanged || styleSetChanged; - } - } else { - nsIStyleRuleProcessor* ruleProcessor = - aBinding->PrototypeBinding()->GetRuleProcessor(); - if (ruleProcessor) { - bool thisChanged = ruleProcessor->MediumFeaturesChanged(presContext); - rulesChanged = rulesChanged || thisChanged; - } + nsIStyleRuleProcessor* ruleProcessor = + aBinding->PrototypeBinding()->GetRuleProcessor(); + if (ruleProcessor) { + bool thisChanged = ruleProcessor->MediumFeaturesChanged(presContext); + rulesChanged = rulesChanged || thisChanged; } }); return rulesChanged; } -void -nsBindingManager::UpdateBoundContentBindingsForServo(nsPresContext* aPresContext) -{ - MOZ_ASSERT(mDocument->IsStyledByServo(), - "This should be called only by servo-backend!"); - - RefPtr presContext = aPresContext; - - EnumerateBoundContentBindings([=](nsXBLBinding* aBinding) { - nsXBLPrototypeBinding* protoBinding = aBinding->PrototypeBinding(); - ServoStyleSet* styleSet = protoBinding->GetServoStyleSet(); - if (styleSet && styleSet->StyleSheetsHaveChanged()) { - protoBinding->ComputeServoStyleSet(presContext); - } - }); -} - void nsBindingManager::AppendAllSheets(nsTArray& aArray) { diff --git a/dom/xbl/nsBindingManager.h b/dom/xbl/nsBindingManager.h index d18cc212e81d..cde7889e4454 100644 --- a/dom/xbl/nsBindingManager.h +++ b/dom/xbl/nsBindingManager.h @@ -130,17 +130,13 @@ public: void WalkAllRules(nsIStyleRuleProcessor::EnumFunc aFunc, ElementDependentRuleProcessorData* aData); - - // Do any processing that needs to happen as a result of a change in the - // characteristics of the medium, and return whether this rule processor's - // rules or the servo style set have changed (e.g., because of media - // queries). + /** + * Do any processing that needs to happen as a result of a change in + * the characteristics of the medium, and return whether this rule + * processor's rules have changed (e.g., because of media queries). + */ bool MediumFeaturesChanged(nsPresContext* aPresContext); - // Update the content bindings in mBoundContentSet due to medium features - // changed. - void UpdateBoundContentBindingsForServo(nsPresContext* aPresContext); - void AppendAllSheets(nsTArray& aArray); void Traverse(nsIContent *aContent, diff --git a/dom/xbl/nsXBLPrototypeBinding.cpp b/dom/xbl/nsXBLPrototypeBinding.cpp index 11a37aa6d324..e007cefb57b8 100644 --- a/dom/xbl/nsXBLPrototypeBinding.cpp +++ b/dom/xbl/nsXBLPrototypeBinding.cpp @@ -569,14 +569,6 @@ nsXBLPrototypeBinding::GetRuleProcessor() return nullptr; } -void -nsXBLPrototypeBinding::ComputeServoStyleSet(nsPresContext* aPresContext) -{ - if (mResources) { - mResources->ComputeServoStyleSet(aPresContext); - } -} - ServoStyleSet* nsXBLPrototypeBinding::GetServoStyleSet() const { diff --git a/dom/xbl/nsXBLPrototypeBinding.h b/dom/xbl/nsXBLPrototypeBinding.h index b2dce738188d..81765f539239 100644 --- a/dom/xbl/nsXBLPrototypeBinding.h +++ b/dom/xbl/nsXBLPrototypeBinding.h @@ -131,7 +131,6 @@ public: void AppendStyleSheetsTo(nsTArray& aResult) const; nsIStyleRuleProcessor* GetRuleProcessor(); - void ComputeServoStyleSet(nsPresContext* aPresContext); mozilla::ServoStyleSet* GetServoStyleSet() const; nsresult FlushSkinSheets(); diff --git a/layout/style/ServoStyleSet.cpp b/layout/style/ServoStyleSet.cpp index 860ee3a66b4d..d28016cfdd6c 100644 --- a/layout/style/ServoStyleSet.cpp +++ b/layout/style/ServoStyleSet.cpp @@ -109,8 +109,6 @@ void ServoStyleSet::Init(nsPresContext* aPresContext, nsBindingManager* aBindingManager) { mPresContext = aPresContext; - mPresContextInitXBLStyleSet = aPresContext; - mRawSet.reset(Servo_StyleSet_Init(aPresContext)); mBindingManager = aBindingManager; @@ -170,15 +168,11 @@ nsRestyleHint ServoStyleSet::MediumFeaturesChanged(bool aViewportChanged) { bool viewportUnitsUsed = false; - bool rulesChanged = MediumFeaturesChangedRules(&viewportUnitsUsed); + const OriginFlags rulesChanged = static_cast( + Servo_StyleSet_MediumFeaturesChanged(mRawSet.get(), &viewportUnitsUsed)); - if (mBindingManager && - mBindingManager->MediumFeaturesChanged(mPresContext)) { - SetStylistXBLStyleSheetsDirty(); - rulesChanged = true; - } - - if (rulesChanged) { + if (rulesChanged != OriginFlags(0)) { + MarkOriginsDirty(rulesChanged); return eRestyle_Subtree; } @@ -189,22 +183,6 @@ ServoStyleSet::MediumFeaturesChanged(bool aViewportChanged) return nsRestyleHint(0); } -bool -ServoStyleSet::MediumFeaturesChangedRules(bool* aViewportUnitsUsed) -{ - MOZ_ASSERT(aViewportUnitsUsed); - - const OriginFlags rulesChanged = static_cast( - Servo_StyleSet_MediumFeaturesChanged(mRawSet.get(), aViewportUnitsUsed)); - - if (rulesChanged != OriginFlags(0)) { - MarkOriginsDirty(rulesChanged); - return true; - } - - return false; -} - MOZ_DEFINE_MALLOC_SIZE_OF(ServoStyleSetMallocSizeOf) void @@ -1394,21 +1372,13 @@ ServoStyleSet::UpdateStylist() { MOZ_ASSERT(StylistNeedsUpdate()); - if (mStylistState & StylistState::StyleSheetsDirty) { - // There's no need to compute invalidations and such for an XBL styleset, - // since they are loaded and unloaded synchronously, and they don't have to - // deal with dynamic content changes. - Element* root = - IsMaster() ? mPresContext->Document()->GetDocumentElement() : nullptr; - - Servo_StyleSet_FlushStyleSheets(mRawSet.get(), root); - } - - if (MOZ_UNLIKELY(mStylistState & StylistState::XBLStyleSheetsDirty)) { - MOZ_ASSERT(IsMaster(), "Only master styleset can mark XBL stylesets dirty!"); - mBindingManager->UpdateBoundContentBindingsForServo(mPresContext); - } + // There's no need to compute invalidations and such for an XBL styleset, + // since they are loaded and unloaded synchronously, and they don't have to + // deal with dynamic content changes. + Element* root = + IsMaster() ? mPresContext->Document()->GetDocumentElement() : nullptr; + Servo_StyleSet_FlushStyleSheets(mRawSet.get(), root); mStylistState = StylistState::NotDirty; } diff --git a/layout/style/ServoStyleSet.h b/layout/style/ServoStyleSet.h index 27611b211d20..c48c7ea7eaf8 100644 --- a/layout/style/ServoStyleSet.h +++ b/layout/style/ServoStyleSet.h @@ -46,22 +46,18 @@ struct TreeMatchContext; namespace mozilla { -// A few flags used to track which kind of stylist state we may need to -// update. +/** + * A few flags used to track which kind of stylist state we may need to + * update. + */ enum class StylistState : uint8_t { - // The stylist is not dirty, we should do nothing. + /** The stylist is not dirty, we should do nothing */ NotDirty = 0, - // The style sheets have changed, so we need to update the style data. - StyleSheetsDirty = 1 << 0, - - // Some of the style sheets of the bound elements in binding manager have - // changed, so we need to tell the binding manager to update style data. - XBLStyleSheetsDirty = 1 << 1, + /** The style sheets have changed, so we need to update the style data. */ + StyleSheetsDirty, }; -MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(StylistState) - // Bitfield type to represent Servo stylesheet origins. enum class OriginFlags : uint8_t { UserAgent = 0x01, @@ -137,9 +133,6 @@ public: nsRestyleHint MediumFeaturesChanged(bool aViewportChanged); - // aViewportChanged outputs whether any viewport units is used. - bool MediumFeaturesChangedRules(bool* aViewportUnitsUsed); - void InvalidateStyleForCSSRuleChanges(); void AddSizeOfIncludingThis(nsWindowSizes& aSizes) const; @@ -440,11 +433,6 @@ public: mPresContext = nullptr; } - // Return whether this is the PresContext that initialized us. - bool IsPresContextChanged(nsPresContext* aPresContext) const { - return aPresContext != mPresContextInitXBLStyleSet; - } - /** * Returns true if a modification to an an attribute with the specified * local name might require us to restyle the element. @@ -537,12 +525,7 @@ private: */ void SetStylistStyleSheetsDirty() { - mStylistState |= StylistState::StyleSheetsDirty; - } - - void SetStylistXBLStyleSheetsDirty() - { - mStylistState |= StylistState::XBLStyleSheetsDirty; + mStylistState = StylistState::StyleSheetsDirty; } bool StylistNeedsUpdate() const @@ -582,15 +565,7 @@ private: ServoStyleSheet* aSheet); const Kind mKind; - - // Nullptr if this is an XBL style set. - nsPresContext* MOZ_NON_OWNING_REF mPresContext = nullptr; - - // Because XBL style set could be used by multiple PresContext, we need to - // store the PresContext pointer which initializes this style set for - // computing medium rule changes. - void* MOZ_NON_OWNING_REF mPresContextInitXBLStyleSet = nullptr; - + nsPresContext* mPresContext; UniquePtr mRawSet; EnumeratedArray>> mSheets; diff --git a/layout/style/test/mochitest.ini b/layout/style/test/mochitest.ini index fb7453603b3e..021494e6c99a 100644 --- a/layout/style/test/mochitest.ini +++ b/layout/style/test/mochitest.ini @@ -242,6 +242,7 @@ skip-if = !stylo skip-if = android_version == '18' #debug-only failure; timed out #Android 4.3 aws only; bug 1030419 [test_media_queries_dynamic.html] [test_media_queries_dynamic_xbl.html] +fail-if = stylo # bug 1382078 [test_media_query_list.html] [test_media_query_serialization.html] [test_moz_device_pixel_ratio.html]