зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1397060 - Don't call ComputeOpaqueRect unless we're going to make use of the result. r=mstange
MozReview-Commit-ID: 2yGybisiLcx
This commit is contained in:
Родитель
d289ad01ba
Коммит
ac26c2873e
|
@ -475,10 +475,10 @@ public:
|
||||||
*/
|
*/
|
||||||
void Accumulate(ContainerState* aState,
|
void Accumulate(ContainerState* aState,
|
||||||
nsDisplayItem* aItem,
|
nsDisplayItem* aItem,
|
||||||
const nsIntRegion& aClippedOpaqueRegion,
|
|
||||||
const nsIntRect& aVisibleRect,
|
const nsIntRect& aVisibleRect,
|
||||||
const DisplayItemClip& aClip,
|
const DisplayItemClip& aClip,
|
||||||
LayerState aLayerState);
|
LayerState aLayerState,
|
||||||
|
nsDisplayList *aList);
|
||||||
AnimatedGeometryRoot* GetAnimatedGeometryRoot() { return mAnimatedGeometryRoot; }
|
AnimatedGeometryRoot* GetAnimatedGeometryRoot() { return mAnimatedGeometryRoot; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -3431,10 +3431,10 @@ IsItemAreaInWindowOpaqueRegion(nsDisplayListBuilder* aBuilder,
|
||||||
void
|
void
|
||||||
PaintedLayerData::Accumulate(ContainerState* aState,
|
PaintedLayerData::Accumulate(ContainerState* aState,
|
||||||
nsDisplayItem* aItem,
|
nsDisplayItem* aItem,
|
||||||
const nsIntRegion& aClippedOpaqueRegion,
|
|
||||||
const nsIntRect& aVisibleRect,
|
const nsIntRect& aVisibleRect,
|
||||||
const DisplayItemClip& aClip,
|
const DisplayItemClip& aClip,
|
||||||
LayerState aLayerState)
|
LayerState aLayerState,
|
||||||
|
nsDisplayList* aList)
|
||||||
{
|
{
|
||||||
FLB_LOG_PAINTED_LAYER_DECISION(this, "Accumulating dp=%s(%p), f=%p against pld=%p\n", aItem->Name(), aItem, aItem->Frame(), this);
|
FLB_LOG_PAINTED_LAYER_DECISION(this, "Accumulating dp=%s(%p), f=%p against pld=%p\n", aItem->Name(), aItem, aItem->Frame(), this);
|
||||||
|
|
||||||
|
@ -3470,11 +3470,16 @@ PaintedLayerData::Accumulate(ContainerState* aState,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nsIntRegion opaquePixels = aState->ComputeOpaqueRect(aItem,
|
||||||
|
mAnimatedGeometryRoot, mASR, aClip, aList,
|
||||||
|
&mHideAllLayersBelow, &mOpaqueForAnimatedGeometryRootParent);
|
||||||
|
opaquePixels.AndWith(aVisibleRect);
|
||||||
|
|
||||||
/* Mark as available for conversion to image layer if this is a nsDisplayImage and
|
/* Mark as available for conversion to image layer if this is a nsDisplayImage and
|
||||||
* it's the only thing visible in this layer.
|
* it's the only thing visible in this layer.
|
||||||
*/
|
*/
|
||||||
if (nsIntRegion(aVisibleRect).Contains(mVisibleRegion) &&
|
if (nsIntRegion(aVisibleRect).Contains(mVisibleRegion) &&
|
||||||
aClippedOpaqueRegion.Contains(mVisibleRegion) &&
|
opaquePixels.Contains(mVisibleRegion) &&
|
||||||
aItem->SupportsOptimizingToImage()) {
|
aItem->SupportsOptimizingToImage()) {
|
||||||
mImage = static_cast<nsDisplayImageContainer*>(aItem);
|
mImage = static_cast<nsDisplayImageContainer*>(aItem);
|
||||||
FLB_LOG_PAINTED_LAYER_DECISION(this, " Tracking image: nsDisplayImageContainer covers the layer\n");
|
FLB_LOG_PAINTED_LAYER_DECISION(this, " Tracking image: nsDisplayImageContainer covers the layer\n");
|
||||||
|
@ -3525,8 +3530,8 @@ PaintedLayerData::Accumulate(ContainerState* aState,
|
||||||
mVisibleRegion.SimplifyOutward(4);
|
mVisibleRegion.SimplifyOutward(4);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!aClippedOpaqueRegion.IsEmpty()) {
|
if (!opaquePixels.IsEmpty()) {
|
||||||
for (auto iter = aClippedOpaqueRegion.RectIter(); !iter.Done(); iter.Next()) {
|
for (auto iter = opaquePixels.RectIter(); !iter.Done(); iter.Next()) {
|
||||||
// We don't use SimplifyInward here since it's not defined exactly
|
// We don't use SimplifyInward here since it's not defined exactly
|
||||||
// what it will discard. For our purposes the most important case
|
// what it will discard. For our purposes the most important case
|
||||||
// is a large opaque background at the bottom of z-order (e.g.,
|
// is a large opaque background at the bottom of z-order (e.g.,
|
||||||
|
@ -4486,14 +4491,7 @@ ContainerState::ProcessDisplayItems(nsDisplayList* aList,
|
||||||
if (mManager->IsWidgetLayerManager()) {
|
if (mManager->IsWidgetLayerManager()) {
|
||||||
paintedLayerData->UpdateCommonClipCount(itemClip);
|
paintedLayerData->UpdateCommonClipCount(itemClip);
|
||||||
}
|
}
|
||||||
nsIntRegion opaquePixels = ComputeOpaqueRect(item,
|
paintedLayerData->Accumulate(this, item, itemVisibleRect, itemClip, layerState, aList);
|
||||||
animatedGeometryRoot, itemASR, itemClip, aList,
|
|
||||||
&paintedLayerData->mHideAllLayersBelow,
|
|
||||||
&paintedLayerData->mOpaqueForAnimatedGeometryRootParent);
|
|
||||||
MOZ_ASSERT(nsIntRegion(itemDrawRect).Contains(opaquePixels));
|
|
||||||
opaquePixels.AndWith(itemVisibleRect);
|
|
||||||
paintedLayerData->Accumulate(this, item, opaquePixels,
|
|
||||||
itemVisibleRect, itemClip, layerState);
|
|
||||||
|
|
||||||
if (!paintedLayerData->mLayer) {
|
if (!paintedLayerData->mLayer) {
|
||||||
// Try to recycle the old layer of this display item.
|
// Try to recycle the old layer of this display item.
|
||||||
|
|
Загрузка…
Ссылка в новой задаче