summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorMathieu Chartier <mathieuc@google.com>2014-01-25 17:54:22 -0800
committerMathieu Chartier <mathieuc@google.com>2014-01-25 17:54:22 -0800
commit768480c2458fda63f5eaab37c03e0671d759c514 (patch)
treed87906af3dd184154b3c10044486fb0c631933f9 /core
parent3c30eff63fb33901df4e040ecce78f7755be588f (diff)
downloadframeworks_base-768480c2458fda63f5eaab37c03e0671d759c514.zip
frameworks_base-768480c2458fda63f5eaab37c03e0671d759c514.tar.gz
frameworks_base-768480c2458fda63f5eaab37c03e0671d759c514.tar.bz2
Fix dest == src bugs in Matrix.cpp.
The main bug was that the AutoJavaFloatArray autoSrc was not passing in read only. This meant that the destructor overwrote the data which the autoDst AutoJavaFloatArray had written in it's destructor. This case only happened if src == dest and the arrays were copies. Also improved performance by passing in read only a few other places. Bug: 12570144 Change-Id: Idc8764087dc165433c584b87a0f9d4ed0ec795e8
Diffstat (limited to 'core')
-rw-r--r--core/jni/android/graphics/Matrix.cpp12
1 files changed, 6 insertions, 6 deletions
diff --git a/core/jni/android/graphics/Matrix.cpp b/core/jni/android/graphics/Matrix.cpp
index d0871ac5..4bd59e7 100644
--- a/core/jni/android/graphics/Matrix.cpp
+++ b/core/jni/android/graphics/Matrix.cpp
@@ -239,8 +239,8 @@ public:
SkASSERT(dstIndex >= 0);
SkASSERT((unsigned)ptCount <= 4);
- AutoJavaFloatArray autoSrc(env, jsrc, srcIndex + (ptCount << 1));
- AutoJavaFloatArray autoDst(env, jdst, dstIndex + (ptCount << 1));
+ AutoJavaFloatArray autoSrc(env, jsrc, srcIndex + (ptCount << 1), kRO_JNIAccess);
+ AutoJavaFloatArray autoDst(env, jdst, dstIndex + (ptCount << 1), kRW_JNIAccess);
float* src = autoSrc.ptr() + srcIndex;
float* dst = autoDst.ptr() + dstIndex;
@@ -268,8 +268,8 @@ public:
jfloatArray src, int srcIndex,
int ptCount, bool isPts) {
SkASSERT(ptCount >= 0);
- AutoJavaFloatArray autoSrc(env, src, srcIndex + (ptCount << 1));
- AutoJavaFloatArray autoDst(env, dst, dstIndex + (ptCount << 1));
+ AutoJavaFloatArray autoSrc(env, src, srcIndex + (ptCount << 1), kRO_JNIAccess);
+ AutoJavaFloatArray autoDst(env, dst, dstIndex + (ptCount << 1), kRW_JNIAccess);
float* srcArray = autoSrc.ptr() + srcIndex;
float* dstArray = autoDst.ptr() + dstIndex;
@@ -318,7 +318,7 @@ public:
}
static void getValues(JNIEnv* env, jobject clazz, SkMatrix* matrix, jfloatArray values) {
- AutoJavaFloatArray autoValues(env, values, 9);
+ AutoJavaFloatArray autoValues(env, values, 9, kRW_JNIAccess);
float* dst = autoValues.ptr();
#ifdef SK_SCALAR_IS_FIXED
@@ -336,7 +336,7 @@ public:
}
static void setValues(JNIEnv* env, jobject clazz, SkMatrix* matrix, jfloatArray values) {
- AutoJavaFloatArray autoValues(env, values, 9);
+ AutoJavaFloatArray autoValues(env, values, 9, kRO_JNIAccess);
const float* src = autoValues.ptr();
#ifdef SK_SCALAR_IS_FIXED