android_view_ThreadedRenderer.cpp revision 19b6bcfd83eb7fb92ebd06d2fec89e308311f1d0
1cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck/* 2cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck * Copyright (C) 2010 The Android Open Source Project 3cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck * 4cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck * Licensed under the Apache License, Version 2.0 (the "License"); 5cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck * you may not use this file except in compliance with the License. 6cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck * You may obtain a copy of the License at 7cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck * 8cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck * http://www.apache.org/licenses/LICENSE-2.0 9cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck * 10cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck * Unless required by applicable law or agreed to in writing, software 11cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck * distributed under the License is distributed on an "AS IS" BASIS, 12cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck * See the License for the specific language governing permissions and 14cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck * limitations under the License. 15cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck */ 16cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 1723b797ab5151eb2474f3bdd679f2f07bfd723042John Reck#define LOG_TAG "ThreadedRenderer" 18cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 19cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck#include "jni.h" 20cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck#include <nativehelper/JNIHelp.h> 21cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck#include <android_runtime/AndroidRuntime.h> 22cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 234f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck#include <utils/StrongPointer.h> 244f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck#include <android_runtime/android_view_Surface.h> 254f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck#include <system/window.h> 264f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck 274f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck#include <renderthread/RenderProxy.h> 28cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck#include <renderthread/RenderTask.h> 29cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck#include <renderthread/RenderThread.h> 30cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 31cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Recknamespace android { 32cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 33cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck#ifdef USE_OPENGL_RENDERER 34cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 354f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reckusing namespace android::uirenderer; 364f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reckusing namespace android::uirenderer::renderthread; 37cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 38cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reckstatic jmethodID gRunnableMethod; 39cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 404f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reckclass JavaTask : public RenderTask { 41cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reckpublic: 42cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck JavaTask(JNIEnv* env, jobject jrunnable) { 43cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck env->GetJavaVM(&mVm); 44cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck mRunnable = env->NewGlobalRef(jrunnable); 45cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck } 46cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 47cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck virtual void run() { 48cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck env()->CallVoidMethod(mRunnable, gRunnableMethod); 494f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck env()->DeleteGlobalRef(mRunnable); 504f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck delete this; 51cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck }; 52cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 53cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reckprivate: 54cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck JNIEnv* env() { 55cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck JNIEnv* env; 56cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck if (mVm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) { 57cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck return 0; 58cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck } 59cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck return env; 60cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck } 61cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 62cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck JavaVM* mVm; 63cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck jobject mRunnable; 64cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck}; 65cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 66cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reckstatic void android_view_ThreadedRenderer_postToRenderThread(JNIEnv* env, jobject clazz, 67cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck jobject jrunnable) { 684f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck RenderTask* task = new JavaTask(env, jrunnable); 694f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck RenderThread::getInstance().queue(task); 704f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck} 714f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck 724f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reckstatic jlong android_view_ThreadedRenderer_createProxy(JNIEnv* env, jobject clazz, 734f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck jboolean translucent) { 744f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck return (jlong) new RenderProxy(translucent); 754f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck} 764f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck 774f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reckstatic void android_view_ThreadedRenderer_deleteProxy(JNIEnv* env, jobject clazz, 784f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck jlong proxyPtr) { 7919b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr); 804f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck delete proxy; 814f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck} 824f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck 834f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reckstatic jboolean android_view_ThreadedRenderer_initialize(JNIEnv* env, jobject clazz, 844f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck jlong proxyPtr, jobject jsurface) { 8519b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr); 864f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck sp<ANativeWindow> window = android_view_Surface_getNativeWindow(env, jsurface); 874f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck return proxy->initialize(window.get()); 884f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck} 894f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck 904f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reckstatic void android_view_ThreadedRenderer_updateSurface(JNIEnv* env, jobject clazz, 914f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck jlong proxyPtr, jobject jsurface) { 9219b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr); 934f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck sp<ANativeWindow> window; 944f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck if (jsurface) { 954f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck window = android_view_Surface_getNativeWindow(env, jsurface); 964f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck } 974f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck proxy->updateSurface(window.get()); 984f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck} 994f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck 1004f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reckstatic void android_view_ThreadedRenderer_setup(JNIEnv* env, jobject clazz, 1014f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck jlong proxyPtr, jint width, jint height) { 10219b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr); 1034f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck proxy->setup(width, height); 1044f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck} 1054f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck 1064f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reckstatic void android_view_ThreadedRenderer_drawDisplayList(JNIEnv* env, jobject clazz, 1074f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck jlong proxyPtr, jlong displayListPtr, jint dirtyLeft, jint dirtyTop, 1084f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck jint dirtyRight, jint dirtyBottom) { 10919b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr); 11019b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListPtr); 1114f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck proxy->drawDisplayList(displayList, dirtyLeft, dirtyTop, dirtyRight, dirtyBottom); 1124f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck} 1134f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck 1144f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reckstatic void android_view_ThreadedRenderer_destroyCanvas(JNIEnv* env, jobject clazz, 1154f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck jlong proxyPtr) { 11619b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr); 1174f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck proxy->destroyCanvas(); 1184f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck} 1194f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck 1204f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reckstatic void android_view_ThreadedRenderer_attachFunctor(JNIEnv* env, jobject clazz, 1214f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck jlong proxyPtr, jlong functorPtr) { 12219b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr); 1234f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck Functor* functor = reinterpret_cast<Functor*>(functorPtr); 1244f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck proxy->attachFunctor(functor); 1254f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck} 1264f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck 1274f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reckstatic void android_view_ThreadedRenderer_detachFunctor(JNIEnv* env, jobject clazz, 1284f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck jlong proxyPtr, jlong functorPtr) { 12919b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr); 1304f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck Functor* functor = reinterpret_cast<Functor*>(functorPtr); 1314f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck proxy->detachFunctor(functor); 132cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck} 133cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 134fc53ef27793a39e9effd829e9cae02a9ca14147eJohn Reckstatic void android_view_ThreadedRenderer_runWithGlContext(JNIEnv* env, jobject clazz, 135fc53ef27793a39e9effd829e9cae02a9ca14147eJohn Reck jlong proxyPtr, jobject jrunnable) { 13619b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr); 137fc53ef27793a39e9effd829e9cae02a9ca14147eJohn Reck RenderTask* task = new JavaTask(env, jrunnable); 138fc53ef27793a39e9effd829e9cae02a9ca14147eJohn Reck proxy->runWithGlContext(task); 139fc53ef27793a39e9effd829e9cae02a9ca14147eJohn Reck} 140fc53ef27793a39e9effd829e9cae02a9ca14147eJohn Reck 14119b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reckstatic jlong android_view_ThreadedRenderer_createDisplayListLayer(JNIEnv* env, jobject clazz, 14219b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck jlong proxyPtr, jint width, jint height) { 14319b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr); 14419b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck DeferredLayerUpdater* layer = proxy->createDisplayListLayer(width, height); 14519b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck return reinterpret_cast<jlong>(layer); 14619b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck} 14719b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck 14819b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reckstatic jlong android_view_ThreadedRenderer_createTextureLayer(JNIEnv* env, jobject clazz, 14919b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck jlong proxyPtr) { 15019b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr); 15119b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck DeferredLayerUpdater* layer = proxy->createTextureLayer(); 15219b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck return reinterpret_cast<jlong>(layer); 15319b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck} 15419b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck 15519b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reckstatic jboolean android_view_ThreadedRenderer_copyLayerInto(JNIEnv* env, jobject clazz, 15619b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck jlong proxyPtr, jlong layerPtr, jlong bitmapPtr) { 15719b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr); 15819b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerPtr); 15919b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapPtr); 16019b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck return proxy->copyLayerInto(layer, bitmap); 16119b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck} 16219b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck 16319b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reckstatic void android_view_ThreadedRenderer_destroyLayer(JNIEnv* env, jobject clazz, 16419b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck jlong proxyPtr, jlong layerPtr) { 16519b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr); 16619b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerPtr); 16719b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck proxy->destroyLayer(layer); 16819b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck} 16919b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck 170cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck#endif 171cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 172cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck// ---------------------------------------------------------------------------- 173cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck// JNI Glue 174cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck// ---------------------------------------------------------------------------- 175cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 176cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reckconst char* const kClassPathName = "android/view/ThreadedRenderer"; 177cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 178cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reckstatic JNINativeMethod gMethods[] = { 179cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck#ifdef USE_OPENGL_RENDERER 180cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck { "postToRenderThread", "(Ljava/lang/Runnable;)V", (void*) android_view_ThreadedRenderer_postToRenderThread }, 1814f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck { "nCreateProxy", "(Z)J", (void*) android_view_ThreadedRenderer_createProxy }, 1824f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck { "nDeleteProxy", "(J)V", (void*) android_view_ThreadedRenderer_deleteProxy }, 1834f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck { "nInitialize", "(JLandroid/view/Surface;)Z", (void*) android_view_ThreadedRenderer_initialize }, 1844f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck { "nUpdateSurface", "(JLandroid/view/Surface;)V", (void*) android_view_ThreadedRenderer_updateSurface }, 1854f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck { "nSetup", "(JII)V", (void*) android_view_ThreadedRenderer_setup }, 1864f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck { "nDrawDisplayList", "(JJIIII)V", (void*) android_view_ThreadedRenderer_drawDisplayList}, 1874f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck { "nDestroyCanvas", "(J)V", (void*) android_view_ThreadedRenderer_destroyCanvas}, 1884f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck { "nAttachFunctor", "(JJ)V", (void*) android_view_ThreadedRenderer_attachFunctor}, 1894f02bf4eef6af47f35c70c4dda5b7b9523d89ca0John Reck { "nDetachFunctor", "(JJ)V", (void*) android_view_ThreadedRenderer_detachFunctor}, 190fc53ef27793a39e9effd829e9cae02a9ca14147eJohn Reck { "nRunWithGlContext", "(JLjava/lang/Runnable;)V", (void*) android_view_ThreadedRenderer_runWithGlContext }, 19119b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck { "nCreateDisplayListLayer", "(JII)J", (void*) android_view_ThreadedRenderer_createDisplayListLayer }, 19219b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck { "nCreateTextureLayer", "(J)J", (void*) android_view_ThreadedRenderer_createTextureLayer }, 19319b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck { "nCopyLayerInto", "(JJJ)Z", (void*) android_view_ThreadedRenderer_copyLayerInto }, 19419b6bcfd83eb7fb92ebd06d2fec89e308311f1d0John Reck { "nDestroyLayer", "(JJ)V", (void*) android_view_ThreadedRenderer_destroyLayer }, 195cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck#endif 196cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck}; 197cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 198cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reckint register_android_view_ThreadedRenderer(JNIEnv* env) { 199cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck#ifdef USE_OPENGL_RENDERER 200cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck jclass cls = env->FindClass("java/lang/Runnable"); 201cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck gRunnableMethod = env->GetMethodID(cls, "run", "()V"); 202cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck env->DeleteLocalRef(cls); 203cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck#endif 204cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods)); 205cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck} 206cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck 207cec24ae16e9a0a7c3075f1a8d9149bb7fb3813fcJohn Reck}; // namespace android 208