Bug 1458145 - Extend the ASR adjustment performed on perspective items, to a wrapping OwnLayer item as well. r=mattwoodrow

Differential Revision: https://phabricator.services.mozilla.com/D100144
This commit is contained in:
Botond Ballo 2020-12-21 21:29:40 +00:00
Родитель 726ab31493
Коммит 1630744f89
3 изменённых файлов: 27 добавлений и 9 удалений

Просмотреть файл

@ -4891,15 +4891,21 @@ void ContainerState::ProcessDisplayItems(nsDisplayList* aList) {
params.mCompositorASR = itemASR;
}
if (itemType == DisplayItemType::TYPE_PERSPECTIVE) {
// Perspective items have a single child item, an nsDisplayTransform.
// If the perspective item is scrolled, but the perspective-inducing
// frame is outside the scroll frame (indicated by item->Frame()
// being outside that scroll frame), we have to take special care to
// make APZ scrolling work properly. APZ needs us to put the scroll
// frame's FrameMetrics on our child transform ContainerLayer instead.
// It's worth investigating whether this ASR adjustment can be done at
// display item creation time.
// Perspective items have a single child item, an nsDisplayTransform.
// If the perspective item is scrolled, but the perspective-inducing
// frame is outside the scroll frame (indicated by item->Frame()
// being outside that scroll frame), we have to take special care to
// make APZ scrolling work properly. APZ needs us to put the scroll
// frame's FrameMetrics on our child transform ContainerLayer instead.
// We make a similar adjustment for OwnLayer items built for frames
// with perspective transforms (e.g. when they have rounded corners).
// It's worth investigating whether this ASR adjustment can be done at
// display item creation time.
bool deferASRForPerspective =
itemType == DisplayItemType::TYPE_PERSPECTIVE ||
(itemType == DisplayItemType::TYPE_OWN_LAYER &&
item->Frame()->IsTransformed() && item->Frame()->HasPerspective());
if (deferASRForPerspective) {
scrollMetadataASR = GetASRForPerspective(
scrollMetadataASR,
item->Frame()->GetContainingBlock(nsIFrame::SKIP_SCROLLED_FRAME));

Просмотреть файл

@ -0,0 +1,11 @@
<style>
* { position: fixed; }
#a {
perspective: 0px;
overflow: scroll;
}
.cl2 { -webkit-transform-style: preserve-3d; }
.cl1 { border-bottom-right-radius: 0px 1px; }
</style>
<del id="a" class="cl1">
<dl class="cl2">#_k</dl>

Просмотреть файл

@ -11,6 +11,7 @@ load 1428906-1.html
load 1430589-1.html
load 1454105-1.html
load 1455944-1.html
load 1458145.html
load 1465305-1.html
load 1468124-1.html
load 1469472.html