author | Ed Morley <emorley@mozilla.com> |
Tue, 10 Sep 2013 14:31:35 +0100 | |
changeset 146410 | ab0a4b4b9b1fd684cc38fe144782b5adb73a9985 |
parent 146409 | 19918a47a06f299b8a47f983db0eedde1d535c5e |
child 146411 | 5fd5f21d4663d636fdcfdfba8dd10c268142048f |
push id | 25260 |
push user | ryanvm@gmail.com |
push date | Wed, 11 Sep 2013 00:29:30 +0000 |
treeherder | mozilla-central@f73bed2856a8 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
bugs | 907048 |
milestone | 26.0a1 |
backs out | 6776e4836c045ca1dc9125a0b815436f71a67470 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/gfx/layers/composite/ContainerLayerComposite.cpp +++ b/gfx/layers/composite/ContainerLayerComposite.cpp @@ -42,48 +42,16 @@ HasOpaqueAncestorLayer(Layer* aLayer) { for (Layer* l = aLayer->GetParent(); l; l = l->GetParent()) { if (l->GetContentFlags() & Layer::CONTENT_OPAQUE) return true; } return false; } -/** - * Returns a rectangle of content painted opaquely by aLayer. Very consertative; - * bails by returning an empty rect in any tricky situations. - */ -static nsIntRect -GetOpaqueRect(Layer* aLayer) -{ - nsIntRect result; - // Just bail if there's anything difficult to handle. - if (!aLayer->GetEffectiveTransform().IsIdentity() || - aLayer->GetEffectiveOpacity() != 1.0f || - aLayer->GetMaskLayer()) { - return result; - } - if (aLayer->GetContentFlags() & Layer::CONTENT_OPAQUE) { - result = aLayer->GetEffectiveVisibleRegion().GetLargestRectangle(); - } else { - // Drill down into RefLayers because that's what we particularly care about; - // layer construction for aLayer will not have known about the opaqueness - // of any RefLayer subtrees. - RefLayer* refLayer = aLayer->AsRefLayer(); - if (refLayer) { - result = GetOpaqueRect(refLayer->GetFirstChild()); - } - } - const nsIntRect* clipRect = aLayer->GetEffectiveClipRect(); - if (clipRect) { - result.IntersectRect(result, *clipRect); - } - return result; -} - template<class ContainerT> void ContainerRender(ContainerT* aContainer, const nsIntPoint& aOffset, LayerManagerComposite* aManager, const nsIntRect& aClipRect) { /** * Setup our temporary surface for rendering the contents of this container. @@ -170,33 +138,16 @@ ContainerRender(ContainerT* aContainer, for (uint32_t i = 0; i < children.Length(); i++) { LayerComposite* layerToRender = static_cast<LayerComposite*>(children.ElementAt(i)->ImplData()); if (layerToRender->GetLayer()->GetEffectiveVisibleRegion().IsEmpty() && !layerToRender->GetLayer()->AsContainerLayer()) { continue; } - if (i + 1 < children.Length() && - layerToRender->GetLayer()->GetEffectiveTransform().IsIdentity()) { - LayerComposite* nextLayer = static_cast<LayerComposite*>(children.ElementAt(i + 1)->ImplData()); - nsIntRect nextLayerOpaqueRect; - if (nextLayer && nextLayer->GetLayer()) { - nextLayerOpaqueRect = GetOpaqueRect(nextLayer->GetLayer()); - } - if (!nextLayerOpaqueRect.IsEmpty()) { - nsIntRegion visibleRegion; - visibleRegion.Sub(layerToRender->GetShadowVisibleRegion(), nextLayerOpaqueRect); - layerToRender->SetShadowVisibleRegion(visibleRegion); - if (visibleRegion.IsEmpty()) { - continue; - } - } - } - nsIntRect clipRect = layerToRender->GetLayer()-> CalculateScissorRect(aClipRect, &aManager->GetWorldTransform()); if (clipRect.IsEmpty()) { continue; } layerToRender->RenderLayer(childOffset, clipRect); // invariant: our GL context should be current here, I don't think we can