mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 539356 - Part 20 - Simplify regions to avoid excessive region calculation. r=roc
This commit is contained in:
parent
e084d5ff7f
commit
67b104cbd1
@ -117,7 +117,7 @@ struct LayerPropertiesBase : public LayerProperties
|
|||||||
}
|
}
|
||||||
|
|
||||||
result = result.Union(ComputeChangeInternal(aCallback));
|
result = result.Union(ComputeChangeInternal(aCallback));
|
||||||
result = result.Union(TransformRect(mLayer->GetInvalidRect(), mTransform));
|
result = result.Union(TransformRect(mLayer->GetInvalidRegion().GetBounds(), mTransform));
|
||||||
|
|
||||||
if (mMaskLayer && otherMask) {
|
if (mMaskLayer && otherMask) {
|
||||||
nsIntRect maskDiff = mMaskLayer->ComputeChange(aCallback);
|
nsIntRect maskDiff = mMaskLayer->ComputeChange(aCallback);
|
||||||
|
@ -961,23 +961,23 @@ public:
|
|||||||
* Returns the current area of the layer (in layer-space coordinates)
|
* Returns the current area of the layer (in layer-space coordinates)
|
||||||
* marked as needed to be recomposited.
|
* marked as needed to be recomposited.
|
||||||
*/
|
*/
|
||||||
const nsIntRect& GetInvalidRect() { return mInvalidRect; }
|
const nsIntRegion& GetInvalidRegion() { return mInvalidRegion; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mark the entirety of the layer's visible region as being invalid.
|
* Mark the entirety of the layer's visible region as being invalid.
|
||||||
*/
|
*/
|
||||||
void SetInvalidRectToVisibleRegion() { mInvalidRect = GetVisibleRegion().GetBounds(); }
|
void SetInvalidRectToVisibleRegion() { mInvalidRegion = GetVisibleRegion(); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds to the current invalid rect.
|
* Adds to the current invalid rect.
|
||||||
*/
|
*/
|
||||||
void AddInvalidRect(const nsIntRect& aRect) { mInvalidRect = mInvalidRect.Union(aRect); }
|
void AddInvalidRect(const nsIntRect& aRect) { mInvalidRegion.Or(mInvalidRegion, aRect); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clear the invalid rect, marking the layer as being identical to what is currently
|
* Clear the invalid rect, marking the layer as being identical to what is currently
|
||||||
* composited.
|
* composited.
|
||||||
*/
|
*/
|
||||||
void ClearInvalidRect() { mInvalidRect.SetEmpty(); }
|
void ClearInvalidRect() { mInvalidRegion.SetEmpty(); }
|
||||||
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
@ -1041,7 +1041,7 @@ protected:
|
|||||||
float mOpacity;
|
float mOpacity;
|
||||||
nsIntRect mClipRect;
|
nsIntRect mClipRect;
|
||||||
nsIntRect mTileSourceRect;
|
nsIntRect mTileSourceRect;
|
||||||
nsIntRect mInvalidRect;
|
nsIntRegion mInvalidRegion;
|
||||||
uint32_t mContentFlags;
|
uint32_t mContentFlags;
|
||||||
bool mUseClipRect;
|
bool mUseClipRect;
|
||||||
bool mUseTileSourceRect;
|
bool mUseTileSourceRect;
|
||||||
|
@ -37,8 +37,9 @@ public:
|
|||||||
{
|
{
|
||||||
NS_ASSERTION(BasicManager()->InConstruction(),
|
NS_ASSERTION(BasicManager()->InConstruction(),
|
||||||
"Can only set properties in construction phase");
|
"Can only set properties in construction phase");
|
||||||
mValidRegion.Sub(mValidRegion, aRegion);
|
mInvalidRegion.Or(mInvalidRegion, aRegion);
|
||||||
AddInvalidRect(aRegion.GetBounds());
|
mInvalidRegion.SimplifyOutward(10);
|
||||||
|
mValidRegion.Sub(mValidRegion, mInvalidRegion);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void PaintThebes(gfxContext* aContext,
|
virtual void PaintThebes(gfxContext* aContext,
|
||||||
|
@ -45,8 +45,9 @@ ThebesLayerD3D10::~ThebesLayerD3D10()
|
|||||||
void
|
void
|
||||||
ThebesLayerD3D10::InvalidateRegion(const nsIntRegion &aRegion)
|
ThebesLayerD3D10::InvalidateRegion(const nsIntRegion &aRegion)
|
||||||
{
|
{
|
||||||
mValidRegion.Sub(mValidRegion, aRegion);
|
mInvalidRegion.Or(mInvalidRegion, aRegion);
|
||||||
AddInvalidRect(aRegion.GetBounds());
|
mInvalidRegion.SimplifyOutward(10);
|
||||||
|
mValidRegion.Sub(mValidRegion, mInvalidRegion);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ThebesLayerD3D10::CopyRegion(ID3D10Texture2D* aSrc, const nsIntPoint &aSrcOffset,
|
void ThebesLayerD3D10::CopyRegion(ID3D10Texture2D* aSrc, const nsIntPoint &aSrcOffset,
|
||||||
|
@ -49,8 +49,9 @@ ThebesLayerD3D9::~ThebesLayerD3D9()
|
|||||||
void
|
void
|
||||||
ThebesLayerD3D9::InvalidateRegion(const nsIntRegion &aRegion)
|
ThebesLayerD3D9::InvalidateRegion(const nsIntRegion &aRegion)
|
||||||
{
|
{
|
||||||
mValidRegion.Sub(mValidRegion, aRegion);
|
mInvalidRegion.Or(mInvalidRegion, aRegion);
|
||||||
AddInvalidRect(aRegion.GetBounds());
|
mInvalidRegion.SimplifyOutward(10);
|
||||||
|
mValidRegion.Sub(mValidRegion, mInvalidRegion);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -789,8 +789,9 @@ ThebesLayerOGL::SetVisibleRegion(const nsIntRegion &aRegion)
|
|||||||
void
|
void
|
||||||
ThebesLayerOGL::InvalidateRegion(const nsIntRegion &aRegion)
|
ThebesLayerOGL::InvalidateRegion(const nsIntRegion &aRegion)
|
||||||
{
|
{
|
||||||
mValidRegion.Sub(mValidRegion, aRegion);
|
mInvalidRegion.Or(mInvalidRegion, aRegion);
|
||||||
AddInvalidRect(aRegion.GetBounds());
|
mInvalidRegion.SimplifyOutward(10);
|
||||||
|
mValidRegion.Sub(mValidRegion, mInvalidRegion);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1092,6 +1092,8 @@ void nsDisplayList::PaintForFrame(nsDisplayListBuilder* aBuilder,
|
|||||||
nsIntRect invalid;
|
nsIntRect invalid;
|
||||||
if (props) {
|
if (props) {
|
||||||
invalid = props->ComputeDifferences(root, computeInvalidFunc);
|
invalid = props->ComputeDifferences(root, computeInvalidFunc);
|
||||||
|
} else if (widgetTransaction) {
|
||||||
|
LayerProperties::ClearInvalidations(root);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (view) {
|
if (view) {
|
||||||
|
@ -5254,6 +5254,8 @@ PresShell::Paint(nsIView* aViewToPaint,
|
|||||||
nsIntRect invalid;
|
nsIntRect invalid;
|
||||||
if (props) {
|
if (props) {
|
||||||
invalid = props->ComputeDifferences(layerManager->GetRoot(), computeInvalidFunc);
|
invalid = props->ComputeDifferences(layerManager->GetRoot(), computeInvalidFunc);
|
||||||
|
} else {
|
||||||
|
LayerProperties::ClearInvalidations(layerManager->GetRoot());
|
||||||
}
|
}
|
||||||
if (!invalid.IsEmpty()) {
|
if (!invalid.IsEmpty()) {
|
||||||
if (props) {
|
if (props) {
|
||||||
|
Loading…
Reference in New Issue
Block a user