Loading core/java/android/view/ThreadedRenderer.java +3 −2 Original line number Diff line number Diff line Loading @@ -113,8 +113,8 @@ public class ThreadedRenderer extends HardwareRenderer { @Override boolean safelyRun(Runnable action) { // TODO: return false; nRunWithGlContext(mNativeProxy, action); return true; } @Override Loading Loading @@ -256,6 +256,7 @@ public class ThreadedRenderer extends HardwareRenderer { private static native void nSetup(long nativeProxy, int width, int height); private static native void nDrawDisplayList(long nativeProxy, long displayList, int dirtyLeft, int dirtyTop, int dirtyRight, int dirtyBottom); private static native void nRunWithGlContext(long nativeProxy, Runnable runnable); private static native void nDestroyCanvas(long nativeProxy); private static native void nAttachFunctor(long nativeProxy, long functor); Loading core/jni/android_view_ThreadedRenderer.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -131,6 +131,13 @@ static void android_view_ThreadedRenderer_detachFunctor(JNIEnv* env, jobject cla proxy->detachFunctor(functor); } static void android_view_ThreadedRenderer_runWithGlContext(JNIEnv* env, jobject clazz, jlong proxyPtr, jobject jrunnable) { RenderProxy* proxy = reinterpret_cast<RenderProxy*>( proxyPtr); RenderTask* task = new JavaTask(env, jrunnable); proxy->runWithGlContext(task); } #endif // ---------------------------------------------------------------------------- Loading @@ -151,6 +158,7 @@ static JNINativeMethod gMethods[] = { { "nDestroyCanvas", "(J)V", (void*) android_view_ThreadedRenderer_destroyCanvas}, { "nAttachFunctor", "(JJ)V", (void*) android_view_ThreadedRenderer_attachFunctor}, { "nDetachFunctor", "(JJ)V", (void*) android_view_ThreadedRenderer_detachFunctor}, { "nRunWithGlContext", "(JLjava/lang/Runnable;)V", (void*) android_view_ThreadedRenderer_runWithGlContext }, #endif }; Loading libs/hwui/renderthread/CanvasContext.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -462,6 +462,16 @@ void CanvasContext::queueFunctorsTask(int delayMs) { mRenderThread.queueDelayed(&mInvokeFunctorsTask, delayMs); } void CanvasContext::runWithGlContext(RenderTask* task) { if (mEglSurface != EGL_NO_SURFACE) { mGlobalContext->makeCurrent(mEglSurface); } else { mGlobalContext->usePBufferSurface(); } task->run(); } } /* namespace renderthread */ } /* namespace uirenderer */ } /* namespace android */ libs/hwui/renderthread/CanvasContext.h +2 −0 Original line number Diff line number Diff line Loading @@ -65,6 +65,8 @@ public: void attachFunctor(Functor* functor); void detachFunctor(Functor* functor); void runWithGlContext(RenderTask* task); private: void setSurface(EGLNativeWindowType window); void swapBuffers(); Loading libs/hwui/renderthread/RenderProxy.cpp +12 −0 Original line number Diff line number Diff line Loading @@ -170,6 +170,18 @@ void RenderProxy::detachFunctor(Functor* functor) { post(task); } CREATE_BRIDGE2(runWithGlContext, CanvasContext* context, RenderTask* task) { args->context->runWithGlContext(args->task); return NULL; } void RenderProxy::runWithGlContext(RenderTask* gltask) { SETUP_TASK(runWithGlContext); args->context = mContext; args->task = gltask; postAndWait(task); } MethodInvokeRenderTask* RenderProxy::createTask(RunnableMethod method) { // TODO: Consider having a small pool of these to avoid alloc churn return new MethodInvokeRenderTask(method); Loading Loading
core/java/android/view/ThreadedRenderer.java +3 −2 Original line number Diff line number Diff line Loading @@ -113,8 +113,8 @@ public class ThreadedRenderer extends HardwareRenderer { @Override boolean safelyRun(Runnable action) { // TODO: return false; nRunWithGlContext(mNativeProxy, action); return true; } @Override Loading Loading @@ -256,6 +256,7 @@ public class ThreadedRenderer extends HardwareRenderer { private static native void nSetup(long nativeProxy, int width, int height); private static native void nDrawDisplayList(long nativeProxy, long displayList, int dirtyLeft, int dirtyTop, int dirtyRight, int dirtyBottom); private static native void nRunWithGlContext(long nativeProxy, Runnable runnable); private static native void nDestroyCanvas(long nativeProxy); private static native void nAttachFunctor(long nativeProxy, long functor); Loading
core/jni/android_view_ThreadedRenderer.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -131,6 +131,13 @@ static void android_view_ThreadedRenderer_detachFunctor(JNIEnv* env, jobject cla proxy->detachFunctor(functor); } static void android_view_ThreadedRenderer_runWithGlContext(JNIEnv* env, jobject clazz, jlong proxyPtr, jobject jrunnable) { RenderProxy* proxy = reinterpret_cast<RenderProxy*>( proxyPtr); RenderTask* task = new JavaTask(env, jrunnable); proxy->runWithGlContext(task); } #endif // ---------------------------------------------------------------------------- Loading @@ -151,6 +158,7 @@ static JNINativeMethod gMethods[] = { { "nDestroyCanvas", "(J)V", (void*) android_view_ThreadedRenderer_destroyCanvas}, { "nAttachFunctor", "(JJ)V", (void*) android_view_ThreadedRenderer_attachFunctor}, { "nDetachFunctor", "(JJ)V", (void*) android_view_ThreadedRenderer_detachFunctor}, { "nRunWithGlContext", "(JLjava/lang/Runnable;)V", (void*) android_view_ThreadedRenderer_runWithGlContext }, #endif }; Loading
libs/hwui/renderthread/CanvasContext.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -462,6 +462,16 @@ void CanvasContext::queueFunctorsTask(int delayMs) { mRenderThread.queueDelayed(&mInvokeFunctorsTask, delayMs); } void CanvasContext::runWithGlContext(RenderTask* task) { if (mEglSurface != EGL_NO_SURFACE) { mGlobalContext->makeCurrent(mEglSurface); } else { mGlobalContext->usePBufferSurface(); } task->run(); } } /* namespace renderthread */ } /* namespace uirenderer */ } /* namespace android */
libs/hwui/renderthread/CanvasContext.h +2 −0 Original line number Diff line number Diff line Loading @@ -65,6 +65,8 @@ public: void attachFunctor(Functor* functor); void detachFunctor(Functor* functor); void runWithGlContext(RenderTask* task); private: void setSurface(EGLNativeWindowType window); void swapBuffers(); Loading
libs/hwui/renderthread/RenderProxy.cpp +12 −0 Original line number Diff line number Diff line Loading @@ -170,6 +170,18 @@ void RenderProxy::detachFunctor(Functor* functor) { post(task); } CREATE_BRIDGE2(runWithGlContext, CanvasContext* context, RenderTask* task) { args->context->runWithGlContext(args->task); return NULL; } void RenderProxy::runWithGlContext(RenderTask* gltask) { SETUP_TASK(runWithGlContext); args->context = mContext; args->task = gltask; postAndWait(task); } MethodInvokeRenderTask* RenderProxy::createTask(RunnableMethod method) { // TODO: Consider having a small pool of these to avoid alloc churn return new MethodInvokeRenderTask(method); Loading