From 776401e6eb58505a7afd7de77ad088603dc8c2e4 Mon Sep 17 00:00:00 2001 From: Brian Salomon Date: Fri, 23 Sep 2022 12:07:00 -0400 Subject: [PATCH] Use legacy local matrix concat order when target API is < U This will avoid changing behavior in apps targeting existing API levels after Skia changes local matrix concatenation order. Test: android.uirendering.cts.testclasses.ShaderLocalMatrixTest#testLocalMatrixOrder Bug: skbug.com/13749 Change-Id: I06d4eb39bac59b62801316c52380b0e191e73c0c --- libs/hwui/jni/android_graphics_Canvas.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/libs/hwui/jni/android_graphics_Canvas.cpp b/libs/hwui/jni/android_graphics_Canvas.cpp index 0513447ed05e9..35258a3e07740 100644 --- a/libs/hwui/jni/android_graphics_Canvas.cpp +++ b/libs/hwui/jni/android_graphics_Canvas.cpp @@ -20,6 +20,7 @@ #include #else #define __ANDROID_API_P__ 28 +#define __ANDROID_API_U__ 34 #endif #include #include @@ -30,8 +31,9 @@ #include #include -#include "FontUtils.h" #include "Bitmap.h" +#include "FontUtils.h" +#include "SkAndroidFrameworkUtils.h" #include "SkBitmap.h" #include "SkBlendMode.h" #include "SkClipOp.h" @@ -42,10 +44,10 @@ #include "SkMatrix.h" #include "SkPath.h" #include "SkPoint.h" +#include "SkRRect.h" #include "SkRect.h" #include "SkRefCnt.h" #include "SkRegion.h" -#include "SkRRect.h" #include "SkScalar.h" #include "SkVertices.h" @@ -710,6 +712,9 @@ static void freeTextLayoutCaches(JNIEnv* env, jobject) { static void setCompatibilityVersion(JNIEnv* env, jobject, jint apiLevel) { Canvas::setCompatibilityVersion(apiLevel); + if (apiLevel < __ANDROID_API_U__) { + SkAndroidFrameworkUtils::UseLegacyLocalMatrixConcatenation(); + } } static void punchHole(JNIEnv* env, jobject, jlong canvasPtr, jfloat left, jfloat top, jfloat right, @@ -800,7 +805,6 @@ int register_android_graphics_Canvas(JNIEnv* env) { ret |= RegisterMethodsOrDie(env, "android/graphics/BaseCanvas", gDrawMethods, NELEM(gDrawMethods)); ret |= RegisterMethodsOrDie(env, "android/graphics/BaseRecordingCanvas", gDrawMethods, NELEM(gDrawMethods)); return ret; - } }; // namespace android