blob: 72cfd5b4e7d50cff5960d357a17f4da945c2bfd5 [file] [log] [blame]
Romain Guye4d01122010-06-16 18:44:05 -07001/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Romain Guya1db5742010-07-20 13:09:13 -070017#define LOG_TAG "OpenGLRenderer"
18
Romain Guye4d01122010-06-16 18:44:05 -070019#include "jni.h"
Patrick Dubroye4ac2d62010-12-01 11:23:13 -080020#include "GraphicsJNI.h"
Romain Guye4d01122010-06-16 18:44:05 -070021#include <nativehelper/JNIHelp.h>
Romain Guy65549432012-03-26 16:45:05 -070022
Romain Guye4d01122010-06-16 18:44:05 -070023#include <android_runtime/AndroidRuntime.h>
Romain Guy65549432012-03-26 16:45:05 -070024
Mathias Agopianb13b9bd2012-02-17 18:27:36 -080025#include <androidfw/ResourceTypes.h>
Romain Guye4d01122010-06-16 18:44:05 -070026
Romain Guy65549432012-03-26 16:45:05 -070027#include <cutils/properties.h>
Romain Guy8f0095c2011-05-02 17:24:22 -070028
Romain Guyce0537b2010-06-29 21:05:21 -070029#include <SkBitmap.h>
Romain Guy079ba2c2010-07-16 14:12:24 -070030#include <SkRegion.h>
Romain Guye4d01122010-06-16 18:44:05 -070031
Romain Guyb051e892010-09-28 19:09:36 -070032#include <DisplayListRenderer.h>
Romain Guy9d5316e2010-06-24 19:30:36 -070033#include <Rect.h>
John Reck113e0822014-03-18 09:22:59 -070034#include <RenderNode.h>
John Reck52244ff2014-05-01 21:27:37 -070035#include <CanvasProperty.h>
Behdad Esfahbod6ba30b82014-07-15 16:22:32 -040036#include <Paint.h>
John Reck0e89e2b2014-10-31 14:49:06 -070037#include <renderthread/RenderProxy.h>
Romain Guy85bf02f2010-06-22 13:11:24 -070038
Andreas Gampe987f79f2014-11-18 17:29:46 -080039#include "core_jni_helpers.h"
40
Romain Guye4d01122010-06-16 18:44:05 -070041namespace android {
42
Romain Guy9d5316e2010-06-24 19:30:36 -070043using namespace uirenderer;
44
Andreas Gampeed6b9df2014-11-20 22:02:20 -080045static struct {
46 jmethodID set;
47} gRectClassInfo;
48
Romain Guy244ada12012-03-28 16:41:26 -070049// ----------------------------------------------------------------------------
Romain Guybdb801ca2010-10-04 17:22:29 -070050// Defines
Romain Guy244ada12012-03-28 16:41:26 -070051// ----------------------------------------------------------------------------
Romain Guybdb801ca2010-10-04 17:22:29 -070052
Andreas Gampeed6b9df2014-11-20 22:02:20 -080053static const bool kDebugRenderer = false;
Romain Guy9d5316e2010-06-24 19:30:36 -070054
Romain Guye4d01122010-06-16 18:44:05 -070055// ----------------------------------------------------------------------------
Romain Guye4d01122010-06-16 18:44:05 -070056// Setup
57// ----------------------------------------------------------------------------
58
Romain Guy7d7b5492011-01-24 16:33:45 -080059static void android_view_GLES20Canvas_setViewport(JNIEnv* env, jobject clazz,
Ashok Bhat36bef0b2014-01-20 20:08:01 +000060 jlong rendererPtr, jint width, jint height) {
John Reck3b202512014-06-23 13:13:08 -070061 DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr);
Romain Guyf6a11b82010-06-23 17:47:49 -070062 renderer->setViewport(width, height);
Romain Guye4d01122010-06-16 18:44:05 -070063}
64
Chris Craikcce47eb2014-07-16 15:12:15 -070065static void android_view_GLES20Canvas_setHighContrastText(JNIEnv* env, jobject clazz,
66 jlong rendererPtr, jboolean highContrastText) {
67 DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr);
68 renderer->setHighContrastText(highContrastText);
69}
70
Chris Craik8afd0f22014-08-21 17:41:57 -070071static void android_view_GLES20Canvas_insertReorderBarrier(JNIEnv* env, jobject clazz,
72 jlong rendererPtr, jboolean reorderEnable) {
73 DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr);
74 renderer->insertReorderBarrier(reorderEnable);
75}
76
Tom Hudson107843d2014-09-08 11:26:26 -040077static void android_view_GLES20Canvas_prepare(JNIEnv* env, jobject clazz,
Tom Hudson8dfaa492014-12-09 15:03:44 -050078 jlong rendererPtr) {
John Reck3b202512014-06-23 13:13:08 -070079 DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr);
Tom Hudson8dfaa492014-12-09 15:03:44 -050080 renderer->prepare();
Romain Guye4d01122010-06-16 18:44:05 -070081}
82
Tom Hudson107843d2014-09-08 11:26:26 -040083static void android_view_GLES20Canvas_prepareDirty(JNIEnv* env, jobject clazz,
Tom Hudson8dfaa492014-12-09 15:03:44 -050084 jlong rendererPtr, jint left, jint top, jint right, jint bottom) {
John Reck3b202512014-06-23 13:13:08 -070085 DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr);
Tom Hudson8dfaa492014-12-09 15:03:44 -050086 renderer->prepareDirty(left, top, right, bottom);
Romain Guy7d7b5492011-01-24 16:33:45 -080087}
88
89static void android_view_GLES20Canvas_finish(JNIEnv* env, jobject clazz,
Ashok Bhat36bef0b2014-01-20 20:08:01 +000090 jlong rendererPtr) {
John Reck3b202512014-06-23 13:13:08 -070091 DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr);
Romain Guyb025b9c2010-09-16 14:16:48 -070092 renderer->finish();
93}
94
Chris Craikba9b6132013-12-15 17:10:19 -080095static void android_view_GLES20Canvas_setProperty(JNIEnv* env,
96 jobject clazz, jstring name, jstring value) {
97 if (!Caches::hasInstance()) {
98 ALOGW("can't set property, no Caches instance");
99 return;
100 }
101
102 if (name == NULL || value == NULL) {
103 ALOGW("can't set prop, null passed");
104 }
105
106 const char* nameCharArray = env->GetStringUTFChars(name, NULL);
107 const char* valueCharArray = env->GetStringUTFChars(value, NULL);
108 Caches::getInstance().setTempProperty(nameCharArray, valueCharArray);
109 env->ReleaseStringUTFChars(name, nameCharArray);
110 env->ReleaseStringUTFChars(name, valueCharArray);
111}
112
Romain Guy530041d2012-01-25 18:56:29 -0800113// ----------------------------------------------------------------------------
114// Functor
115// ----------------------------------------------------------------------------
116
Tom Hudson107843d2014-09-08 11:26:26 -0400117static void android_view_GLES20Canvas_callDrawGLFunction(JNIEnv* env, jobject clazz,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000118 jlong rendererPtr, jlong functorPtr) {
John Reck3b202512014-06-23 13:13:08 -0700119 DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr);
Chris Craik9f66ea02013-12-27 15:15:55 -0800120 Functor* functor = reinterpret_cast<Functor*>(functorPtr);
Romain Guycabfcc12011-03-07 18:06:46 -0800121 android::uirenderer::Rect dirty;
Tom Hudson107843d2014-09-08 11:26:26 -0400122 renderer->callDrawGLFunction(functor, dirty);
Chet Haasedaf98e92011-01-10 14:10:36 -0800123}
124
Romain Guy8f3b8e32012-03-27 16:33:45 -0700125// ----------------------------------------------------------------------------
126// Misc
127// ----------------------------------------------------------------------------
128
Romain Guyf61970fc2011-07-07 14:10:06 -0700129static jint android_view_GLES20Canvas_getMaxTextureWidth(JNIEnv* env, jobject clazz) {
130 return Caches::getInstance().maxTextureSize;
131}
132
133static jint android_view_GLES20Canvas_getMaxTextureHeight(JNIEnv* env, jobject clazz) {
134 return Caches::getInstance().maxTextureSize;
135}
136
Romain Guye4d01122010-06-16 18:44:05 -0700137// ----------------------------------------------------------------------------
Romain Guybb9524b2010-06-22 18:56:38 -0700138// Drawing
Romain Guy85bf02f2010-06-22 13:11:24 -0700139// ----------------------------------------------------------------------------
140
Romain Guy7d7b5492011-01-24 16:33:45 -0800141static void android_view_GLES20Canvas_drawPatch(JNIEnv* env, jobject clazz,
Derek Sollenbergerf29d5a52014-12-03 09:55:32 -0500142 jlong rendererPtr, jlong bitmapPtr, jlong patchPtr,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000143 float left, float top, float right, float bottom, jlong paintPtr) {
Chris Craik9f66ea02013-12-27 15:15:55 -0800144 SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapPtr);
Chris Craik0c20c382013-07-02 10:48:54 -0700145
John Reck3b202512014-06-23 13:13:08 -0700146 DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr);
Chris Craik9f66ea02013-12-27 15:15:55 -0800147 Res_png_9patch* patch = reinterpret_cast<Res_png_9patch*>(patchPtr);
Behdad Esfahbod6ba30b82014-07-15 16:22:32 -0400148 Paint* paint = reinterpret_cast<Paint*>(paintPtr);
Romain Guy3b748a42013-04-17 18:54:38 -0700149 renderer->drawPatch(bitmap, patch, left, top, right, bottom, paint);
Romain Guydeba7852010-07-07 17:54:48 -0700150}
151
Jorim Jaggi072707d2014-09-15 17:20:08 +0200152static void android_view_GLES20Canvas_drawRoundRectProps(JNIEnv* env, jobject clazz,
153 jlong rendererPtr, jlong leftPropPtr, jlong topPropPtr, jlong rightPropPtr,
154 jlong bottomPropPtr, jlong rxPropPtr, jlong ryPropPtr, jlong paintPropPtr) {
155 DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr);
156 CanvasPropertyPrimitive* leftProp = reinterpret_cast<CanvasPropertyPrimitive*>(leftPropPtr);
157 CanvasPropertyPrimitive* topProp = reinterpret_cast<CanvasPropertyPrimitive*>(topPropPtr);
158 CanvasPropertyPrimitive* rightProp = reinterpret_cast<CanvasPropertyPrimitive*>(rightPropPtr);
159 CanvasPropertyPrimitive* bottomProp = reinterpret_cast<CanvasPropertyPrimitive*>(bottomPropPtr);
160 CanvasPropertyPrimitive* rxProp = reinterpret_cast<CanvasPropertyPrimitive*>(rxPropPtr);
161 CanvasPropertyPrimitive* ryProp = reinterpret_cast<CanvasPropertyPrimitive*>(ryPropPtr);
162 CanvasPropertyPaint* paintProp = reinterpret_cast<CanvasPropertyPaint*>(paintPropPtr);
163 renderer->drawRoundRect(leftProp, topProp, rightProp, bottomProp, rxProp, ryProp, paintProp);
164}
165
John Reck52244ff2014-05-01 21:27:37 -0700166static void android_view_GLES20Canvas_drawCircleProps(JNIEnv* env, jobject clazz,
167 jlong rendererPtr, jlong xPropPtr, jlong yPropPtr, jlong radiusPropPtr, jlong paintPropPtr) {
John Reck3b202512014-06-23 13:13:08 -0700168 DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr);
John Reck52244ff2014-05-01 21:27:37 -0700169 CanvasPropertyPrimitive* xProp = reinterpret_cast<CanvasPropertyPrimitive*>(xPropPtr);
170 CanvasPropertyPrimitive* yProp = reinterpret_cast<CanvasPropertyPrimitive*>(yPropPtr);
171 CanvasPropertyPrimitive* radiusProp = reinterpret_cast<CanvasPropertyPrimitive*>(radiusPropPtr);
172 CanvasPropertyPaint* paintProp = reinterpret_cast<CanvasPropertyPaint*>(paintPropPtr);
173 renderer->drawCircle(xProp, yProp, radiusProp, paintProp);
174}
175
Romain Guy672433d2013-01-04 19:05:13 -0800176static void android_view_GLES20Canvas_drawRegionAsRects(JNIEnv* env, jobject clazz,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000177 jlong rendererPtr, jlong regionPtr, jlong paintPtr) {
John Reck3b202512014-06-23 13:13:08 -0700178 DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr);
Chris Craik9f66ea02013-12-27 15:15:55 -0800179 SkRegion* region = reinterpret_cast<SkRegion*>(regionPtr);
Behdad Esfahbod6ba30b82014-07-15 16:22:32 -0400180 Paint* paint = reinterpret_cast<Paint*>(paintPtr);
181 if (paint->getStyle() != Paint::kFill_Style ||
Romain Guy672433d2013-01-04 19:05:13 -0800182 (paint->isAntiAlias() && !renderer->isCurrentTransformSimple())) {
183 SkRegion::Iterator it(*region);
184 while (!it.done()) {
185 const SkIRect& r = it.rect();
Tom Hudson8dfaa492014-12-09 15:03:44 -0500186 renderer->drawRect(r.fLeft, r.fTop, r.fRight, r.fBottom, *paint);
Romain Guy672433d2013-01-04 19:05:13 -0800187 it.next();
188 }
189 } else {
190 int count = 0;
191 Vector<float> rects;
192 SkRegion::Iterator it(*region);
193 while (!it.done()) {
194 const SkIRect& r = it.rect();
195 rects.push(r.fLeft);
196 rects.push(r.fTop);
197 rects.push(r.fRight);
198 rects.push(r.fBottom);
Chris Craik2af46352012-11-26 18:30:17 -0800199 count += 4;
Romain Guy672433d2013-01-04 19:05:13 -0800200 it.next();
201 }
202 renderer->drawRects(rects.array(), count, paint);
Romain Guya48a1a82010-08-10 14:59:15 -0700203 }
204}
205
Romain Guyb051e892010-09-28 19:09:36 -0700206// ----------------------------------------------------------------------------
207// Display lists
208// ----------------------------------------------------------------------------
209
John Reck44fd8d22014-02-26 11:00:11 -0800210static jlong android_view_GLES20Canvas_finishRecording(JNIEnv* env,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000211 jobject clazz, jlong rendererPtr) {
Chris Craik9f66ea02013-12-27 15:15:55 -0800212 DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr);
John Reck44fd8d22014-02-26 11:00:11 -0800213 return reinterpret_cast<jlong>(renderer->finishRecording());
214}
215
Chris Craik3f0854292014-04-15 16:18:08 -0700216static jlong android_view_GLES20Canvas_createDisplayListRenderer(JNIEnv* env, jobject clazz) {
John Reck44fd8d22014-02-26 11:00:11 -0800217 return reinterpret_cast<jlong>(new DisplayListRenderer);
Chet Haase5977baa2011-01-05 18:01:22 -0800218}
219
Tom Hudson107843d2014-09-08 11:26:26 -0400220static void android_view_GLES20Canvas_drawRenderNode(JNIEnv* env,
Chris Craika7090e02014-06-20 16:01:00 -0700221 jobject clazz, jlong rendererPtr, jlong renderNodePtr,
Tom Hudson107843d2014-09-08 11:26:26 -0400222 jint flags) {
John Reck3b202512014-06-23 13:13:08 -0700223 DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr);
Chris Craika7090e02014-06-20 16:01:00 -0700224 RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
Romain Guycabfcc12011-03-07 18:06:46 -0800225 android::uirenderer::Rect bounds;
Tom Hudson107843d2014-09-08 11:26:26 -0400226 renderer->drawRenderNode(renderNode, bounds, flags);
Romain Guyb051e892010-09-28 19:09:36 -0700227}
228
Romain Guy6c319ca2011-01-11 14:29:25 -0800229// ----------------------------------------------------------------------------
230// Layers
231// ----------------------------------------------------------------------------
232
Romain Guy7d7b5492011-01-24 16:33:45 -0800233static void android_view_GLES20Canvas_drawLayer(JNIEnv* env, jobject clazz,
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000234 jlong rendererPtr, jlong layerPtr, jfloat x, jfloat y) {
John Reck3b202512014-06-23 13:13:08 -0700235 DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr);
John Reck12f5e342014-11-07 07:53:43 -0800236 DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerPtr);
Chris Craika08f95c2013-03-15 17:24:33 -0700237 renderer->drawLayer(layer, x, y);
Romain Guy6c319ca2011-01-11 14:29:25 -0800238}
239
Romain Guy16393512010-08-08 00:14:31 -0700240// ----------------------------------------------------------------------------
241// Common
242// ----------------------------------------------------------------------------
243
244static jboolean android_view_GLES20Canvas_isAvailable(JNIEnv* env, jobject clazz) {
John Recka2732a22014-12-18 13:52:33 -0800245 char prop[PROPERTY_VALUE_MAX];
246 if (property_get("ro.kernel.qemu", prop, NULL) == 0) {
247 // not in the emulator
248 return JNI_TRUE;
Jesse Hall44063452011-12-01 11:27:45 -0800249 }
John Recka2732a22014-12-18 13:52:33 -0800250 // In the emulator this property will be set to 1 when hardware GLES is
251 // enabled, 0 otherwise. On old emulator versions it will be undefined.
252 property_get("ro.kernel.qemu.gles", prop, "0");
253 return atoi(prop) == 1 ? JNI_TRUE : JNI_FALSE;
Romain Guy16393512010-08-08 00:14:31 -0700254}
255
Romain Guya1db5742010-07-20 13:09:13 -0700256// ----------------------------------------------------------------------------
Chet Haase9c1e23b2011-03-24 10:51:31 -0700257// Logging
258// ----------------------------------------------------------------------------
259
Chet Haase9c1e23b2011-03-24 10:51:31 -0700260static void
Romain Guy65b345f2011-07-27 18:51:50 -0700261android_app_ActivityThread_dumpGraphics(JNIEnv* env, jobject clazz, jobject javaFileDescriptor) {
John Recka2732a22014-12-18 13:52:33 -0800262 int fd = jniGetFDFromFileDescriptor(env, javaFileDescriptor);
Chris Craik2ae07332015-01-21 14:22:39 -0800263 android::uirenderer::renderthread::RenderProxy::dumpGraphicsMemory(fd);
Chet Haase9c1e23b2011-03-24 10:51:31 -0700264}
265
266// ----------------------------------------------------------------------------
Romain Guye4d01122010-06-16 18:44:05 -0700267// JNI Glue
268// ----------------------------------------------------------------------------
269
270const char* const kClassPathName = "android/view/GLES20Canvas";
271
272static JNINativeMethod gMethods[] = {
Romain Guy61c8c9c2010-08-09 20:48:09 -0700273 { "nIsAvailable", "()Z", (void*) android_view_GLES20Canvas_isAvailable },
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000274 { "nSetViewport", "(JII)V", (void*) android_view_GLES20Canvas_setViewport },
Chris Craikcce47eb2014-07-16 15:12:15 -0700275 { "nSetHighContrastText","(JZ)V", (void*) android_view_GLES20Canvas_setHighContrastText },
Chris Craik8afd0f22014-08-21 17:41:57 -0700276 { "nInsertReorderBarrier","(JZ)V", (void*) android_view_GLES20Canvas_insertReorderBarrier },
Tom Hudson8dfaa492014-12-09 15:03:44 -0500277 { "nPrepare", "(J)V", (void*) android_view_GLES20Canvas_prepare },
278 { "nPrepareDirty", "(JIIII)V", (void*) android_view_GLES20Canvas_prepareDirty },
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000279 { "nFinish", "(J)V", (void*) android_view_GLES20Canvas_finish },
Tom Hudson8dfaa492014-12-09 15:03:44 -0500280 { "nSetProperty", "(Ljava/lang/String;Ljava/lang/String;)V",
Chris Craikba9b6132013-12-15 17:10:19 -0800281 (void*) android_view_GLES20Canvas_setProperty },
Romain Guy16393512010-08-08 00:14:31 -0700282
Tom Hudson107843d2014-09-08 11:26:26 -0400283 { "nCallDrawGLFunction", "(JJ)V", (void*) android_view_GLES20Canvas_callDrawGLFunction },
Romain Guy7d7b5492011-01-24 16:33:45 -0800284
Tom Hudson8dfaa492014-12-09 15:03:44 -0500285 { "nDrawPatch", "(JJJFFFFJ)V", (void*) android_view_GLES20Canvas_drawPatch },
Romain Guy85bf02f2010-06-22 13:11:24 -0700286
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000287 { "nDrawRects", "(JJJ)V", (void*) android_view_GLES20Canvas_drawRegionAsRects },
Jorim Jaggi072707d2014-09-15 17:20:08 +0200288 { "nDrawRoundRect", "(JJJJJJJJ)V", (void*) android_view_GLES20Canvas_drawRoundRectProps },
John Reck52244ff2014-05-01 21:27:37 -0700289 { "nDrawCircle", "(JJJJJ)V", (void*) android_view_GLES20Canvas_drawCircleProps },
Romain Guyb051e892010-09-28 19:09:36 -0700290
Tom Hudson107843d2014-09-08 11:26:26 -0400291 { "nFinishRecording", "(J)J", (void*) android_view_GLES20Canvas_finishRecording },
292 { "nDrawRenderNode", "(JJI)V", (void*) android_view_GLES20Canvas_drawRenderNode },
Romain Guy13631f32012-01-30 17:41:55 -0800293
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000294 { "nCreateDisplayListRenderer", "()J", (void*) android_view_GLES20Canvas_createDisplayListRenderer },
Romain Guy13631f32012-01-30 17:41:55 -0800295
Tom Hudson8dfaa492014-12-09 15:03:44 -0500296 { "nDrawLayer", "(JJFF)V", (void*) android_view_GLES20Canvas_drawLayer },
Romain Guyb051e892010-09-28 19:09:36 -0700297
Romain Guyf61970fc2011-07-07 14:10:06 -0700298 { "nGetMaximumTextureWidth", "()I", (void*) android_view_GLES20Canvas_getMaxTextureWidth },
299 { "nGetMaximumTextureHeight", "()I", (void*) android_view_GLES20Canvas_getMaxTextureHeight },
Romain Guye4d01122010-06-16 18:44:05 -0700300};
301
Chet Haase9c1e23b2011-03-24 10:51:31 -0700302static JNINativeMethod gActivityThreadMethods[] = {
303 { "dumpGraphicsInfo", "(Ljava/io/FileDescriptor;)V",
304 (void*) android_app_ActivityThread_dumpGraphics }
305};
306
Andreas Gampe987f79f2014-11-18 17:29:46 -0800307int register_android_view_GLES20Canvas(JNIEnv* env) {
John Recka2732a22014-12-18 13:52:33 -0800308 jclass clazz = FindClassOrDie(env, "android/graphics/Rect");
309 gRectClassInfo.set = GetMethodIDOrDie(env, clazz, "set", "(IIII)V");
Romain Guy9d5316e2010-06-24 19:30:36 -0700310
Andreas Gampe987f79f2014-11-18 17:29:46 -0800311 return RegisterMethodsOrDie(env, kClassPathName, gMethods, NELEM(gMethods));
Romain Guye4d01122010-06-16 18:44:05 -0700312}
313
Romain Guy6be3d552011-07-14 18:08:37 -0700314int register_android_app_ActivityThread(JNIEnv* env) {
Andreas Gampeed6b9df2014-11-20 22:02:20 -0800315 return RegisterMethodsOrDie(env, "android/app/ActivityThread",
Chet Haase9c1e23b2011-03-24 10:51:31 -0700316 gActivityThreadMethods, NELEM(gActivityThreadMethods));
317}
318
Romain Guye4d01122010-06-16 18:44:05 -0700319};