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

Commit c42bfb95 authored by John Reck's avatar John Reck Committed by Android (Google) Code Review
Browse files

Merge "Refactor VirtualLightRefBase & JNI"

parents 19511164 9fa4071c
Loading
Loading
Loading
Loading
+15 −20
Original line number Original line Diff line number Diff line
@@ -21,6 +21,8 @@ import android.graphics.CanvasProperty;
import android.graphics.Paint;
import android.graphics.Paint;
import android.util.SparseIntArray;
import android.util.SparseIntArray;


import com.android.internal.util.VirtualRefBasePtr;

import java.lang.ref.WeakReference;
import java.lang.ref.WeakReference;


/**
/**
@@ -70,28 +72,32 @@ public final class RenderNodeAnimator {
    public static final int DELTA_TYPE_DELTA = 1;
    public static final int DELTA_TYPE_DELTA = 1;


    private RenderNode mTarget;
    private RenderNode mTarget;
    private long mNativePtr;
    private VirtualRefBasePtr mNativePtr;


    public int mapViewPropertyToRenderProperty(int viewProperty) {
    public int mapViewPropertyToRenderProperty(int viewProperty) {
        return sViewPropertyAnimatorMap.get(viewProperty);
        return sViewPropertyAnimatorMap.get(viewProperty);
    }
    }


    public RenderNodeAnimator(int property, int deltaType, float deltaValue) {
    public RenderNodeAnimator(int property, int deltaType, float deltaValue) {
        mNativePtr = nCreateAnimator(new WeakReference<RenderNodeAnimator>(this),
        init(nCreateAnimator(new WeakReference<RenderNodeAnimator>(this),
                property, deltaType, deltaValue);
                property, deltaType, deltaValue));
    }
    }


    public RenderNodeAnimator(CanvasProperty<Float> property, int deltaType, float deltaValue) {
    public RenderNodeAnimator(CanvasProperty<Float> property, int deltaType, float deltaValue) {
        mNativePtr = nCreateCanvasPropertyFloatAnimator(
        init(nCreateCanvasPropertyFloatAnimator(
                new WeakReference<RenderNodeAnimator>(this),
                new WeakReference<RenderNodeAnimator>(this),
                property.getNativeContainer(), deltaType, deltaValue);
                property.getNativeContainer(), deltaType, deltaValue));
    }
    }


    public RenderNodeAnimator(CanvasProperty<Paint> property, int paintField,
    public RenderNodeAnimator(CanvasProperty<Paint> property, int paintField,
            int deltaType, float deltaValue) {
            int deltaType, float deltaValue) {
        mNativePtr = nCreateCanvasPropertyPaintAnimator(
        init(nCreateCanvasPropertyPaintAnimator(
                new WeakReference<RenderNodeAnimator>(this),
                new WeakReference<RenderNodeAnimator>(this),
                property.getNativeContainer(), paintField, deltaType, deltaValue);
                property.getNativeContainer(), paintField, deltaType, deltaValue));
    }

    private void init(long ptr) {
        mNativePtr = new VirtualRefBasePtr(ptr);
    }
    }


    public void start(View target) {
    public void start(View target) {
@@ -115,11 +121,11 @@ public final class RenderNodeAnimator {
    }
    }


    public void setDuration(int duration) {
    public void setDuration(int duration) {
        nSetDuration(mNativePtr, duration);
        nSetDuration(mNativePtr.get(), duration);
    }
    }


    long getNativeAnimator() {
    long getNativeAnimator() {
        return mNativePtr;
        return mNativePtr.get();
    }
    }


    private void onFinished() {
    private void onFinished() {
@@ -134,16 +140,6 @@ public final class RenderNodeAnimator {
        }
        }
    }
    }


    @Override
    protected void finalize() throws Throwable {
        try {
            nUnref(mNativePtr);
            mNativePtr = 0;
        } finally {
            super.finalize();
        }
    }

    private static native long nCreateAnimator(WeakReference<RenderNodeAnimator> weakThis,
    private static native long nCreateAnimator(WeakReference<RenderNodeAnimator> weakThis,
            int property, int deltaValueType, float deltaValue);
            int property, int deltaValueType, float deltaValue);
    private static native long nCreateCanvasPropertyFloatAnimator(WeakReference<RenderNodeAnimator> weakThis,
    private static native long nCreateCanvasPropertyFloatAnimator(WeakReference<RenderNodeAnimator> weakThis,
@@ -151,5 +147,4 @@ public final class RenderNodeAnimator {
    private static native long nCreateCanvasPropertyPaintAnimator(WeakReference<RenderNodeAnimator> weakThis,
    private static native long nCreateCanvasPropertyPaintAnimator(WeakReference<RenderNodeAnimator> weakThis,
            long canvasProperty, int paintField, int deltaValueType, float deltaValue);
            long canvasProperty, int paintField, int deltaValueType, float deltaValue);
    private static native void nSetDuration(long nativePtr, int duration);
    private static native void nSetDuration(long nativePtr, int duration);
    private static native void nUnref(long nativePtr);
}
}
+47 −0
Original line number Original line Diff line number Diff line
@@ -13,22 +13,35 @@
 * See the License for the specific language governing permissions and
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * limitations under the License.
 */
 */
#ifndef VIRTUALLIGHTREFBASE_H
#define VIRTUALLIGHTREFBASE_H


#include <utils/RefBase.h>
package com.android.internal.util;


namespace android {
/**
namespace uirenderer {
 * Helper class that contains a strong reference to a VirtualRefBase native
 * object. This will incStrong in the ctor, and decStrong in the finalizer
 */
public final class VirtualRefBasePtr {
    private long mNativePtr;

    public VirtualRefBasePtr(long ptr) {
        mNativePtr = ptr;
        nIncStrong(mNativePtr);
    }


// This is a wrapper around LightRefBase that simply enforces a virtual
    public long get() {
// destructor to eliminate the template requirement of LightRefBase
        return mNativePtr;
class VirtualLightRefBase : public LightRefBase<VirtualLightRefBase> {
    }
public:
    virtual ~VirtualLightRefBase() {}
};


} /* namespace uirenderer */
    @Override
} /* namespace android */
    protected void finalize() throws Throwable {
        try {
            nDecStrong(mNativePtr);
            mNativePtr = 0;
        } finally {
            super.finalize();
        }
    }


#endif /* VIRTUALLIGHTREFBASE_H */
    private static native void nIncStrong(long ptr);
    private static native void nDecStrong(long ptr);
}
+2 −1
Original line number Original line Diff line number Diff line
@@ -155,7 +155,8 @@ LOCAL_SRC_FILES:= \
	android_content_res_Configuration.cpp \
	android_content_res_Configuration.cpp \
	android_animation_PropertyValuesHolder.cpp \
	android_animation_PropertyValuesHolder.cpp \
	com_android_internal_net_NetworkStatsFactory.cpp \
	com_android_internal_net_NetworkStatsFactory.cpp \
	com_android_internal_os_Zygote.cpp
	com_android_internal_os_Zygote.cpp \
	com_android_internal_util_VirtualRefBasePtr.cpp


LOCAL_C_INCLUDES += \
LOCAL_C_INCLUDES += \
	$(JNI_H_INCLUDE) \
	$(JNI_H_INCLUDE) \
+2 −0
Original line number Original line Diff line number Diff line
@@ -181,6 +181,7 @@ extern int register_android_animation_PropertyValuesHolder(JNIEnv *env);
extern int register_com_android_internal_content_NativeLibraryHelper(JNIEnv *env);
extern int register_com_android_internal_content_NativeLibraryHelper(JNIEnv *env);
extern int register_com_android_internal_net_NetworkStatsFactory(JNIEnv *env);
extern int register_com_android_internal_net_NetworkStatsFactory(JNIEnv *env);
extern int register_com_android_internal_os_Zygote(JNIEnv *env);
extern int register_com_android_internal_os_Zygote(JNIEnv *env);
extern int register_com_android_internal_util_VirtualRefBasePtr(JNIEnv *env);


static AndroidRuntime* gCurRuntime = NULL;
static AndroidRuntime* gCurRuntime = NULL;


@@ -1262,6 +1263,7 @@ static const RegJNIRec gRegJNI[] = {
    REG_JNI(register_android_os_MemoryFile),
    REG_JNI(register_android_os_MemoryFile),
    REG_JNI(register_com_android_internal_os_ZygoteInit),
    REG_JNI(register_com_android_internal_os_ZygoteInit),
    REG_JNI(register_com_android_internal_os_Zygote),
    REG_JNI(register_com_android_internal_os_Zygote),
    REG_JNI(register_com_android_internal_util_VirtualRefBasePtr),
    REG_JNI(register_android_hardware_Camera),
    REG_JNI(register_android_hardware_Camera),
    REG_JNI(register_android_hardware_camera2_CameraMetadata),
    REG_JNI(register_android_hardware_camera2_CameraMetadata),
    REG_JNI(register_android_hardware_SensorManager),
    REG_JNI(register_android_hardware_SensorManager),
+3 −13
Original line number Original line Diff line number Diff line
@@ -18,7 +18,7 @@
#include "GraphicsJNI.h"
#include "GraphicsJNI.h"
#include <android_runtime/AndroidRuntime.h>
#include <android_runtime/AndroidRuntime.h>


#include <utils/VirtualLightRefBase.h>
#include <utils/RefBase.h>
#include <CanvasProperty.h>
#include <CanvasProperty.h>


namespace android {
namespace android {
@@ -27,22 +27,13 @@ using namespace uirenderer;


#ifdef USE_OPENGL_RENDERER
#ifdef USE_OPENGL_RENDERER


static jlong incRef(VirtualLightRefBase* ptr) {
    ptr->incStrong(0);
    return reinterpret_cast<jlong>(ptr);
}

static jlong createFloat(JNIEnv* env, jobject clazz, jfloat initialValue) {
static jlong createFloat(JNIEnv* env, jobject clazz, jfloat initialValue) {
    return incRef(new CanvasPropertyPrimitive(initialValue));
    return reinterpret_cast<jlong>(new CanvasPropertyPrimitive(initialValue));
}
}


static jlong createPaint(JNIEnv* env, jobject clazz, jlong paintPtr) {
static jlong createPaint(JNIEnv* env, jobject clazz, jlong paintPtr) {
    const SkPaint* paint = reinterpret_cast<const SkPaint*>(paintPtr);
    const SkPaint* paint = reinterpret_cast<const SkPaint*>(paintPtr);
    return incRef(new CanvasPropertyPaint(*paint));
    return reinterpret_cast<jlong>(new CanvasPropertyPaint(*paint));
}

static void unref(JNIEnv* env, jobject clazz, jlong containerPtr) {
    reinterpret_cast<VirtualLightRefBase*>(containerPtr)->decStrong(0);
}
}


#endif
#endif
@@ -57,7 +48,6 @@ static JNINativeMethod gMethods[] = {
#ifdef USE_OPENGL_RENDERER
#ifdef USE_OPENGL_RENDERER
    { "nCreateFloat", "(F)J", (void*) createFloat },
    { "nCreateFloat", "(F)J", (void*) createFloat },
    { "nCreatePaint", "(J)J", (void*) createPaint },
    { "nCreatePaint", "(J)J", (void*) createPaint },
    { "nUnref", "(J)V", (void*) unref },
#endif
#endif
};
};


Loading