mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 19:35:51 +00:00
Bug 1039145 - Part 1: Clean up AreComponentAlphaLayersEnabled. r=roc
This commit is contained in:
parent
10606c58a7
commit
865651f293
@ -155,6 +155,12 @@ LayerManager::CreateAsynchronousImageContainer()
|
||||
return container.forget();
|
||||
}
|
||||
|
||||
bool
|
||||
LayerManager::AreComponentAlphaLayersEnabled()
|
||||
{
|
||||
return gfxPrefs::ComponentAlphaEnabled();
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
// Layer
|
||||
|
||||
@ -1023,7 +1029,8 @@ ContainerLayer::DefaultComputeEffectiveTransforms(const Matrix4x4& aTransformToS
|
||||
void
|
||||
ContainerLayer::DefaultComputeSupportsComponentAlphaChildren(bool* aNeedsSurfaceCopy)
|
||||
{
|
||||
if (!(GetContentFlags() & Layer::CONTENT_COMPONENT_ALPHA_DESCENDANT)) {
|
||||
if (!(GetContentFlags() & Layer::CONTENT_COMPONENT_ALPHA_DESCENDANT) ||
|
||||
!Manager()->AreComponentAlphaLayersEnabled()) {
|
||||
mSupportsComponentAlphaChildren = false;
|
||||
if (aNeedsSurfaceCopy) {
|
||||
*aNeedsSurfaceCopy = false;
|
||||
@ -1031,32 +1038,30 @@ ContainerLayer::DefaultComputeSupportsComponentAlphaChildren(bool* aNeedsSurface
|
||||
return;
|
||||
}
|
||||
|
||||
bool supportsComponentAlphaChildren = false;
|
||||
mSupportsComponentAlphaChildren = false;
|
||||
bool needsSurfaceCopy = false;
|
||||
CompositionOp blendMode = GetEffectiveMixBlendMode();
|
||||
if (UseIntermediateSurface()) {
|
||||
if (GetEffectiveVisibleRegion().GetNumRects() == 1 &&
|
||||
(GetContentFlags() & Layer::CONTENT_OPAQUE))
|
||||
{
|
||||
supportsComponentAlphaChildren = true;
|
||||
mSupportsComponentAlphaChildren = true;
|
||||
} else {
|
||||
gfx::Matrix transform;
|
||||
if (HasOpaqueAncestorLayer(this) &&
|
||||
GetEffectiveTransform().Is2D(&transform) &&
|
||||
!gfx::ThebesMatrix(transform).HasNonIntegerTranslation() &&
|
||||
blendMode == gfx::CompositionOp::OP_OVER) {
|
||||
supportsComponentAlphaChildren = true;
|
||||
mSupportsComponentAlphaChildren = true;
|
||||
needsSurfaceCopy = true;
|
||||
}
|
||||
}
|
||||
} else if (blendMode == gfx::CompositionOp::OP_OVER) {
|
||||
supportsComponentAlphaChildren =
|
||||
mSupportsComponentAlphaChildren =
|
||||
(GetContentFlags() & Layer::CONTENT_OPAQUE) ||
|
||||
(GetParent() && GetParent()->SupportsComponentAlphaChildren());
|
||||
}
|
||||
|
||||
mSupportsComponentAlphaChildren = supportsComponentAlphaChildren &&
|
||||
gfxPrefs::ComponentAlphaEnabled();
|
||||
if (aNeedsSurfaceCopy) {
|
||||
*aNeedsSurfaceCopy = mSupportsComponentAlphaChildren && needsSurfaceCopy;
|
||||
}
|
||||
|
@ -308,12 +308,20 @@ public:
|
||||
|
||||
bool IsSnappingEffectiveTransforms() { return mSnapEffectiveTransforms; }
|
||||
|
||||
|
||||
/**
|
||||
* Returns true if the layer manager can't render component alpha
|
||||
* layers, and layer building should do it's best to avoid
|
||||
* creating them.
|
||||
*/
|
||||
virtual bool ShouldAvoidComponentAlphaLayers() { return false; }
|
||||
|
||||
/**
|
||||
* Returns true if this LayerManager can properly support layers with
|
||||
* SurfaceMode::SURFACE_COMPONENT_ALPHA. This can include disabling component
|
||||
* alpha if required.
|
||||
* SurfaceMode::SURFACE_COMPONENT_ALPHA. LayerManagers that can't will use
|
||||
* transparent surfaces (and lose subpixel-AA for text).
|
||||
*/
|
||||
virtual bool AreComponentAlphaLayersEnabled() { return true; }
|
||||
virtual bool AreComponentAlphaLayersEnabled();
|
||||
|
||||
/**
|
||||
* CONSTRUCTION PHASE ONLY
|
||||
|
@ -105,7 +105,7 @@ public:
|
||||
virtual void EndTransaction(DrawThebesLayerCallback aCallback,
|
||||
void* aCallbackData,
|
||||
EndTransactionFlags aFlags = END_DEFAULT);
|
||||
virtual bool AreComponentAlphaLayersEnabled() { return !IsWidgetLayerManager(); }
|
||||
virtual bool ShouldAvoidComponentAlphaLayers() { return IsWidgetLayerManager(); }
|
||||
|
||||
void AbortTransaction();
|
||||
|
||||
|
@ -146,7 +146,7 @@ public:
|
||||
CompositorChild* GetCompositorChild();
|
||||
|
||||
// Disable component alpha layers with the software compositor.
|
||||
virtual bool AreComponentAlphaLayersEnabled() MOZ_OVERRIDE { return IsCompositingCheap(); }
|
||||
virtual bool ShouldAvoidComponentAlphaLayers() { return !IsCompositingCheap(); }
|
||||
|
||||
/**
|
||||
* Called for each iteration of a progressive tile update. Updates
|
||||
|
@ -3419,7 +3419,7 @@ FrameLayerBuilder::BuildContainerLayerFor(nsDisplayListBuilder* aBuilder,
|
||||
int32_t appUnitsPerDevPixel;
|
||||
uint32_t stateFlags = 0;
|
||||
if ((aContainerFrame->GetStateBits() & NS_FRAME_NO_COMPONENT_ALPHA) &&
|
||||
mRetainingManager && !mRetainingManager->AreComponentAlphaLayersEnabled()) {
|
||||
mRetainingManager && mRetainingManager->ShouldAvoidComponentAlphaLayers()) {
|
||||
stateFlags = ContainerState::NO_COMPONENT_ALPHA;
|
||||
}
|
||||
uint32_t flags;
|
||||
@ -3441,7 +3441,7 @@ FrameLayerBuilder::BuildContainerLayerFor(nsDisplayListBuilder* aBuilder,
|
||||
|
||||
if (hasComponentAlphaChildren &&
|
||||
mRetainingManager &&
|
||||
!mRetainingManager->AreComponentAlphaLayersEnabled() &&
|
||||
mRetainingManager->ShouldAvoidComponentAlphaLayers() &&
|
||||
containerLayer->HasMultipleChildren() &&
|
||||
!stateFlags) {
|
||||
// Since we don't want any component alpha layers on BasicLayers, we repeat
|
||||
|
Loading…
Reference in New Issue
Block a user