Bug 1771503 - Disable the 'two layers that scroll together' assertion for matrices with Inf or NaN elements. r=tnikkel

Differential Revision: https://phabricator.services.mozilla.com/D149466
This commit is contained in:
Botond Ballo 2022-06-17 23:50:49 +00:00
Родитель 5ff21efe97
Коммит 5d687c962b
4 изменённых файлов: 49 добавлений и 5 удалений

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

@ -1510,6 +1510,18 @@ class Matrix4x4Typed {
_44 = UnspecifiedNaN<T>();
}
// Verifies that the matrix contains no Infs or NaNs
bool IsFinite() const {
return mozilla::IsFinite(_11) && mozilla::IsFinite(_12) &&
mozilla::IsFinite(_13) && mozilla::IsFinite(_14) &&
mozilla::IsFinite(_21) && mozilla::IsFinite(_22) &&
mozilla::IsFinite(_23) && mozilla::IsFinite(_24) &&
mozilla::IsFinite(_31) && mozilla::IsFinite(_32) &&
mozilla::IsFinite(_33) && mozilla::IsFinite(_34) &&
mozilla::IsFinite(_41) && mozilla::IsFinite(_42) &&
mozilla::IsFinite(_43) && mozilla::IsFinite(_44);
}
void SkewXY(double aXSkew, double aYSkew) {
// XXX Is double precision really necessary here
T tanX = SafeTangent(aXSkew);

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

@ -1322,8 +1322,10 @@ HitTestingTreeNode* APZCTreeManager::PrepareNodeForLayer(
// In such cases, go with the one that does not include the perspective
// component; the perspective transform is remembered and applied to the
// children instead.
if (!aAncestorTransform.CombinedTransform().FuzzyEqualsMultiplicative(
apzc->GetAncestorTransform())) {
auto ancestorTransform = aAncestorTransform.CombinedTransform();
auto existingAncestorTransform = apzc->GetAncestorTransform();
if (!ancestorTransform.FuzzyEqualsMultiplicative(
existingAncestorTransform)) {
typedef TreeBuildingState::DeferredTransformMap::value_type PairType;
if (!aAncestorTransform.ContainsPerspectiveTransform() &&
!apzc->AncestorTransformContainsPerspective()) {
@ -1333,9 +1335,16 @@ HitTestingTreeNode* APZCTreeManager::PrepareNodeForLayer(
// cases, it's expected that different instances can have different
// transforms, since each page renders a different part of the item.
if (!aLayer.Metadata().IsPaginatedPresentation()) {
MOZ_ASSERT(false,
"Two layers that scroll together have different ancestor "
"transforms");
if (ancestorTransform.IsFinite() &&
existingAncestorTransform.IsFinite()) {
MOZ_ASSERT(
false,
"Two layers that scroll together have different ancestor "
"transforms");
} else {
MOZ_ASSERT(ancestorTransform.IsFinite() ==
existingAncestorTransform.IsFinite());
}
}
} else if (!aAncestorTransform.ContainsPerspectiveTransform()) {
aState.mPerspectiveTransformsDeferredToChildren.insert(

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

@ -0,0 +1,22 @@
<!DOCTYPE html>
<html>
<head>
<style>
* {
transform: matrix3d(130, -7052, 1000, 35803, 122, 7197, 197, 126, 201, 64, 38, -69, 5.727476671737168, 124, 22882, 168.04863081346616);
overflow: auto clip ! important;
padding-right: 39%;
min-inline-size: min-content;
}
</style>
</head>
<body>
<table>
<th>
<fieldset>
<textarea cols='4096' autofocus></textarea>
</fieldset>
</th>
</table>
</body>
</html>

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

@ -568,3 +568,4 @@ pref(layout.accessiblecaret.enabled,true) load 1746989.html
load 1752649.html
load 1753779.html
pref(layout.css.backdrop-filter.enabled,true) load 1755790.html
load 1771503.html