Merge "VectorDrawable: Use the matrix scale only if the matrix has no rotation or skew."
diff --git a/libs/hwui/VectorDrawable.cpp b/libs/hwui/VectorDrawable.cpp
index e13a2bb..56cb104 100644
--- a/libs/hwui/VectorDrawable.cpp
+++ b/libs/hwui/VectorDrawable.cpp
@@ -403,8 +403,15 @@
     // canvas scale.
     outCanvas->getMatrix(&mCanvasMatrix);
     mBounds = bounds;
-    int scaledWidth = (int) (mBounds.width() * mCanvasMatrix.getScaleX());
-    int scaledHeight = (int) (mBounds.height() * mCanvasMatrix.getScaleY());
+    float canvasScaleX = 1.0f;
+    float canvasScaleY = 1.0f;
+    if (mCanvasMatrix.getSkewX() == 0 && mCanvasMatrix.getSkewY() == 0) {
+        // Only use the scale value when there's no skew or rotation in the canvas matrix.
+        canvasScaleX = mCanvasMatrix.getScaleX();
+        canvasScaleY = mCanvasMatrix.getScaleY();
+    }
+    int scaledWidth = (int) (mBounds.width() * canvasScaleX);
+    int scaledHeight = (int) (mBounds.height() * canvasScaleY);
     scaledWidth = std::min(Tree::MAX_CACHED_BITMAP_SIZE, scaledWidth);
     scaledHeight = std::min(Tree::MAX_CACHED_BITMAP_SIZE, scaledHeight);