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:
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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(); }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user