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

Commit 5b554f01 authored by Derek Sollenberger's avatar Derek Sollenberger Committed by Android (Google) Code Review
Browse files

Merge "Avoid caching shadow properties in Java & HWUI."

parents cf501a60 c29a0a46
Loading
Loading
Loading
Loading
+0 −15
Original line number Diff line number Diff line
@@ -43,7 +43,6 @@ import android.text.TextUtils;
class GLES20Canvas extends HardwareCanvas {
    // Must match modifiers used in the JNI layer
    private static final int MODIFIER_NONE = 0;
    private static final int MODIFIER_SHADOW = 1;
    private static final int MODIFIER_SHADER = 2;

    private final boolean mOpaque;
@@ -1297,12 +1296,6 @@ class GLES20Canvas extends HardwareCanvas {
    private int setupModifiers(Paint paint) {
        int modifiers = MODIFIER_NONE;

        if (paint.hasShadow) {
            nSetupShadow(mRenderer, paint.shadowRadius, paint.shadowDx, paint.shadowDy,
                    paint.shadowColor);
            modifiers |= MODIFIER_SHADOW;
        }

        final Shader shader = paint.getShader();
        if (shader != null) {
            nSetupShader(mRenderer, shader.native_shader);
@@ -1315,12 +1308,6 @@ class GLES20Canvas extends HardwareCanvas {
    private int setupModifiers(Paint paint, int flags) {
        int modifiers = MODIFIER_NONE;

        if (paint.hasShadow && (flags & MODIFIER_SHADOW) != 0) {
            nSetupShadow(mRenderer, paint.shadowRadius, paint.shadowDx, paint.shadowDy,
                    paint.shadowColor);
            modifiers |= MODIFIER_SHADOW;
        }

        final Shader shader = paint.getShader();
        if (shader != null && (flags & MODIFIER_SHADER) != 0) {
            nSetupShader(mRenderer, shader.native_shader);
@@ -1331,8 +1318,6 @@ class GLES20Canvas extends HardwareCanvas {
    }

    private static native void nSetupShader(long renderer, long shader);
    private static native void nSetupShadow(long renderer, float radius,
            float dx, float dy, int color);

    private static native void nResetModifiers(long renderer, int modifiers);
}
+4 −1
Original line number Diff line number Diff line
@@ -289,6 +289,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
    private Spannable.Factory mSpannableFactory = Spannable.Factory.getInstance();

    private float mShadowRadius, mShadowDx, mShadowDy;
    private int mShadowColor;


    private boolean mPreDrawRegistered;

@@ -2755,6 +2757,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
        mShadowRadius = radius;
        mShadowDx = dx;
        mShadowDy = dy;
        mShadowColor = color;

        // Will change text clip region
        if (mEditor != null) mEditor.invalidateTextDisplayList();
@@ -2804,7 +2807,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
     * @attr ref android.R.styleable#TextView_shadowColor
     */
    public int getShadowColor() {
        return mTextPaint.shadowColor;
        return mShadowColor;
    }

    /**
+12 −6
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@
#include "SkXfermode.h"
#include "unicode/uloc.h"
#include "unicode/ushape.h"
#include "utils/Blur.h"
#include "TextLayout.h"

// temporary for debugging
@@ -776,19 +777,23 @@ public:
        env->ReleaseStringChars(text, textArray);
    }

    static void setShadowLayer(JNIEnv* env, jobject jpaint, jfloat radius,
    static void setShadowLayer(JNIEnv* env, jobject clazz, jlong paintHandle, jfloat radius,
                               jfloat dx, jfloat dy, jint color) {
        NPE_CHECK_RETURN_VOID(env, jpaint);

        SkPaint* paint = GraphicsJNI::getNativePaint(env, jpaint);
        SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
        if (radius <= 0) {
            paint->setLooper(NULL);
        }
        else {
            paint->setLooper(new SkBlurDrawLooper(radius, dx, dy, (SkColor)color))->unref();
            SkScalar sigma = android::uirenderer::Blur::convertRadiusToSigma(radius);
            paint->setLooper(new SkBlurDrawLooper((SkColor)color, sigma, dx, dy))->unref();
        }
    }

    static jboolean hasShadowLayer(JNIEnv* env, jobject clazz, jlong paintHandle) {
        SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
        return paint->getLooper() && paint->getLooper()->asABlurShadow(NULL);
    }

    static int breakText(JNIEnv* env, SkPaint& paint, const jchar text[],
                         int count, float maxWidth, jint bidiFlags, jfloatArray jmeasured,
                         SkPaint::TextBufferDirection tbd) {
@@ -968,7 +973,8 @@ static JNINativeMethod methods[] = {
                                        (void*) SkPaintGlue::getStringBounds },
    {"nativeGetCharArrayBounds", "(J[CIIILandroid/graphics/Rect;)V",
                                    (void*) SkPaintGlue::getCharArrayBounds },
    {"nSetShadowLayer", "(FFFI)V", (void*)SkPaintGlue::setShadowLayer}
    {"native_setShadowLayer", "(JFFFI)V", (void*)SkPaintGlue::setShadowLayer},
    {"native_hasShadowLayer", "(J)Z", (void*)SkPaintGlue::hasShadowLayer}
};

static jfieldID req_fieldID(jfieldID id) {
+0 −9
Original line number Diff line number Diff line
@@ -79,7 +79,6 @@ using namespace uirenderer;
    #define RENDERER_LOGD(...)
#endif

#define MODIFIER_SHADOW 1
#define MODIFIER_SHADER 2

// ----------------------------------------------------------------------------
@@ -617,7 +616,6 @@ static void android_view_GLES20Canvas_drawLines(JNIEnv* env, jobject clazz,
static void android_view_GLES20Canvas_resetModifiers(JNIEnv* env, jobject clazz,
        jlong rendererPtr, jint modifiers) {
    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
    if (modifiers & MODIFIER_SHADOW) renderer->resetShadow();
    if (modifiers & MODIFIER_SHADER) renderer->resetShader();
}

@@ -629,12 +627,6 @@ static void android_view_GLES20Canvas_setupShader(JNIEnv* env, jobject clazz,
}


static void android_view_GLES20Canvas_setupShadow(JNIEnv* env, jobject clazz,
        jlong rendererPtr, jfloat radius, jfloat dx, jfloat dy, jint color) {
    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
    renderer->setupShadow(radius, dx, dy, color);
}

// ----------------------------------------------------------------------------
// Draw filters
// ----------------------------------------------------------------------------
@@ -1032,7 +1024,6 @@ static JNINativeMethod gMethods[] = {

    { "nResetModifiers",    "(JI)V",           (void*) android_view_GLES20Canvas_resetModifiers },
    { "nSetupShader",       "(JJ)V",           (void*) android_view_GLES20Canvas_setupShader },
    { "nSetupShadow",       "(JFFFI)V",        (void*) android_view_GLES20Canvas_setupShadow },

    { "nSetupPaintFilter",  "(JII)V",          (void*) android_view_GLES20Canvas_setupPaintFilter },
    { "nResetPaintFilter",  "(J)V",            (void*) android_view_GLES20Canvas_resetPaintFilter },
+16 −43
Original line number Diff line number Diff line
@@ -52,27 +52,6 @@ public class Paint {

    private Locale      mLocale;

    /**
     * @hide
     */
    public boolean hasShadow;
    /**
     * @hide
     */
    public float shadowDx;
    /**
     * @hide
     */
    public float shadowDy;
    /**
     * @hide
     */
    public float shadowRadius;
    /**
     * @hide
     */
    public int shadowColor;

    /**
     * @hide
     */
@@ -492,12 +471,6 @@ public class Paint {
        mCompatScaling = 1;
        mInvCompatScaling = 1;

        hasShadow = false;
        shadowDx = 0;
        shadowDy = 0;
        shadowRadius = 0;
        shadowColor = 0;

        mBidiFlags = BIDI_DEFAULT_LTR;
        setTextLocale(Locale.getDefault());
        setElegantTextHeight(false);
@@ -538,12 +511,6 @@ public class Paint {
        mCompatScaling = paint.mCompatScaling;
        mInvCompatScaling = paint.mInvCompatScaling;

        hasShadow = paint.hasShadow;
        shadowDx = paint.shadowDx;
        shadowDy = paint.shadowDy;
        shadowRadius = paint.shadowRadius;
        shadowColor = paint.shadowColor;

        mBidiFlags = paint.mBidiFlags;
        mLocale = paint.mLocale;
    }
@@ -1135,22 +1102,24 @@ public class Paint {
     * layer is removed.
     */
    public void setShadowLayer(float radius, float dx, float dy, int color) {
        hasShadow = radius > 0.0f;
        shadowRadius = radius;
        shadowDx = dx;
        shadowDy = dy;
        shadowColor = color;
        nSetShadowLayer(radius, dx, dy, color);
      native_setShadowLayer(mNativePaint, radius, dx, dy, color);
    }

    private native void nSetShadowLayer(float radius, float dx, float dy, int color);

    /**
     * Clear the shadow layer.
     */
    public void clearShadowLayer() {
        hasShadow = false;
        nSetShadowLayer(0, 0, 0, 0);
        setShadowLayer(0, 0, 0, 0);
    }

    /**
     * Checks if the paint has a shadow layer attached
     *
     * @return true if the paint has a shadow layer attached and false otherwise
     * @hide
     */
    public boolean hasShadowLayer() {
      return native_hasShadowLayer(mNativePaint);
    }

    /**
@@ -2295,4 +2264,8 @@ public class Paint {
    private static native void nativeGetCharArrayBounds(long nativePaint,
                                char[] text, int index, int count, int bidiFlags, Rect bounds);
    private static native void finalizer(long nativePaint);

    private static native void native_setShadowLayer(long native_object,
            float radius, float dx, float dy, int color);
    private static native boolean native_hasShadowLayer(long native_object);
}
Loading