VectorDrawable: Use the matrix scale only if the matrix has no rotation or skew.

When canvas is rotated or skewed, the scale factor is affected.
Conservatively reset the scale used to modify path stroke size to 1 in these
cases, since the image will be somewhat blurry anyway with rotation / skew..

b/25418943

Change-Id: I6dff1bca5fac5500fa688c68f8b81b6212526b6b
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);