Merge "Keep a reference to the local matrix. Bug #3299324"
diff --git a/core/jni/android/graphics/Shader.cpp b/core/jni/android/graphics/Shader.cpp
index 4be1321..3efc41d 100644
--- a/core/jni/android/graphics/Shader.cpp
+++ b/core/jni/android/graphics/Shader.cpp
@@ -64,11 +64,6 @@
 #endif
 }
 
-static bool Shader_getLocalMatrix(JNIEnv* env, jobject, const SkShader* shader, SkMatrix* matrix)
-{
-    return shader ? shader->getLocalMatrix(matrix) : false;
-}
- 
 static void Shader_setLocalMatrix(JNIEnv* env, jobject o, SkShader* shader, SkiaShader* skiaShader,
         const SkMatrix* matrix)
 {
@@ -471,7 +466,6 @@
 
 static JNINativeMethod gShaderMethods[] = {
     { "nativeDestructor",        "(II)V",    (void*)Shader_destructor        },
-    { "nativeGetLocalMatrix",    "(II)Z",    (void*)Shader_getLocalMatrix    },
     { "nativeSetLocalMatrix",    "(III)V",   (void*)Shader_setLocalMatrix    }
 };
 
diff --git a/graphics/java/android/graphics/Shader.java b/graphics/java/android/graphics/Shader.java
index 0400b5c..3acf1ea 100644
--- a/graphics/java/android/graphics/Shader.java
+++ b/graphics/java/android/graphics/Shader.java
@@ -34,6 +34,8 @@
      */
     public int native_shader;
 
+    private Matrix mLocalMatrix;
+
     public enum TileMode {
         /**
          * replicate the edge color if the shader draws outside of its
@@ -62,7 +64,11 @@
      * @return true if the shader has a non-identity local matrix
      */
     public boolean getLocalMatrix(Matrix localM) {
-        return nativeGetLocalMatrix(native_instance, localM.native_instance);
+        if (mLocalMatrix != null) {
+            localM.set(mLocalMatrix);
+            return true;
+        }
+        return false;
     }
 
     /**
@@ -71,6 +77,7 @@
      * @param localM The shader's new local matrix, or null to specify identity
      */
     public void setLocalMatrix(Matrix localM) {
+        mLocalMatrix = localM;
         nativeSetLocalMatrix(native_instance, native_shader,
                 localM == null ? 0 : localM.native_instance);
     }
@@ -84,8 +91,6 @@
     }
 
     private static native void nativeDestructor(int native_shader, int native_skiaShader);
-    private static native boolean nativeGetLocalMatrix(int native_shader,
-            int matrix_instance); 
     private static native void nativeSetLocalMatrix(int native_shader,
             int native_skiaShader, int matrix_instance);
 }