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

Commit a7993241 authored by Andreas Gampe's avatar Andreas Gampe
Browse files

Graphics: Make SurfaceTexture compile-time initializable

Ensure that all static initializer code can be executed in the
compiler. Move native field caching into the native method
registration function.

Bug: 34956610
Test: m
Test: Device boots (Pixel)
Change-Id: Icf68c8fbadcaaa133a152942a3a7ba7aba84a1df
parent 88c0facc
Loading
Loading
Loading
Loading
+5 −1
Original line number Original line Diff line number Diff line
@@ -34,6 +34,7 @@


#include "jni.h"
#include "jni.h"
#include "JNIHelp.h"
#include "JNIHelp.h"
#include "ScopedLocalRef.h"


// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------


@@ -385,7 +386,6 @@ static jboolean SurfaceTexture_isReleased(JNIEnv* env, jobject thiz)
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------


static const JNINativeMethod gSurfaceTextureMethods[] = {
static const JNINativeMethod gSurfaceTextureMethods[] = {
    {"nativeClassInit",            "()V",   (void*)SurfaceTexture_classInit },
    {"nativeInit",                 "(ZIZLjava/lang/ref/WeakReference;)V", (void*)SurfaceTexture_init },
    {"nativeInit",                 "(ZIZLjava/lang/ref/WeakReference;)V", (void*)SurfaceTexture_init },
    {"nativeFinalize",             "()V",   (void*)SurfaceTexture_finalize },
    {"nativeFinalize",             "()V",   (void*)SurfaceTexture_finalize },
    {"nativeSetDefaultBufferSize", "(II)V", (void*)SurfaceTexture_setDefaultBufferSize },
    {"nativeSetDefaultBufferSize", "(II)V", (void*)SurfaceTexture_setDefaultBufferSize },
@@ -401,6 +401,10 @@ static const JNINativeMethod gSurfaceTextureMethods[] = {


int register_android_graphics_SurfaceTexture(JNIEnv* env)
int register_android_graphics_SurfaceTexture(JNIEnv* env)
{
{
    // Cache some fields.
    ScopedLocalRef<jclass> klass(env, FindClassOrDie(env, kSurfaceTextureClassPathName));
    SurfaceTexture_classInit(env, klass.get());

    return RegisterMethodsOrDie(env, kSurfaceTextureClassPathName, gSurfaceTextureMethods,
    return RegisterMethodsOrDie(env, kSurfaceTextureClassPathName, gSurfaceTextureMethods,
                                NELEM(gSurfaceTextureMethods));
                                NELEM(gSurfaceTextureMethods));
}
}
+0 −7
Original line number Original line Diff line number Diff line
@@ -403,11 +403,4 @@ public class SurfaceTexture {
    private native int nativeGetQueuedCount();
    private native int nativeGetQueuedCount();
    private native void nativeRelease();
    private native void nativeRelease();
    private native boolean nativeIsReleased();
    private native boolean nativeIsReleased();

    /*
     * We use a class initializer to allow the native code to cache some
     * field offsets.
     */
    private static native void nativeClassInit();
    static { nativeClassInit(); }
}
}