diff options
author | John Reck <jreck@google.com> | 2014-02-11 10:40:25 -0800 |
---|---|---|
committer | John Reck <jreck@google.com> | 2014-02-11 10:40:25 -0800 |
commit | fc53ef27793a39e9effd829e9cae02a9ca14147e (patch) | |
tree | 0269d0943677006ad8fdf981bd5eaa70bc9631f1 /libs | |
parent | f6eebb21d5c58345eca8be25676e34346f5809b2 (diff) | |
download | frameworks_base-fc53ef27793a39e9effd829e9cae02a9ca14147e.zip frameworks_base-fc53ef27793a39e9effd829e9cae02a9ca14147e.tar.gz frameworks_base-fc53ef27793a39e9effd829e9cae02a9ca14147e.tar.bz2 |
Implement missing safelyRun() on ThreadedRenderer
Change-Id: I14b75f37a13fabaa759a51369190dbdc84087c4b
Diffstat (limited to 'libs')
-rw-r--r-- | libs/hwui/renderthread/CanvasContext.cpp | 10 | ||||
-rw-r--r-- | libs/hwui/renderthread/CanvasContext.h | 2 | ||||
-rw-r--r-- | libs/hwui/renderthread/RenderProxy.cpp | 12 | ||||
-rw-r--r-- | libs/hwui/renderthread/RenderProxy.h | 2 |
4 files changed, 26 insertions, 0 deletions
diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp index a848c8f..4e665d9 100644 --- a/libs/hwui/renderthread/CanvasContext.cpp +++ b/libs/hwui/renderthread/CanvasContext.cpp @@ -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 */ diff --git a/libs/hwui/renderthread/CanvasContext.h b/libs/hwui/renderthread/CanvasContext.h index 2daa905..3197df3 100644 --- a/libs/hwui/renderthread/CanvasContext.h +++ b/libs/hwui/renderthread/CanvasContext.h @@ -65,6 +65,8 @@ public: void attachFunctor(Functor* functor); void detachFunctor(Functor* functor); + void runWithGlContext(RenderTask* task); + private: void setSurface(EGLNativeWindowType window); void swapBuffers(); diff --git a/libs/hwui/renderthread/RenderProxy.cpp b/libs/hwui/renderthread/RenderProxy.cpp index 25badac..34f1961 100644 --- a/libs/hwui/renderthread/RenderProxy.cpp +++ b/libs/hwui/renderthread/RenderProxy.cpp @@ -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); diff --git a/libs/hwui/renderthread/RenderProxy.h b/libs/hwui/renderthread/RenderProxy.h index 113c5a8..1ad0c2d 100644 --- a/libs/hwui/renderthread/RenderProxy.h +++ b/libs/hwui/renderthread/RenderProxy.h @@ -62,6 +62,8 @@ public: ANDROID_API void attachFunctor(Functor* functor); ANDROID_API void detachFunctor(Functor* functor); + ANDROID_API void runWithGlContext(RenderTask* task); + private: RenderThread& mRenderThread; CanvasContext* mContext; |