Loading libs/hwui/DisplayList.cpp +44 −45 Original line number Diff line number Diff line Loading @@ -299,12 +299,13 @@ float DisplayList::getPivotY() { void DisplayList::updateMatrix() { if (mMatrixDirty) { // NOTE: mTransformMatrix won't be up to date if a DisplayList goes from a complex transform // to a pure translate. This is safe because the matrix isn't read in pure translate cases. if (mMatrixFlags && mMatrixFlags != TRANSLATION) { if (!mTransformMatrix) { mTransformMatrix = new SkMatrix(); // only allocate a matrix if we have a complex transform mTransformMatrix = new Matrix4(); } if (mMatrixFlags == 0 || mMatrixFlags == TRANSLATION) { mTransformMatrix->reset(); } else { if (!mPivotExplicitlySet) { if (mWidth != mPrevWidth || mHeight != mPrevHeight) { mPrevWidth = mWidth; Loading @@ -313,28 +314,36 @@ void DisplayList::updateMatrix() { mPivotY = mPrevHeight / 2.0f; } } if (!Caches::getInstance().propertyEnable3d && (mMatrixFlags & ROTATION_3D) == 0) { mTransformMatrix->setTranslate(mTranslationX, mTranslationY); mTransformMatrix->preRotate(mRotation, mPivotX, mPivotY); mTransformMatrix->preScale(mScaleX, mScaleY, mPivotX, mPivotY); const bool perspectiveEnabled = Caches::getInstance().propertyEnable3d; if (!perspectiveEnabled && (mMatrixFlags & ROTATION_3D) == 0) { mTransformMatrix->loadTranslate( mPivotX + mTranslationX, mPivotY + mTranslationY, 0); mTransformMatrix->rotate(mRotation, 0, 0, 1); mTransformMatrix->scale(mScaleX, mScaleY, 1); mTransformMatrix->translate(-mPivotX, -mPivotY); } else { if (Caches::getInstance().propertyEnable3d) { mTransform.loadTranslate(mPivotX + mTranslationX, mPivotY + mTranslationY, if (perspectiveEnabled) { mTransformMatrix->loadTranslate( mPivotX + mTranslationX, mPivotY + mTranslationY, mTranslationZ); mTransform.rotate(mRotationX, 1, 0, 0); mTransform.rotate(mRotationY, 0, 1, 0); mTransform.rotate(mRotation, 0, 0, 1); mTransform.scale(mScaleX, mScaleY, 1); mTransform.translate(-mPivotX, -mPivotY); mTransformMatrix->rotate(mRotationX, 1, 0, 0); mTransformMatrix->rotate(mRotationY, 0, 1, 0); mTransformMatrix->rotate(mRotation, 0, 0, 1); mTransformMatrix->scale(mScaleX, mScaleY, 1); mTransformMatrix->translate(-mPivotX, -mPivotY); } else { /* TODO: support this old transform approach, based on API level */ if (!mTransformCamera) { mTransformCamera = new Sk3DView(); mTransformMatrix3D = new SkMatrix(); } mTransformMatrix->reset(); SkMatrix transformMatrix; transformMatrix.reset(); mTransformCamera->save(); mTransformMatrix->preScale(mScaleX, mScaleY, mPivotX, mPivotY); transformMatrix.preScale(mScaleX, mScaleY, mPivotX, mPivotY); mTransformCamera->rotateX(mRotationX); mTransformCamera->rotateY(mRotationY); mTransformCamera->rotateZ(-mRotation); Loading @@ -342,8 +351,10 @@ void DisplayList::updateMatrix() { mTransformMatrix3D->preTranslate(-mPivotX, -mPivotY); mTransformMatrix3D->postTranslate(mPivotX + mTranslationX, mPivotY + mTranslationY); mTransformMatrix->postConcat(*mTransformMatrix3D); transformMatrix.postConcat(*mTransformMatrix3D); mTransformCamera->restore(); mTransformMatrix->load(transformMatrix); } } } Loading @@ -357,19 +368,20 @@ void DisplayList::outputViewProperties(const int level) { ALOGD("%*sTranslate (left, top) %d, %d", level * 2, "", mLeft, mTop); } if (mStaticMatrix) { ALOGD("%*sConcatMatrix (static) %p: " MATRIX_STRING, level * 2, "", mStaticMatrix, MATRIX_ARGS(mStaticMatrix)); ALOGD("%*sConcatMatrix (static) %p: " SK_MATRIX_STRING, level * 2, "", mStaticMatrix, SK_MATRIX_ARGS(mStaticMatrix)); } if (mAnimationMatrix) { ALOGD("%*sConcatMatrix (animation) %p: " MATRIX_STRING, level * 2, "", mAnimationMatrix, MATRIX_ARGS(mAnimationMatrix)); ALOGD("%*sConcatMatrix (animation) %p: " SK_MATRIX_STRING, level * 2, "", mAnimationMatrix, SK_MATRIX_ARGS(mAnimationMatrix)); } if (mMatrixFlags != 0) { if (mMatrixFlags == TRANSLATION) { ALOGD("%*sTranslate %f, %f", level * 2, "", mTranslationX, mTranslationY); ALOGD("%*sTranslate %.2f, %.2f, %.2f", level * 2, "", mTranslationX, mTranslationY, mTranslationZ); } else { ALOGD("%*sConcatMatrix %p: " MATRIX_STRING, level * 2, "", mTransformMatrix, MATRIX_ARGS(mTransformMatrix)); ALOGD("%*sConcatMatrix %p: " MATRIX_4_STRING, level * 2, "", mTransformMatrix, MATRIX_4_ARGS(mTransformMatrix)); } } Loading Loading @@ -419,19 +431,11 @@ void DisplayList::setViewProperties(OpenGLRenderer& renderer, T& handler, renderer.concatMatrix(mAnimationMatrix); } if (mMatrixFlags != 0) { if (Caches::getInstance().propertyEnable3d) { if (mMatrixFlags == TRANSLATION) { renderer.translate(mTranslationX, mTranslationY, mTranslationZ); renderer.translate(mTranslationX, mTranslationY, Caches::getInstance().propertyEnable3d ? mTranslationZ : 0.0f); // TODO: necessary? } else { renderer.concatMatrix(mTransform); } } else { // avoid setting translationZ, use SkMatrix if (mMatrixFlags == TRANSLATION) { renderer.translate(mTranslationX, mTranslationY, 0); } else { renderer.concatMatrix(mTransformMatrix); } renderer.concatMatrix(*mTransformMatrix); } } bool clipToBoundsNeeded = mCaching ? false : mClipToBounds; Loading Loading @@ -482,12 +486,7 @@ void DisplayList::applyViewPropertyTransforms(mat4& matrix) { if (mMatrixFlags == TRANSLATION) { matrix.translate(mTranslationX, mTranslationY, mTranslationZ); } else { if (Caches::getInstance().propertyEnable3d) { matrix.multiply(mTransform); } else { mat4 temp(*mTransformMatrix); matrix.multiply(temp); } matrix.multiply(*mTransformMatrix); } } } Loading libs/hwui/DisplayList.h +9 −2 Original line number Diff line number Diff line Loading @@ -614,13 +614,20 @@ private: bool mPivotExplicitlySet; bool mMatrixDirty; bool mMatrixIsIdentity; /** * Stores the total transformation of the DisplayList based upon its scalar * translate/rotate/scale properties. * * In the common translation-only case, the matrix isn't allocated and the mTranslation * properties are used directly. */ Matrix4* mTransformMatrix; uint32_t mMatrixFlags; SkMatrix* mTransformMatrix; Sk3DView* mTransformCamera; SkMatrix* mTransformMatrix3D; SkMatrix* mStaticMatrix; SkMatrix* mAnimationMatrix; Matrix4 mTransform; bool mCaching; /** Loading libs/hwui/DisplayListOp.h +3 −3 Original line number Diff line number Diff line Loading @@ -465,7 +465,7 @@ public: virtual void output(int level, uint32_t logFlags) const { if (mMatrix) { OP_LOG("SetMatrix " MATRIX_STRING, MATRIX_ARGS(mMatrix)); OP_LOG("SetMatrix " SK_MATRIX_STRING, SK_MATRIX_ARGS(mMatrix)); } else { OP_LOGS("SetMatrix (reset)"); } Loading @@ -487,7 +487,7 @@ public: } virtual void output(int level, uint32_t logFlags) const { OP_LOG("ConcatMatrix " MATRIX_STRING, MATRIX_ARGS(mMatrix)); OP_LOG("ConcatMatrix " SK_MATRIX_STRING, SK_MATRIX_ARGS(mMatrix)); } virtual const char* name() { return "ConcatMatrix"; } Loading Loading @@ -848,7 +848,7 @@ public: } virtual void output(int level, uint32_t logFlags) const { OP_LOG("Draw bitmap %p matrix " MATRIX_STRING, mBitmap, MATRIX_ARGS(mMatrix)); OP_LOG("Draw bitmap %p matrix " SK_MATRIX_STRING, mBitmap, SK_MATRIX_ARGS(mMatrix)); } virtual const char* name() { return "DrawBitmapMatrix"; } Loading libs/hwui/Matrix.h +10 −2 Original line number Diff line number Diff line Loading @@ -26,12 +26,20 @@ namespace android { namespace uirenderer { #define MATRIX_STRING "[%.2f %.2f %.2f] [%.2f %.2f %.2f] [%.2f %.2f %.2f]" #define MATRIX_ARGS(m) \ #define SK_MATRIX_STRING "[%.2f %.2f %.2f] [%.2f %.2f %.2f] [%.2f %.2f %.2f]" #define SK_MATRIX_ARGS(m) \ (m)->get(0), (m)->get(1), (m)->get(2), \ (m)->get(3), (m)->get(4), (m)->get(5), \ (m)->get(6), (m)->get(7), (m)->get(8) #define MATRIX_4_STRING "[%.2f %.2f %.2f %.2f] [%.2f %.2f %.2f %.2f]" \ " [%.2f %.2f %.2f %.2f] [%.2f %.2f %.2f %.2f]" #define MATRIX_4_ARGS(m) \ (m)->data[0], (m)->data[4], (m)->data[8], (m)->data[12], \ (m)->data[1], (m)->data[5], (m)->data[9], (m)->data[13], \ (m)->data[2], (m)->data[6], (m)->data[10], (m)->data[14], \ (m)->data[3], (m)->data[7], (m)->data[11], (m)->data[15] \ /////////////////////////////////////////////////////////////////////////////// // Classes /////////////////////////////////////////////////////////////////////////////// Loading Loading
libs/hwui/DisplayList.cpp +44 −45 Original line number Diff line number Diff line Loading @@ -299,12 +299,13 @@ float DisplayList::getPivotY() { void DisplayList::updateMatrix() { if (mMatrixDirty) { // NOTE: mTransformMatrix won't be up to date if a DisplayList goes from a complex transform // to a pure translate. This is safe because the matrix isn't read in pure translate cases. if (mMatrixFlags && mMatrixFlags != TRANSLATION) { if (!mTransformMatrix) { mTransformMatrix = new SkMatrix(); // only allocate a matrix if we have a complex transform mTransformMatrix = new Matrix4(); } if (mMatrixFlags == 0 || mMatrixFlags == TRANSLATION) { mTransformMatrix->reset(); } else { if (!mPivotExplicitlySet) { if (mWidth != mPrevWidth || mHeight != mPrevHeight) { mPrevWidth = mWidth; Loading @@ -313,28 +314,36 @@ void DisplayList::updateMatrix() { mPivotY = mPrevHeight / 2.0f; } } if (!Caches::getInstance().propertyEnable3d && (mMatrixFlags & ROTATION_3D) == 0) { mTransformMatrix->setTranslate(mTranslationX, mTranslationY); mTransformMatrix->preRotate(mRotation, mPivotX, mPivotY); mTransformMatrix->preScale(mScaleX, mScaleY, mPivotX, mPivotY); const bool perspectiveEnabled = Caches::getInstance().propertyEnable3d; if (!perspectiveEnabled && (mMatrixFlags & ROTATION_3D) == 0) { mTransformMatrix->loadTranslate( mPivotX + mTranslationX, mPivotY + mTranslationY, 0); mTransformMatrix->rotate(mRotation, 0, 0, 1); mTransformMatrix->scale(mScaleX, mScaleY, 1); mTransformMatrix->translate(-mPivotX, -mPivotY); } else { if (Caches::getInstance().propertyEnable3d) { mTransform.loadTranslate(mPivotX + mTranslationX, mPivotY + mTranslationY, if (perspectiveEnabled) { mTransformMatrix->loadTranslate( mPivotX + mTranslationX, mPivotY + mTranslationY, mTranslationZ); mTransform.rotate(mRotationX, 1, 0, 0); mTransform.rotate(mRotationY, 0, 1, 0); mTransform.rotate(mRotation, 0, 0, 1); mTransform.scale(mScaleX, mScaleY, 1); mTransform.translate(-mPivotX, -mPivotY); mTransformMatrix->rotate(mRotationX, 1, 0, 0); mTransformMatrix->rotate(mRotationY, 0, 1, 0); mTransformMatrix->rotate(mRotation, 0, 0, 1); mTransformMatrix->scale(mScaleX, mScaleY, 1); mTransformMatrix->translate(-mPivotX, -mPivotY); } else { /* TODO: support this old transform approach, based on API level */ if (!mTransformCamera) { mTransformCamera = new Sk3DView(); mTransformMatrix3D = new SkMatrix(); } mTransformMatrix->reset(); SkMatrix transformMatrix; transformMatrix.reset(); mTransformCamera->save(); mTransformMatrix->preScale(mScaleX, mScaleY, mPivotX, mPivotY); transformMatrix.preScale(mScaleX, mScaleY, mPivotX, mPivotY); mTransformCamera->rotateX(mRotationX); mTransformCamera->rotateY(mRotationY); mTransformCamera->rotateZ(-mRotation); Loading @@ -342,8 +351,10 @@ void DisplayList::updateMatrix() { mTransformMatrix3D->preTranslate(-mPivotX, -mPivotY); mTransformMatrix3D->postTranslate(mPivotX + mTranslationX, mPivotY + mTranslationY); mTransformMatrix->postConcat(*mTransformMatrix3D); transformMatrix.postConcat(*mTransformMatrix3D); mTransformCamera->restore(); mTransformMatrix->load(transformMatrix); } } } Loading @@ -357,19 +368,20 @@ void DisplayList::outputViewProperties(const int level) { ALOGD("%*sTranslate (left, top) %d, %d", level * 2, "", mLeft, mTop); } if (mStaticMatrix) { ALOGD("%*sConcatMatrix (static) %p: " MATRIX_STRING, level * 2, "", mStaticMatrix, MATRIX_ARGS(mStaticMatrix)); ALOGD("%*sConcatMatrix (static) %p: " SK_MATRIX_STRING, level * 2, "", mStaticMatrix, SK_MATRIX_ARGS(mStaticMatrix)); } if (mAnimationMatrix) { ALOGD("%*sConcatMatrix (animation) %p: " MATRIX_STRING, level * 2, "", mAnimationMatrix, MATRIX_ARGS(mAnimationMatrix)); ALOGD("%*sConcatMatrix (animation) %p: " SK_MATRIX_STRING, level * 2, "", mAnimationMatrix, SK_MATRIX_ARGS(mAnimationMatrix)); } if (mMatrixFlags != 0) { if (mMatrixFlags == TRANSLATION) { ALOGD("%*sTranslate %f, %f", level * 2, "", mTranslationX, mTranslationY); ALOGD("%*sTranslate %.2f, %.2f, %.2f", level * 2, "", mTranslationX, mTranslationY, mTranslationZ); } else { ALOGD("%*sConcatMatrix %p: " MATRIX_STRING, level * 2, "", mTransformMatrix, MATRIX_ARGS(mTransformMatrix)); ALOGD("%*sConcatMatrix %p: " MATRIX_4_STRING, level * 2, "", mTransformMatrix, MATRIX_4_ARGS(mTransformMatrix)); } } Loading Loading @@ -419,19 +431,11 @@ void DisplayList::setViewProperties(OpenGLRenderer& renderer, T& handler, renderer.concatMatrix(mAnimationMatrix); } if (mMatrixFlags != 0) { if (Caches::getInstance().propertyEnable3d) { if (mMatrixFlags == TRANSLATION) { renderer.translate(mTranslationX, mTranslationY, mTranslationZ); renderer.translate(mTranslationX, mTranslationY, Caches::getInstance().propertyEnable3d ? mTranslationZ : 0.0f); // TODO: necessary? } else { renderer.concatMatrix(mTransform); } } else { // avoid setting translationZ, use SkMatrix if (mMatrixFlags == TRANSLATION) { renderer.translate(mTranslationX, mTranslationY, 0); } else { renderer.concatMatrix(mTransformMatrix); } renderer.concatMatrix(*mTransformMatrix); } } bool clipToBoundsNeeded = mCaching ? false : mClipToBounds; Loading Loading @@ -482,12 +486,7 @@ void DisplayList::applyViewPropertyTransforms(mat4& matrix) { if (mMatrixFlags == TRANSLATION) { matrix.translate(mTranslationX, mTranslationY, mTranslationZ); } else { if (Caches::getInstance().propertyEnable3d) { matrix.multiply(mTransform); } else { mat4 temp(*mTransformMatrix); matrix.multiply(temp); } matrix.multiply(*mTransformMatrix); } } } Loading
libs/hwui/DisplayList.h +9 −2 Original line number Diff line number Diff line Loading @@ -614,13 +614,20 @@ private: bool mPivotExplicitlySet; bool mMatrixDirty; bool mMatrixIsIdentity; /** * Stores the total transformation of the DisplayList based upon its scalar * translate/rotate/scale properties. * * In the common translation-only case, the matrix isn't allocated and the mTranslation * properties are used directly. */ Matrix4* mTransformMatrix; uint32_t mMatrixFlags; SkMatrix* mTransformMatrix; Sk3DView* mTransformCamera; SkMatrix* mTransformMatrix3D; SkMatrix* mStaticMatrix; SkMatrix* mAnimationMatrix; Matrix4 mTransform; bool mCaching; /** Loading
libs/hwui/DisplayListOp.h +3 −3 Original line number Diff line number Diff line Loading @@ -465,7 +465,7 @@ public: virtual void output(int level, uint32_t logFlags) const { if (mMatrix) { OP_LOG("SetMatrix " MATRIX_STRING, MATRIX_ARGS(mMatrix)); OP_LOG("SetMatrix " SK_MATRIX_STRING, SK_MATRIX_ARGS(mMatrix)); } else { OP_LOGS("SetMatrix (reset)"); } Loading @@ -487,7 +487,7 @@ public: } virtual void output(int level, uint32_t logFlags) const { OP_LOG("ConcatMatrix " MATRIX_STRING, MATRIX_ARGS(mMatrix)); OP_LOG("ConcatMatrix " SK_MATRIX_STRING, SK_MATRIX_ARGS(mMatrix)); } virtual const char* name() { return "ConcatMatrix"; } Loading Loading @@ -848,7 +848,7 @@ public: } virtual void output(int level, uint32_t logFlags) const { OP_LOG("Draw bitmap %p matrix " MATRIX_STRING, mBitmap, MATRIX_ARGS(mMatrix)); OP_LOG("Draw bitmap %p matrix " SK_MATRIX_STRING, mBitmap, SK_MATRIX_ARGS(mMatrix)); } virtual const char* name() { return "DrawBitmapMatrix"; } Loading
libs/hwui/Matrix.h +10 −2 Original line number Diff line number Diff line Loading @@ -26,12 +26,20 @@ namespace android { namespace uirenderer { #define MATRIX_STRING "[%.2f %.2f %.2f] [%.2f %.2f %.2f] [%.2f %.2f %.2f]" #define MATRIX_ARGS(m) \ #define SK_MATRIX_STRING "[%.2f %.2f %.2f] [%.2f %.2f %.2f] [%.2f %.2f %.2f]" #define SK_MATRIX_ARGS(m) \ (m)->get(0), (m)->get(1), (m)->get(2), \ (m)->get(3), (m)->get(4), (m)->get(5), \ (m)->get(6), (m)->get(7), (m)->get(8) #define MATRIX_4_STRING "[%.2f %.2f %.2f %.2f] [%.2f %.2f %.2f %.2f]" \ " [%.2f %.2f %.2f %.2f] [%.2f %.2f %.2f %.2f]" #define MATRIX_4_ARGS(m) \ (m)->data[0], (m)->data[4], (m)->data[8], (m)->data[12], \ (m)->data[1], (m)->data[5], (m)->data[9], (m)->data[13], \ (m)->data[2], (m)->data[6], (m)->data[10], (m)->data[14], \ (m)->data[3], (m)->data[7], (m)->data[11], (m)->data[15] \ /////////////////////////////////////////////////////////////////////////////// // Classes /////////////////////////////////////////////////////////////////////////////// Loading