New setLocalMatrix() operation for HWUI

Concats any matrix passed through from DisplayListCanvas with the
initialTransform of the containing RenderNode.

BUG:22189925

Change-Id: I5ea54a6e2a29520c79a8860bde7682694e8595d2
diff --git a/libs/hwui/SkiaCanvasProxy.cpp b/libs/hwui/SkiaCanvasProxy.cpp
index 8a6c8c5..d96ca2a 100644
--- a/libs/hwui/SkiaCanvasProxy.cpp
+++ b/libs/hwui/SkiaCanvasProxy.cpp
@@ -115,7 +115,7 @@
 void SkiaCanvasProxy::onDrawSprite(const SkBitmap& bitmap, int left, int top,
         const SkPaint* paint) {
     mCanvas->save(SkCanvas::kMatrixClip_SaveFlag);
-    mCanvas->setMatrix(SkMatrix::I());
+    mCanvas->setLocalMatrix(SkMatrix::I());
     mCanvas->drawBitmap(bitmap, left, top, paint);
     mCanvas->restore();
 }
@@ -165,7 +165,9 @@
 }
 
 void SkiaCanvasProxy::didSetMatrix(const SkMatrix& matrix) {
-    mCanvas->setMatrix(matrix);
+    // SkCanvas setMatrix() is relative to the Canvas origin, but OpenGLRenderer's
+    // setMatrix() is relative to device origin; call setLocalMatrix() instead.
+    mCanvas->setLocalMatrix(matrix);
 }
 
 void SkiaCanvasProxy::onDrawDRRect(const SkRRect& outer, const SkRRect& inner,