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
This commit is contained in:
Andreas Gampe
2017-02-20 16:18:24 -08:00
parent 88c0facc1e
commit a7993241a9
2 changed files with 5 additions and 8 deletions

View File

@@ -34,6 +34,7 @@
#include "jni.h"
#include "JNIHelp.h"
#include "ScopedLocalRef.h"
// ----------------------------------------------------------------------------
@@ -385,7 +386,6 @@ static jboolean SurfaceTexture_isReleased(JNIEnv* env, jobject thiz)
// ----------------------------------------------------------------------------
static const JNINativeMethod gSurfaceTextureMethods[] = {
{"nativeClassInit", "()V", (void*)SurfaceTexture_classInit },
{"nativeInit", "(ZIZLjava/lang/ref/WeakReference;)V", (void*)SurfaceTexture_init },
{"nativeFinalize", "()V", (void*)SurfaceTexture_finalize },
{"nativeSetDefaultBufferSize", "(II)V", (void*)SurfaceTexture_setDefaultBufferSize },
@@ -401,6 +401,10 @@ static const JNINativeMethod gSurfaceTextureMethods[] = {
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,
NELEM(gSurfaceTextureMethods));
}

View File

@@ -403,11 +403,4 @@ public class SurfaceTexture {
private native int nativeGetQueuedCount();
private native void nativeRelease();
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(); }
}