Try out SkMatrix::Concat.

This should RVO to the same as doing it on the stack with setConcat.

BUG=skia:
R=reed@google.com, mtklein@google.com

Author: mtklein@chromium.org

Review URL: https://codereview.chromium.org/293693002

git-svn-id: http://skia.googlecode.com/svn/trunk@14782 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/include/core/SkMatrix.h b/include/core/SkMatrix.h
index 8394c38..e225336 100644
--- a/include/core/SkMatrix.h
+++ b/include/core/SkMatrix.h
@@ -590,6 +590,15 @@
     static const SkMatrix& InvalidMatrix();
 
     /**
+     * Return the concatenation of two matrices, a * b.
+     */
+    static SkMatrix Concat(const SkMatrix& a, const SkMatrix& b) {
+        SkMatrix result;
+        result.setConcat(a, b);
+        return result;
+    }
+
+    /**
      * Testing routine; the matrix's type cache should never need to be
      * manually invalidated during normal use.
      */
diff --git a/src/record/SkRecordDraw.cpp b/src/record/SkRecordDraw.cpp
index 5df1650..2bf7076 100644
--- a/src/record/SkRecordDraw.cpp
+++ b/src/record/SkRecordDraw.cpp
@@ -38,13 +38,7 @@
 DRAW(PushCull, pushCull(r.rect));
 DRAW(Clear, clear(r.color));
 DRAW(Concat, concat(r.matrix));
-
-// We can't clobber the canvas' initial CTM when calling setMatrix.
-template <> void Draw::draw(const SetMatrix& r) {
-    SkMatrix ctm;
-    ctm.setConcat(fInitialCTM, r.matrix);
-    fCanvas->setMatrix(ctm);
-}
+DRAW(SetMatrix, setMatrix(SkMatrix::Concat(fInitialCTM, r.matrix)));
 
 DRAW(ClipPath, clipPath(r.path, r.op, r.doAA));
 DRAW(ClipRRect, clipRRect(r.rrect, r.op, r.doAA));
diff --git a/tests/MatrixTest.cpp b/tests/MatrixTest.cpp
index 9e39d5b2..ab406fb 100644
--- a/tests/MatrixTest.cpp
+++ b/tests/MatrixTest.cpp
@@ -785,3 +785,16 @@
     test_matrix_decomposition(reporter);
     test_matrix_homogeneous(reporter);
 }
+
+DEF_TEST(Matrix_Concat, r) {
+    SkMatrix a;
+    a.setTranslate(10, 20);
+
+    SkMatrix b;
+    b.setScale(3, 5);
+
+    SkMatrix expected;
+    expected.setConcat(a,b);
+
+    REPORTER_ASSERT(r, expected == SkMatrix::Concat(a, b));
+}