Loading libs/ui/Transform.cpp +5 −1 Original line number Diff line number Diff line Loading @@ -134,6 +134,10 @@ float Transform::dsdy() const { return mMatrix[1][1]; } float Transform::det() const { return mMatrix[0][0] * mMatrix[1][1] - mMatrix[0][1] * mMatrix[1][0]; } float Transform::getScaleX() const { return sqrt((dsdx() * dsdx()) + (dtdx() * dtdx())); } Loading Loading @@ -390,7 +394,7 @@ Transform Transform::inverse() const { const float x = M[2][0]; const float y = M[2][1]; const float idet = 1.0f / (a*d - b*c); const float idet = 1.0f / det(); result.mMatrix[0][0] = d*idet; result.mMatrix[0][1] = -c*idet; result.mMatrix[1][0] = -b*idet; Loading libs/ui/include/ui/Transform.h +1 −0 Original line number Diff line number Diff line Loading @@ -77,6 +77,7 @@ public: float dtdx() const; float dtdy() const; float dsdy() const; float det() const; float getScaleX() const; float getScaleY() const; Loading services/surfaceflinger/Layer.cpp +15 −0 Original line number Diff line number Diff line Loading @@ -338,6 +338,12 @@ void Layer::computeBounds(FloatRect parentBounds, ui::Transform parentTransform, // Calculate effective layer transform mEffectiveTransform = parentTransform * getActiveTransform(s); if (CC_UNLIKELY(!isTransformValid())) { ALOGW("Stop computing bounds for %s because it has invalid transformation.", getDebugName()); return; } // Transform parent bounds to layer space parentBounds = getActiveTransform(s).inverse().transform(parentBounds); Loading Loading @@ -1326,6 +1332,10 @@ bool Layer::isHiddenByPolicy() const { } } } if (CC_UNLIKELY(!isTransformValid())) { ALOGW("Hide layer %s because it has invalid transformation.", getDebugName()); return true; } return s.flags & layer_state_t::eLayerHidden; } Loading Loading @@ -1858,6 +1868,11 @@ ui::Transform Layer::getTransform() const { return mEffectiveTransform; } bool Layer::isTransformValid() const { float transformDet = getTransform().det(); return transformDet != 0 && !isinf(transformDet) && !isnan(transformDet); } half Layer::getAlpha() const { const auto& p = mDrawingParent.promote(); Loading services/surfaceflinger/Layer.h +1 −0 Original line number Diff line number Diff line Loading @@ -752,6 +752,7 @@ public: FrameEventHistoryDelta* outDelta); ui::Transform getTransform() const; bool isTransformValid() const; // Returns the Alpha of the Surface, accounting for the Alpha // of parent Surfaces in the hierarchy (alpha's will be multiplied Loading Loading
libs/ui/Transform.cpp +5 −1 Original line number Diff line number Diff line Loading @@ -134,6 +134,10 @@ float Transform::dsdy() const { return mMatrix[1][1]; } float Transform::det() const { return mMatrix[0][0] * mMatrix[1][1] - mMatrix[0][1] * mMatrix[1][0]; } float Transform::getScaleX() const { return sqrt((dsdx() * dsdx()) + (dtdx() * dtdx())); } Loading Loading @@ -390,7 +394,7 @@ Transform Transform::inverse() const { const float x = M[2][0]; const float y = M[2][1]; const float idet = 1.0f / (a*d - b*c); const float idet = 1.0f / det(); result.mMatrix[0][0] = d*idet; result.mMatrix[0][1] = -c*idet; result.mMatrix[1][0] = -b*idet; Loading
libs/ui/include/ui/Transform.h +1 −0 Original line number Diff line number Diff line Loading @@ -77,6 +77,7 @@ public: float dtdx() const; float dtdy() const; float dsdy() const; float det() const; float getScaleX() const; float getScaleY() const; Loading
services/surfaceflinger/Layer.cpp +15 −0 Original line number Diff line number Diff line Loading @@ -338,6 +338,12 @@ void Layer::computeBounds(FloatRect parentBounds, ui::Transform parentTransform, // Calculate effective layer transform mEffectiveTransform = parentTransform * getActiveTransform(s); if (CC_UNLIKELY(!isTransformValid())) { ALOGW("Stop computing bounds for %s because it has invalid transformation.", getDebugName()); return; } // Transform parent bounds to layer space parentBounds = getActiveTransform(s).inverse().transform(parentBounds); Loading Loading @@ -1326,6 +1332,10 @@ bool Layer::isHiddenByPolicy() const { } } } if (CC_UNLIKELY(!isTransformValid())) { ALOGW("Hide layer %s because it has invalid transformation.", getDebugName()); return true; } return s.flags & layer_state_t::eLayerHidden; } Loading Loading @@ -1858,6 +1868,11 @@ ui::Transform Layer::getTransform() const { return mEffectiveTransform; } bool Layer::isTransformValid() const { float transformDet = getTransform().det(); return transformDet != 0 && !isinf(transformDet) && !isnan(transformDet); } half Layer::getAlpha() const { const auto& p = mDrawingParent.promote(); Loading
services/surfaceflinger/Layer.h +1 −0 Original line number Diff line number Diff line Loading @@ -752,6 +752,7 @@ public: FrameEventHistoryDelta* outDelta); ui::Transform getTransform() const; bool isTransformValid() const; // Returns the Alpha of the Surface, accounting for the Alpha // of parent Surfaces in the hierarchy (alpha's will be multiplied Loading