mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-21 09:15:35 +00:00
Bug 1539673 - Make sure we build layers for empty items, since they might contain hit test information. r=miko
Depends on D25169 Differential Revision: https://phabricator.services.mozilla.com/D25331 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
fed842fadd
commit
b7d051a4cb
@ -33,7 +33,11 @@ waitUntilApzStable()
|
||||
<div id="spacer" style="height: 2000px">
|
||||
Inside the black border is a zero-opacity touch-action none.
|
||||
<div id="border" style="border: solid 1px black">
|
||||
<div id="target" style="opacity: 0; height: 300px; touch-action: none">this text shouldn't be visible</div>
|
||||
<div style="opacity: 0; height: 300px;">
|
||||
<div style="transform:translate(0px)">
|
||||
<div id="target" style="height: 300px; touch-action: none">this text shouldn't be visible</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
@ -4618,15 +4618,6 @@ void ContainerState::ProcessDisplayItems(nsDisplayList* aList) {
|
||||
item->Frame(), item->GetPerFrameKey());
|
||||
InvalidateForLayerChange(item, nullptr, oldData);
|
||||
|
||||
// If the item would have its own layer but is invisible, just hide it.
|
||||
// Note that items without their own layers can't be skipped this
|
||||
// way, since their PaintedLayer may decide it wants to draw them
|
||||
// into its buffer even if they're currently covered.
|
||||
if (itemVisibleRect.IsEmpty() &&
|
||||
!item->ShouldBuildLayerEvenIfInvisible(mBuilder)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 3D-transformed layers don't necessarily draw in the order in which
|
||||
// they're added to their parent container layer.
|
||||
bool mayDrawOutOfOrder = itemType == DisplayItemType::TYPE_TRANSFORM &&
|
||||
|
@ -6473,13 +6473,6 @@ bool nsDisplayOwnLayer::IsZoomingLayer() const {
|
||||
return GetType() == DisplayItemType::TYPE_ASYNC_ZOOM;
|
||||
}
|
||||
|
||||
bool nsDisplayOwnLayer::ShouldBuildLayerEvenIfInvisible(
|
||||
nsDisplayListBuilder* aBuilder) const {
|
||||
// Render scroll thumb layers even if they are invisible, because async
|
||||
// scrolling might bring them into view.
|
||||
return IsScrollThumbLayer();
|
||||
}
|
||||
|
||||
// nsDisplayOpacity uses layers for rendering
|
||||
already_AddRefed<Layer> nsDisplayOwnLayer::BuildLayer(
|
||||
nsDisplayListBuilder* aBuilder, LayerManager* aManager,
|
||||
@ -6834,18 +6827,6 @@ bool nsDisplaySubDocument::ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
return visible;
|
||||
}
|
||||
|
||||
bool nsDisplaySubDocument::ShouldBuildLayerEvenIfInvisible(
|
||||
nsDisplayListBuilder* aBuilder) const {
|
||||
bool usingDisplayPort = UseDisplayPortForViewport(aBuilder, mFrame);
|
||||
|
||||
if ((mFlags & nsDisplayOwnLayerFlags::eGenerateScrollableLayer) &&
|
||||
usingDisplayPort) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return nsDisplayOwnLayer::ShouldBuildLayerEvenIfInvisible(aBuilder);
|
||||
}
|
||||
|
||||
nsRegion nsDisplaySubDocument::GetOpaqueRegion(nsDisplayListBuilder* aBuilder,
|
||||
bool* aSnap) const {
|
||||
bool usingDisplayPort = UseDisplayPortForViewport(aBuilder, mFrame);
|
||||
@ -8150,14 +8131,6 @@ const Matrix4x4& nsDisplayTransform::GetAccumulatedPreserved3DTransform(
|
||||
return *mTransformPreserves3D;
|
||||
}
|
||||
|
||||
bool nsDisplayTransform::ShouldBuildLayerEvenIfInvisible(
|
||||
nsDisplayListBuilder* aBuilder) const {
|
||||
// The visible rect of a Preserves-3D frame is just an intermediate
|
||||
// result. It should always build a layer to make sure it is
|
||||
// rendering correctly.
|
||||
return MayBeAnimated(aBuilder) || Combines3DTransformWithAncestors();
|
||||
}
|
||||
|
||||
bool nsDisplayTransform::CreateWebRenderCommands(
|
||||
mozilla::wr::DisplayListBuilder& aBuilder,
|
||||
mozilla::wr::IpcResourceUpdateQueue& aResources,
|
||||
|
@ -2546,15 +2546,6 @@ class nsDisplayItem : public nsDisplayItemLink {
|
||||
return mozilla::LAYER_NONE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true to indicate the layer should be constructed even if it's
|
||||
* completely invisible.
|
||||
*/
|
||||
virtual bool ShouldBuildLayerEvenIfInvisible(
|
||||
nsDisplayListBuilder* aBuilder) const {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if this item supports PaintWithClip, where the clipping
|
||||
* is used directly as the primitive geometry instead of needing an explicit
|
||||
@ -5876,8 +5867,6 @@ class nsDisplayOwnLayer : public nsDisplayWrapList {
|
||||
|
||||
NS_DISPLAY_DECL_NAME("OwnLayer", TYPE_OWN_LAYER)
|
||||
|
||||
bool ShouldBuildLayerEvenIfInvisible(
|
||||
nsDisplayListBuilder* aBuilder) const override;
|
||||
already_AddRefed<Layer> BuildLayer(
|
||||
nsDisplayListBuilder* aBuilder, LayerManager* aManager,
|
||||
const ContainerLayerParameters& aContainerParameters) override;
|
||||
@ -5981,9 +5970,6 @@ class nsDisplaySubDocument : public nsDisplayOwnLayer {
|
||||
|
||||
bool ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion) override;
|
||||
bool ShouldBuildLayerEvenIfInvisible(
|
||||
nsDisplayListBuilder* aBuilder) const override;
|
||||
|
||||
bool ShouldFlattenAway(nsDisplayListBuilder* aBuilder) override {
|
||||
return mShouldFlatten;
|
||||
}
|
||||
@ -6256,11 +6242,6 @@ class nsDisplayScrollInfoLayer : public nsDisplayWrapList {
|
||||
nsDisplayListBuilder* aBuilder, LayerManager* aManager,
|
||||
const ContainerLayerParameters& aContainerParameters) override;
|
||||
|
||||
bool ShouldBuildLayerEvenIfInvisible(
|
||||
nsDisplayListBuilder* aBuilder) const override {
|
||||
return true;
|
||||
}
|
||||
|
||||
nsRegion GetOpaqueRegion(nsDisplayListBuilder* aBuilder,
|
||||
bool* aSnap) const override {
|
||||
*aSnap = false;
|
||||
@ -6726,8 +6707,6 @@ class nsDisplayTransform : public nsDisplayHitTestInfoItem {
|
||||
bool UpdateScrollData(
|
||||
mozilla::layers::WebRenderScrollData* aData,
|
||||
mozilla::layers::WebRenderLayerScrollData* aLayerData) override;
|
||||
bool ShouldBuildLayerEvenIfInvisible(
|
||||
nsDisplayListBuilder* aBuilder) const override;
|
||||
bool ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||
nsRegion* aVisibleRegion) override;
|
||||
|
||||
@ -7053,15 +7032,6 @@ class nsDisplayPerspective : public nsDisplayHitTestInfoItem {
|
||||
mozilla::layers::RenderRootStateManager* aManager,
|
||||
nsDisplayListBuilder* aDisplayListBuilder) override;
|
||||
|
||||
bool ShouldBuildLayerEvenIfInvisible(
|
||||
nsDisplayListBuilder* aBuilder) const override {
|
||||
if (!mList.GetChildren()->GetTop()) {
|
||||
return false;
|
||||
}
|
||||
return mList.GetChildren()->GetTop()->ShouldBuildLayerEvenIfInvisible(
|
||||
aBuilder);
|
||||
}
|
||||
|
||||
already_AddRefed<Layer> BuildLayer(
|
||||
nsDisplayListBuilder* aBuilder, LayerManager* aManager,
|
||||
const ContainerLayerParameters& aContainerParameters) override;
|
||||
|
Loading…
Reference in New Issue
Block a user