1e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy/* 2e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * Copyright (C) 2010 The Android Open Source Project 3e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * 4e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 5e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * you may not use this file except in compliance with the License. 6e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * You may obtain a copy of the License at 7e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * 8e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * http://www.apache.org/licenses/LICENSE-2.0 9e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * 10e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * Unless required by applicable law or agreed to in writing, software 11e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * distributed under the License is distributed on an "AS IS" BASIS, 12e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * See the License for the specific language governing permissions and 14e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * limitations under the License. 15e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy */ 16e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 17a1db574036c9bc2d397b69f8200594027e1fff16Romain Guy#define LOG_TAG "OpenGLRenderer" 18a1db574036c9bc2d397b69f8200594027e1fff16Romain Guy 19e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy#include "jni.h" 20e4ac2d6b5723c95e648c489b187ddde449452c13Patrick Dubroy#include "GraphicsJNI.h" 21e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy#include <nativehelper/JNIHelp.h> 226554943a1dd6854c0f4976900956e556767b49e1Romain Guy 23e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy#include <android_runtime/AndroidRuntime.h> 246554943a1dd6854c0f4976900956e556767b49e1Romain Guy 25cd1c3eba69d044b551cededad75474038f919890John Reck#include <utils/Looper.h> 266554943a1dd6854c0f4976900956e556767b49e1Romain Guy#include <cutils/properties.h> 278f0095cd33558e9cc8a440047908e53b68906f5fRomain Guy 28ce0537b80087a6225273040a987414b1dd081aa0Romain Guy#include <SkBitmap.h> 29079ba2c85b15e882629b8d188f5fbdb42f7f8eeaRomain Guy#include <SkRegion.h> 30e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 319d5316e3f56d138504565ff311145ac01621dff4Romain Guy#include <Rect.h> 32113e0824d6bddf4376240681f9cf6a2deded9498John Reck#include <RenderNode.h> 3352244fff29042926e21fa897ef5ab11148e35299John Reck#include <CanvasProperty.h> 34dccca44ffda4836b56a21da95a046c9708ffd49csergeyv#include <hwui/Canvas.h> 35dccca44ffda4836b56a21da95a046c9708ffd49csergeyv#include <hwui/Paint.h> 360e89e2b7bcb2c035e8cee77f93120e7c5617f8d2John Reck#include <renderthread/RenderProxy.h> 3785bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy 38987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe#include "core_jni_helpers.h" 39987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe 40e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guynamespace android { 41e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 429d5316e3f56d138504565ff311145ac01621dff4Romain Guyusing namespace uirenderer; 439d5316e3f56d138504565ff311145ac01621dff4Romain Guy 44cd1c3eba69d044b551cededad75474038f919890John ReckjmethodID gRunnableMethodId; 45cd1c3eba69d044b551cededad75474038f919890John Reck 46cd1c3eba69d044b551cededad75474038f919890John Reckstatic JNIEnv* jnienv(JavaVM* vm) { 47cd1c3eba69d044b551cededad75474038f919890John Reck JNIEnv* env; 48cd1c3eba69d044b551cededad75474038f919890John Reck if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) { 49cd1c3eba69d044b551cededad75474038f919890John Reck LOG_ALWAYS_FATAL("Failed to get JNIEnv for JavaVM: %p", vm); 50cd1c3eba69d044b551cededad75474038f919890John Reck } 51cd1c3eba69d044b551cededad75474038f919890John Reck return env; 52cd1c3eba69d044b551cededad75474038f919890John Reck} 53cd1c3eba69d044b551cededad75474038f919890John Reck 54cd1c3eba69d044b551cededad75474038f919890John Reckclass InvokeRunnableMessage : public MessageHandler { 55cd1c3eba69d044b551cededad75474038f919890John Reckpublic: 56cd1c3eba69d044b551cededad75474038f919890John Reck InvokeRunnableMessage(JNIEnv* env, jobject runnable) { 57cd1c3eba69d044b551cededad75474038f919890John Reck mRunnable = env->NewGlobalRef(runnable); 58cd1c3eba69d044b551cededad75474038f919890John Reck env->GetJavaVM(&mVm); 59cd1c3eba69d044b551cededad75474038f919890John Reck } 60cd1c3eba69d044b551cededad75474038f919890John Reck 61cd1c3eba69d044b551cededad75474038f919890John Reck virtual ~InvokeRunnableMessage() { 62cd1c3eba69d044b551cededad75474038f919890John Reck jnienv(mVm)->DeleteGlobalRef(mRunnable); 63cd1c3eba69d044b551cededad75474038f919890John Reck } 64cd1c3eba69d044b551cededad75474038f919890John Reck 65cd1c3eba69d044b551cededad75474038f919890John Reck virtual void handleMessage(const Message&) { 66cd1c3eba69d044b551cededad75474038f919890John Reck jnienv(mVm)->CallVoidMethod(mRunnable, gRunnableMethodId); 67cd1c3eba69d044b551cededad75474038f919890John Reck } 68cd1c3eba69d044b551cededad75474038f919890John Reck 69cd1c3eba69d044b551cededad75474038f919890John Reckprivate: 70cd1c3eba69d044b551cededad75474038f919890John Reck JavaVM* mVm; 71cd1c3eba69d044b551cededad75474038f919890John Reck jobject mRunnable; 72cd1c3eba69d044b551cededad75474038f919890John Reck}; 73cd1c3eba69d044b551cededad75474038f919890John Reck 74cd1c3eba69d044b551cededad75474038f919890John Reckclass GlFunctorReleasedCallbackBridge : public GlFunctorLifecycleListener { 75cd1c3eba69d044b551cededad75474038f919890John Reckpublic: 76cd1c3eba69d044b551cededad75474038f919890John Reck GlFunctorReleasedCallbackBridge(JNIEnv* env, jobject javaCallback) { 77cd1c3eba69d044b551cededad75474038f919890John Reck mLooper = Looper::getForThread(); 78cd1c3eba69d044b551cededad75474038f919890John Reck mMessage = new InvokeRunnableMessage(env, javaCallback); 79cd1c3eba69d044b551cededad75474038f919890John Reck } 80cd1c3eba69d044b551cededad75474038f919890John Reck 81cd1c3eba69d044b551cededad75474038f919890John Reck virtual void onGlFunctorReleased(Functor* functor) override { 82cd1c3eba69d044b551cededad75474038f919890John Reck mLooper->sendMessage(mMessage, 0); 83cd1c3eba69d044b551cededad75474038f919890John Reck } 84cd1c3eba69d044b551cededad75474038f919890John Reck 85cd1c3eba69d044b551cededad75474038f919890John Reckprivate: 86cd1c3eba69d044b551cededad75474038f919890John Reck sp<Looper> mLooper; 87cd1c3eba69d044b551cededad75474038f919890John Reck sp<InvokeRunnableMessage> mMessage; 88cd1c3eba69d044b551cededad75474038f919890John Reck}; 89cd1c3eba69d044b551cededad75474038f919890John Reck 90e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 91fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik// ---------------- Regular JNI ----------------------------- 92fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik 93fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craikstatic void 94fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craikandroid_app_ActivityThread_dumpGraphics(JNIEnv* env, jobject clazz, jobject javaFileDescriptor) { 95fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik int fd = jniGetFDFromFileDescriptor(env, javaFileDescriptor); 96fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik android::uirenderer::renderthread::RenderProxy::dumpGraphicsMemory(fd); 978afd0f245cc0c4a0366f39f41b5f78e47ee83be3Chris Craik} 988afd0f245cc0c4a0366f39f41b5f78e47ee83be3Chris Craik 99fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik 100fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik// ---------------- @FastNative ----------------------------- 101530041d3191ce817832a0108514617768e43cda6Romain Guy 102c9070ebd13263a341511cf779087a46750021196Chris Craikstatic void android_view_DisplayListCanvas_callDrawGLFunction(JNIEnv* env, jobject clazz, 103cd1c3eba69d044b551cededad75474038f919890John Reck jlong canvasPtr, jlong functorPtr, jobject releasedCallback) { 1046f485569fa3d6047dcffd068aebf361e3598783cDerek Sollenberger Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr); 1059f66ea06ace80f60e049e3e7e778a8552cebe5b3Chris Craik Functor* functor = reinterpret_cast<Functor*>(functorPtr); 1064afbed15f3b4f88c0190bbb89deba7a6ceae2da7John Reck sp<GlFunctorReleasedCallbackBridge> bridge; 1074afbed15f3b4f88c0190bbb89deba7a6ceae2da7John Reck if (releasedCallback) { 1084afbed15f3b4f88c0190bbb89deba7a6ceae2da7John Reck bridge = new GlFunctorReleasedCallbackBridge(env, releasedCallback); 1094afbed15f3b4f88c0190bbb89deba7a6ceae2da7John Reck } 110cd1c3eba69d044b551cededad75474038f919890John Reck canvas->callDrawGLFunction(functor, bridge.get()); 111daf98e941e140e8739458126640183b9f296a2abChet Haase} 112daf98e941e140e8739458126640183b9f296a2abChet Haase 1138f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy 114fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik// ---------------- @CriticalNative ------------------------- 115fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik 116fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craikstatic jlong android_view_DisplayListCanvas_createDisplayListCanvas(jlong renderNodePtr, 117fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik jint width, jint height) { 118fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 119fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik return reinterpret_cast<jlong>(Canvas::create_recording_canvas(width, height, renderNode)); 120fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik} 121fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik 122fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craikstatic void android_view_DisplayListCanvas_resetDisplayListCanvas(jlong canvasPtr, 123fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik jlong renderNodePtr, jint width, jint height) { 124fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr); 125fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 126fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik canvas->resetRecording(width, height, renderNode); 127fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik} 128fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik 129fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craikstatic jint android_view_DisplayListCanvas_getMaxTextureWidth() { 130c0a0e1a66da20a18045d59451b59ec32685bcf18Thomas Buhot if (!Caches::hasInstance()) { 131c0a0e1a66da20a18045d59451b59ec32685bcf18Thomas Buhot android::uirenderer::renderthread::RenderProxy::staticFence(); 132c0a0e1a66da20a18045d59451b59ec32685bcf18Thomas Buhot } 133f61970fc79e9c5cf340fa942597628242361864aRomain Guy return Caches::getInstance().maxTextureSize; 134f61970fc79e9c5cf340fa942597628242361864aRomain Guy} 135f61970fc79e9c5cf340fa942597628242361864aRomain Guy 136fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craikstatic jint android_view_DisplayListCanvas_getMaxTextureHeight() { 137c0a0e1a66da20a18045d59451b59ec32685bcf18Thomas Buhot if (!Caches::hasInstance()) { 138c0a0e1a66da20a18045d59451b59ec32685bcf18Thomas Buhot android::uirenderer::renderthread::RenderProxy::staticFence(); 139c0a0e1a66da20a18045d59451b59ec32685bcf18Thomas Buhot } 140f61970fc79e9c5cf340fa942597628242361864aRomain Guy return Caches::getInstance().maxTextureSize; 141f61970fc79e9c5cf340fa942597628242361864aRomain Guy} 142f61970fc79e9c5cf340fa942597628242361864aRomain Guy 143fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craikstatic void android_view_DisplayListCanvas_insertReorderBarrier(jlong canvasPtr, 144fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik jboolean reorderEnable) { 1456f485569fa3d6047dcffd068aebf361e3598783cDerek Sollenberger Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr); 146fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik canvas->insertReorderBarrier(reorderEnable); 147072707dfad1da6f49f4d3ce58ca104f6c46a7266Jorim Jaggi} 148072707dfad1da6f49f4d3ce58ca104f6c46a7266Jorim Jaggi 149fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craikstatic jlong android_view_DisplayListCanvas_finishRecording(jlong canvasPtr) { 1506f485569fa3d6047dcffd068aebf361e3598783cDerek Sollenberger Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr); 15186c03ca534755b2ed5fbbddabccb041f11eeacdfChris Craik return reinterpret_cast<jlong>(canvas->finishRecording()); 152162a0217563f4665da6eb183dfce0fef740f641fJeff Brown} 153162a0217563f4665da6eb183dfce0fef740f641fJeff Brown 154fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craikstatic void android_view_DisplayListCanvas_drawRenderNode(jlong canvasPtr, jlong renderNodePtr) { 1556f485569fa3d6047dcffd068aebf361e3598783cDerek Sollenberger Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr); 156a7090e0cfd7c719a6d4c03aae34f5db98754cbddChris Craik RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr); 15786c03ca534755b2ed5fbbddabccb041f11eeacdfChris Craik canvas->drawRenderNode(renderNode); 158b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 159b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 160fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craikstatic void android_view_DisplayListCanvas_drawLayer(jlong canvasPtr, jlong layerPtr) { 1616f485569fa3d6047dcffd068aebf361e3598783cDerek Sollenberger Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr); 16212f5e3433226f0a2886a98b0b8da8d5e947c5cdeJohn Reck DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerPtr); 16386c03ca534755b2ed5fbbddabccb041f11eeacdfChris Craik canvas->drawLayer(layer); 1646c319ca1275c8db892c39b48fc54864c949f9171Romain Guy} 1656c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 166fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craikstatic void android_view_DisplayListCanvas_drawRoundRectProps(jlong canvasPtr, 167fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik jlong leftPropPtr, jlong topPropPtr, jlong rightPropPtr, jlong bottomPropPtr, 168fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik jlong rxPropPtr, jlong ryPropPtr, jlong paintPropPtr) { 169fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr); 170fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik CanvasPropertyPrimitive* leftProp = reinterpret_cast<CanvasPropertyPrimitive*>(leftPropPtr); 171fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik CanvasPropertyPrimitive* topProp = reinterpret_cast<CanvasPropertyPrimitive*>(topPropPtr); 172fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik CanvasPropertyPrimitive* rightProp = reinterpret_cast<CanvasPropertyPrimitive*>(rightPropPtr); 173fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik CanvasPropertyPrimitive* bottomProp = reinterpret_cast<CanvasPropertyPrimitive*>(bottomPropPtr); 174fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik CanvasPropertyPrimitive* rxProp = reinterpret_cast<CanvasPropertyPrimitive*>(rxPropPtr); 175fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik CanvasPropertyPrimitive* ryProp = reinterpret_cast<CanvasPropertyPrimitive*>(ryPropPtr); 176fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik CanvasPropertyPaint* paintProp = reinterpret_cast<CanvasPropertyPaint*>(paintPropPtr); 177fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik canvas->drawRoundRect(leftProp, topProp, rightProp, bottomProp, rxProp, ryProp, paintProp); 178fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik} 1799c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase 180fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craikstatic void android_view_DisplayListCanvas_drawCircleProps(jlong canvasPtr, 181fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik jlong xPropPtr, jlong yPropPtr, jlong radiusPropPtr, jlong paintPropPtr) { 182fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr); 183fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik CanvasPropertyPrimitive* xProp = reinterpret_cast<CanvasPropertyPrimitive*>(xPropPtr); 184fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik CanvasPropertyPrimitive* yProp = reinterpret_cast<CanvasPropertyPrimitive*>(yPropPtr); 185fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik CanvasPropertyPrimitive* radiusProp = reinterpret_cast<CanvasPropertyPrimitive*>(radiusPropPtr); 186fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik CanvasPropertyPaint* paintProp = reinterpret_cast<CanvasPropertyPaint*>(paintPropPtr); 187fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik canvas->drawCircle(xProp, yProp, radiusProp, paintProp); 1889c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase} 1899c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase 1909c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase// ---------------------------------------------------------------------------- 191e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy// JNI Glue 192e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy// ---------------------------------------------------------------------------- 193e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 194c9070ebd13263a341511cf779087a46750021196Chris Craikconst char* const kClassPathName = "android/view/DisplayListCanvas"; 195e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 196e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guystatic JNINativeMethod gMethods[] = { 19761c8c9c5b2006d18e9310b6521c65b36ffe75ce4Romain Guy 1985cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck // ------------ @FastNative ------------------ 1995cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck 2005cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck { "nCallDrawGLFunction", "(JJLjava/lang/Runnable;)V", 201cd1c3eba69d044b551cededad75474038f919890John Reck (void*) android_view_DisplayListCanvas_callDrawGLFunction }, 2027d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy 203fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik // ------------ @CriticalNative -------------- 204c0e7a90f1f5f98e85dbeda021fac0dff79725933Stan Iliev { "nCreateDisplayListCanvas", "(JII)J", (void*) android_view_DisplayListCanvas_createDisplayListCanvas }, 205fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik { "nResetDisplayListCanvas", "(JJII)V", (void*) android_view_DisplayListCanvas_resetDisplayListCanvas }, 206fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik { "nGetMaximumTextureWidth", "()I", (void*) android_view_DisplayListCanvas_getMaxTextureWidth }, 207fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik { "nGetMaximumTextureHeight", "()I", (void*) android_view_DisplayListCanvas_getMaxTextureHeight }, 208fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik { "nInsertReorderBarrier", "(JZ)V", (void*) android_view_DisplayListCanvas_insertReorderBarrier }, 209fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik { "nFinishRecording", "(J)J", (void*) android_view_DisplayListCanvas_finishRecording }, 210fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik { "nDrawRenderNode", "(JJ)V", (void*) android_view_DisplayListCanvas_drawRenderNode }, 211fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik { "nDrawLayer", "(JJ)V", (void*) android_view_DisplayListCanvas_drawLayer }, 212fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik { "nDrawCircle", "(JJJJJ)V", (void*) android_view_DisplayListCanvas_drawCircleProps }, 213fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik { "nDrawRoundRect", "(JJJJJJJJ)V",(void*) android_view_DisplayListCanvas_drawRoundRectProps }, 214e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy}; 215e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 2169c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haasestatic JNINativeMethod gActivityThreadMethods[] = { 217fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik // ------------ Regular JNI ------------------ 218fc29424a3c6c710c0b27d5b59e115fbbb6365192Chris Craik { "nDumpGraphicsInfo", "(Ljava/io/FileDescriptor;)V", 2199c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase (void*) android_app_ActivityThread_dumpGraphics } 2209c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase}; 2219c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase 222c9070ebd13263a341511cf779087a46750021196Chris Craikint register_android_view_DisplayListCanvas(JNIEnv* env) { 223cd1c3eba69d044b551cededad75474038f919890John Reck jclass runnableClass = FindClassOrDie(env, "java/lang/Runnable"); 224cd1c3eba69d044b551cededad75474038f919890John Reck gRunnableMethodId = GetMethodIDOrDie(env, runnableClass, "run", "()V"); 225cd1c3eba69d044b551cededad75474038f919890John Reck 226987f79f60bb1f0a4bcd3ef22e57301c743f0b94fAndreas Gampe return RegisterMethodsOrDie(env, kClassPathName, gMethods, NELEM(gMethods)); 227e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy} 228e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 2296be3d5561cbeccf0a8257a4acb155657f868e548Romain Guyint register_android_app_ActivityThread(JNIEnv* env) { 230ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe return RegisterMethodsOrDie(env, "android/app/ActivityThread", 2319c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase gActivityThreadMethods, NELEM(gActivityThreadMethods)); 2329c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase} 2339c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase 234e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy}; 235