зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
445dc3332d
Коммит
d7c986461e
|
@ -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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче