зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1339629 Part 10: Implement ServoStyleSet::EnsureUniqueInnerOnCSSSheets. r=heycam
MozReview-Commit-ID: GuUqKYrV60z --HG-- extra : rebase_source : 6a433ab77e2295450cc68ad0dc9d2e55ba08976a
This commit is contained in:
Родитель
450a0513e2
Коммит
50e3299bf1
|
@ -568,16 +568,6 @@ CSSStyleSheet::GetStyleRuleAt(int32_t aIndex) const
|
|||
return Inner()->mOrderedRules.SafeObjectAt(aIndex);
|
||||
}
|
||||
|
||||
void
|
||||
CSSStyleSheet::AppendAllChildSheets(nsTArray<CSSStyleSheet*>& aArray)
|
||||
{
|
||||
for (StyleSheet* child = GetFirstChild(); child;
|
||||
child = child->mNext) {
|
||||
|
||||
aArray.AppendElement(child->AsGecko());
|
||||
}
|
||||
}
|
||||
|
||||
already_AddRefed<StyleSheet>
|
||||
CSSStyleSheet::Clone(StyleSheet* aCloneParent,
|
||||
css::ImportRule* aCloneOwnerRule,
|
||||
|
|
|
@ -140,9 +140,6 @@ public:
|
|||
NS_IMETHOD StyleSheetLoaded(StyleSheet* aSheet, bool aWasAlternate,
|
||||
nsresult aStatus) override;
|
||||
|
||||
// Append all of this sheet's child sheets to aArray.
|
||||
void AppendAllChildSheets(nsTArray<CSSStyleSheet*>& aArray);
|
||||
|
||||
bool UseForPresentation(nsPresContext* aPresContext,
|
||||
nsMediaQueryResultCacheKey& aKey) const;
|
||||
|
||||
|
|
|
@ -987,9 +987,29 @@ ServoStyleSet::ComputeAnimationValue(
|
|||
bool
|
||||
ServoStyleSet::EnsureUniqueInnerOnCSSSheets()
|
||||
{
|
||||
AutoTArray<StyleSheet*, 32> queue;
|
||||
for (auto& entryArray : mSheets) {
|
||||
for (auto& sheet : entryArray) {
|
||||
queue.AppendElement(sheet);
|
||||
}
|
||||
}
|
||||
// This is a stub until more of the functionality of nsStyleSet is
|
||||
// replicated for Servo here.
|
||||
|
||||
// Bug 1290276 will replicate the nsStyleSet work of checking
|
||||
// a nsBindingManager
|
||||
|
||||
while (!queue.IsEmpty()) {
|
||||
uint32_t idx = queue.Length() - 1;
|
||||
StyleSheet* sheet = queue[idx];
|
||||
queue.RemoveElementAt(idx);
|
||||
|
||||
sheet->EnsureUniqueInner();
|
||||
|
||||
// Enqueue all the sheet's children.
|
||||
sheet->AppendAllChildSheets(queue);
|
||||
}
|
||||
|
||||
bool res = mNeedsRestyleAfterEnsureUniqueInner;
|
||||
mNeedsRestyleAfterEnsureUniqueInner = false;
|
||||
return res;
|
||||
|
|
|
@ -458,6 +458,14 @@ StyleSheet::EnsureUniqueInner()
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
StyleSheet::AppendAllChildSheets(nsTArray<StyleSheet*>& aArray)
|
||||
{
|
||||
for (StyleSheet* child = GetFirstChild(); child; child = child->mNext) {
|
||||
aArray.AppendElement(child);
|
||||
}
|
||||
}
|
||||
|
||||
// WebIDL CSSStyleSheet API
|
||||
|
||||
#define FORWARD_INTERNAL(method_, args_) \
|
||||
|
|
|
@ -124,6 +124,9 @@ public:
|
|||
|
||||
void EnsureUniqueInner();
|
||||
|
||||
// Append all of this sheet's child sheets to aArray.
|
||||
void AppendAllChildSheets(nsTArray<StyleSheet*>& aArray);
|
||||
|
||||
// style sheet owner info
|
||||
enum DocumentAssociationMode {
|
||||
// OwnedByDocument means mDocument owns us (possibly via a chain of other
|
||||
|
|
|
@ -2638,9 +2638,9 @@ nsStyleSet::MediumFeaturesChanged()
|
|||
bool
|
||||
nsStyleSet::EnsureUniqueInnerOnCSSSheets()
|
||||
{
|
||||
AutoTArray<CSSStyleSheet*, 32> queue;
|
||||
AutoTArray<StyleSheet*, 32> queue;
|
||||
for (SheetType type : gCSSSheetTypes) {
|
||||
for (CSSStyleSheet* sheet : mSheets[type]) {
|
||||
for (StyleSheet* sheet : mSheets[type]) {
|
||||
queue.AppendElement(sheet);
|
||||
}
|
||||
}
|
||||
|
@ -2660,7 +2660,7 @@ nsStyleSet::EnsureUniqueInnerOnCSSSheets()
|
|||
|
||||
while (!queue.IsEmpty()) {
|
||||
uint32_t idx = queue.Length() - 1;
|
||||
CSSStyleSheet* sheet = queue[idx];
|
||||
StyleSheet* sheet = queue[idx];
|
||||
queue.RemoveElementAt(idx);
|
||||
|
||||
sheet->EnsureUniqueInner();
|
||||
|
|
Загрузка…
Ссылка в новой задаче