Bug 1465118 - Part 3: Use Maybe<T> to cache transformation matrix r=mattwoodrow

MozReview-Commit-ID: 1oBc77ijXcv

--HG--
extra : rebase_source : a11a54ba3dc660c5f23cc310b0eae8c36aa9ee06
This commit is contained in:
Miko Mynttinen 2018-05-29 15:07:43 +02:00
Родитель 445dc3332d
Коммит d7c986461e
2 изменённых файлов: 24 добавлений и 17 удалений

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

@ -8021,7 +8021,7 @@ nsDisplayTransform::nsDisplayTransform(nsDisplayListBuilder* aBuilder,
uint32_t aIndex)
: nsDisplayItem(aBuilder, aFrame)
, mStoredList(aBuilder, aFrame, aList)
, mTransform(aTransform)
, mTransform(Some(aTransform))
, mTransformGetter(nullptr)
, mAnimatedGeometryRootForChildren(mAnimatedGeometryRoot)
, mAnimatedGeometryRootForScrollMetadata(mAnimatedGeometryRoot)
@ -8484,26 +8484,33 @@ static bool IsFrameVisible(nsIFrame* aFrame, const Matrix4x4& aMatrix)
const Matrix4x4Flagged&
nsDisplayTransform::GetTransform() const
{
if (mTransform.IsIdentity()) {
float scale = mFrame->PresContext()->AppUnitsPerDevPixel();
if (mTransform) {
return *mTransform;
}
float scale = mFrame->PresContext()->AppUnitsPerDevPixel();
if (mTransformGetter) {
mTransform.emplace(mTransformGetter(mFrame, scale));
Point3D newOrigin =
Point3D(NSAppUnitsToFloatPixels(mToReferenceFrame.x, scale),
NSAppUnitsToFloatPixels(mToReferenceFrame.y, scale),
0.0f);
if (mTransformGetter) {
mTransform = mTransformGetter(mFrame, scale);
mTransform.ChangeBasis(newOrigin.x, newOrigin.y, newOrigin.z);
} else if (!mIsTransformSeparator) {
DebugOnly<bool> isReference =
mFrame->IsTransformed() ||
mFrame->Combines3DTransformWithAncestors() || mFrame->Extend3DContext();
MOZ_ASSERT(isReference);
mTransform =
GetResultingTransformMatrix(mFrame, ToReferenceFrame(),
scale, INCLUDE_PERSPECTIVE|OFFSET_BY_ORIGIN);
}
mTransform->ChangeBasis(newOrigin.x, newOrigin.y, newOrigin.z);
} else if (!mIsTransformSeparator) {
DebugOnly<bool> isReference =
mFrame->IsTransformed() ||
mFrame->Combines3DTransformWithAncestors() || mFrame->Extend3DContext();
MOZ_ASSERT(isReference);
mTransform.emplace(
GetResultingTransformMatrix(mFrame, ToReferenceFrame(),
scale, INCLUDE_PERSPECTIVE|OFFSET_BY_ORIGIN));
} else {
// Use identity matrix
mTransform.emplace();
}
return mTransform;
return *mTransform;
}
Matrix4x4

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

@ -6816,7 +6816,7 @@ private:
const nsRect* aBoundsOverride);
StoreList mStoredList;
mutable Matrix4x4Flagged mTransform;
mutable mozilla::Maybe<Matrix4x4Flagged> mTransform;
// Accumulated transform of ancestors on the preserves-3d chain.
Matrix4x4 mTransformPreserves3D;
ComputeTransformFunction mTransformGetter;