Bug 1432968 - Cache the value of In3DContextAndBackfaceIsHidden during display list buidling. r=miko

--HG--
extra : rebase_source : d22ade7260b9e1ea71837b9a262e2ebd931902b9
This commit is contained in:
Matt Woodrow 2018-01-03 18:31:04 +13:00
Родитель af8879d1eb
Коммит 28b39888b0
3 изменённых файлов: 7 добавлений и 13 удалений

Просмотреть файл

@ -3606,7 +3606,7 @@ ContainerState::NewPaintedLayerData(nsDisplayItem* aItem,
data.mClipChain = aClipChain;
data.mAnimatedGeometryRootOffset = aTopLeft;
data.mReferenceFrame = aItem->ReferenceFrame();
data.mBackfaceHidden = aItem->Frame()->In3DContextAndBackfaceIsHidden();
data.mBackfaceHidden = aItem->In3DContextAndBackfaceIsHidden();
data.mNewChildLayersIndex = mNewChildLayers.Length();
NewLayerEntry* newLayerEntry = mNewChildLayers.AppendElement();
@ -4442,7 +4442,7 @@ ContainerState::ProcessDisplayItems(nsDisplayList* aList)
PaintedLayerData* paintedLayerData =
mPaintedLayerDataTree.FindPaintedLayerFor(animatedGeometryRoot, itemASR, layerClipChain,
itemVisibleRect,
item->Frame()->In3DContextAndBackfaceIsHidden(),
item->In3DContextAndBackfaceIsHidden(),
[&]() {
return NewPaintedLayerData(item, animatedGeometryRoot, itemASR, layerClipChain, scrollMetadataASR,
topLeft);

Просмотреть файл

@ -2949,6 +2949,7 @@ nsDisplayItem::nsDisplayItem(nsDisplayListBuilder* aBuilder, nsIFrame* aFrame,
, mForceNotVisible(aBuilder->IsBuildingInvisibleItems())
, mDisableSubpixelAA(false)
, mReusedItem(false)
, mBackfaceHidden(mFrame->In3DContextAndBackfaceIsHidden())
#ifdef MOZ_DUMP_PAINTING
, mPainted(false)
#endif

Просмотреть файл

@ -2003,6 +2003,7 @@ public:
, mForceNotVisible(false)
, mDisableSubpixelAA(false)
, mReusedItem(false)
, mBackfaceHidden(mFrame->In3DContextAndBackfaceIsHidden())
#ifdef MOZ_DUMP_PAINTING
, mPainted(false)
#endif
@ -2074,6 +2075,7 @@ public:
, mForceNotVisible(aOther.mForceNotVisible)
, mDisableSubpixelAA(aOther.mDisableSubpixelAA)
, mReusedItem(false)
, mBackfaceHidden(mFrame->In3DContextAndBackfaceIsHidden())
#ifdef MOZ_DUMP_PAINTING
, mPainted(false)
#endif
@ -2704,16 +2706,7 @@ public:
bool In3DContextAndBackfaceIsHidden()
{
if (mBackfaceHidden) {
return *mBackfaceHidden;
}
// We never need to invalidate this cached value since we're
// guaranteed to rebuild the display item entirely if it changes.
bool backfaceHidden = Frame()->In3DContextAndBackfaceIsHidden();
mBackfaceHidden.emplace(backfaceHidden);
return backfaceHidden;
return mBackfaceHidden;
}
bool HasSameTypeAndClip(const nsDisplayItem* aOther) const
@ -2774,11 +2767,11 @@ protected:
bool mForceNotVisible;
bool mDisableSubpixelAA;
bool mReusedItem;
bool mBackfaceHidden;
#ifdef MOZ_DUMP_PAINTING
// True if this frame has been painted.
bool mPainted;
#endif
mozilla::Maybe<bool> mBackfaceHidden;
struct {
nsRect mVisibleRect;