Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 768480c2 authored by Mathieu Chartier's avatar Mathieu Chartier
Browse files

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
parent 3c30eff6
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -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