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

Commit 9440083b authored by Chet Haase's avatar Chet Haase Committed by Android (Google) Code Review
Browse files

Merge "Optimizing ColorFilter in display lists"

parents fdfe1a6b ad93c2bb
Loading
Loading
Loading
Loading
+21 −11
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@
#include "SkPorterDuff.h"

#include <SkiaColorFilter.h>
#include <Caches.h>

namespace android {

@@ -32,28 +33,37 @@ using namespace uirenderer;
class SkColorFilterGlue {
public:
    static void finalizer(JNIEnv* env, jobject clazz, SkColorFilter* obj, SkiaColorFilter* f) {
        delete f;
        obj->safeUnref();
        // f == NULL when not !USE_OPENGL_RENDERER, so no need to delete outside the ifdef
#ifdef USE_OPENGL_RENDERER
        if (android::uirenderer::Caches::hasInstance()) {
            android::uirenderer::Caches::getInstance().resourceCache.destructor(f);
        } else {
            delete f;
        }
#endif
    }

    static SkiaColorFilter* glCreatePorterDuffFilter(JNIEnv* env, jobject, jint srcColor,
            SkPorterDuff::Mode mode) {
    static SkiaColorFilter* glCreatePorterDuffFilter(JNIEnv* env, jobject, SkColorFilter *skFilter,
            jint srcColor, SkPorterDuff::Mode mode) {
#ifdef USE_OPENGL_RENDERER
        return new SkiaBlendFilter(srcColor, SkPorterDuff::ToXfermodeMode(mode));
        return new SkiaBlendFilter(skFilter, srcColor, SkPorterDuff::ToXfermodeMode(mode));
#else
        return NULL;
#endif
    }

    static SkiaColorFilter* glCreateLightingFilter(JNIEnv* env, jobject, jint mul, jint add) {
    static SkiaColorFilter* glCreateLightingFilter(JNIEnv* env, jobject, SkColorFilter *skFilter,
            jint mul, jint add) {
#ifdef USE_OPENGL_RENDERER
        return new SkiaLightingFilter(mul, add);
        return new SkiaLightingFilter(skFilter, mul, add);
#else
        return NULL;
#endif
    }

    static SkiaColorFilter* glCreateColorMatrixFilter(JNIEnv* env, jobject, jfloatArray jarray) {
    static SkiaColorFilter* glCreateColorMatrixFilter(JNIEnv* env, jobject, SkColorFilter *skFilter,
            jfloatArray jarray) {
#ifdef USE_OPENGL_RENDERER
        AutoJavaFloatArray autoArray(env, jarray, 20);
        const float* src = autoArray.ptr();
@@ -70,7 +80,7 @@ public:
        colorVector[2] = src[14];
        colorVector[3] = src[19];

        return new SkiaColorMatrixFilter(colorMatrix, colorVector);
        return new SkiaColorMatrixFilter(skFilter, colorMatrix, colorVector);
#else
        return NULL;
#endif
@@ -107,17 +117,17 @@ static JNINativeMethod colorfilter_methods[] = {

static JNINativeMethod porterduff_methods[] = {
    { "native_CreatePorterDuffFilter", "(II)I", (void*) SkColorFilterGlue::CreatePorterDuffFilter   },
    { "nCreatePorterDuffFilter",       "(II)I", (void*) SkColorFilterGlue::glCreatePorterDuffFilter }
    { "nCreatePorterDuffFilter",       "(III)I", (void*) SkColorFilterGlue::glCreatePorterDuffFilter }
};

static JNINativeMethod lighting_methods[] = {
    { "native_CreateLightingFilter", "(II)I", (void*) SkColorFilterGlue::CreateLightingFilter   },
    { "nCreateLightingFilter",       "(II)I", (void*) SkColorFilterGlue::glCreateLightingFilter },
    { "nCreateLightingFilter",       "(III)I", (void*) SkColorFilterGlue::glCreateLightingFilter },
};

static JNINativeMethod colormatrix_methods[] = {
    { "nativeColorMatrixFilter", "([F)I", (void*) SkColorFilterGlue::CreateColorMatrixFilter   },
    { "nColorMatrixFilter",      "([F)I", (void*) SkColorFilterGlue::glCreateColorMatrixFilter }
    { "nColorMatrixFilter",      "(I[F)I", (void*) SkColorFilterGlue::glCreateColorMatrixFilter }
};

#define REG(env, name, array) \
+2 −0
Original line number Diff line number Diff line
@@ -58,6 +58,8 @@ static void Shader_destructor(JNIEnv* env, jobject o, SkShader* shader, SkiaShad
#ifdef USE_OPENGL_RENDERER
    if (android::uirenderer::Caches::hasInstance()) {
        android::uirenderer::Caches::getInstance().resourceCache.destructor(skiaShader);
    } else {
        delete skiaShader;
    }
#endif
}
+3 −3
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@ public class ColorMatrixColorFilter extends ColorFilter {
    public ColorMatrixColorFilter(ColorMatrix matrix) {
        final float[] colorMatrix = matrix.getArray();
        native_instance = nativeColorMatrixFilter(colorMatrix);
        nativeColorFilter = nColorMatrixFilter(colorMatrix);
        nativeColorFilter = nColorMatrixFilter(native_instance, colorMatrix);
    }

    /**
@@ -42,9 +42,9 @@ public class ColorMatrixColorFilter extends ColorFilter {
            throw new ArrayIndexOutOfBoundsException();
        }
        native_instance = nativeColorMatrixFilter(array);
        nativeColorFilter = nColorMatrixFilter(array);
        nativeColorFilter = nColorMatrixFilter(native_instance, array);
    }

    private static native int nativeColorMatrixFilter(float[] array);
    private static native int nColorMatrixFilter(float[] array);
    private static native int nColorMatrixFilter(int nativeFilter, float[] array);
}
+2 −2
Original line number Diff line number Diff line
@@ -30,9 +30,9 @@ public class LightingColorFilter extends ColorFilter {
     */
    public LightingColorFilter(int mul, int add) {
        native_instance = native_CreateLightingFilter(mul, add);
        nativeColorFilter = nCreateLightingFilter(mul, add);
        nativeColorFilter = nCreateLightingFilter(native_instance, mul, add);
    }

    private static native int native_CreateLightingFilter(int mul, int add);
    private static native int nCreateLightingFilter(int mul, int add);
    private static native int nCreateLightingFilter(int nativeFilter, int mul, int add);
}
+3 −2
Original line number Diff line number Diff line
@@ -26,9 +26,10 @@ public class PorterDuffColorFilter extends ColorFilter {
     */
    public PorterDuffColorFilter(int srcColor, PorterDuff.Mode mode) {
        native_instance = native_CreatePorterDuffFilter(srcColor, mode.nativeInt);
        nativeColorFilter = nCreatePorterDuffFilter(srcColor, mode.nativeInt);
        nativeColorFilter = nCreatePorterDuffFilter(native_instance, srcColor, mode.nativeInt);
    }

    private static native int native_CreatePorterDuffFilter(int srcColor, int porterDuffMode);
    private static native int nCreatePorterDuffFilter(int srcColor, int porterDuffMode);
    private static native int nCreatePorterDuffFilter(int nativeFilter, int srcColor,
            int porterDuffMode);
}
Loading