fix race condition between HWUI cache and renderThread
getMaximumBitmapWidth() and getMaximumBitmapHeight() of DisplayListCanvas need HWUI cache instance. Since the initialization of the cache is asynchronous it may crash if not yet ready. Add a staticFence() call to guarantee the cache has been created prior issuing the call. Change-Id: I5ed9e5cc084444c8d1872a77fef50e294ae14e93 Signed-off-by: Thomas Buhot <thomas.buhot@intel.com> Signed-off-by: Zhiquan Liu <zhiquan.liu@intel.com>
This commit is contained in:
committed by
Zhiquan Liu
parent
dbf8c17bd2
commit
c0a0e1a66d
@@ -102,10 +102,16 @@ static void android_view_DisplayListCanvas_callDrawGLFunction(JNIEnv* env, jobje
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
static jint android_view_DisplayListCanvas_getMaxTextureWidth(JNIEnv* env, jobject clazz) {
|
||||
if (!Caches::hasInstance()) {
|
||||
android::uirenderer::renderthread::RenderProxy::staticFence();
|
||||
}
|
||||
return Caches::getInstance().maxTextureSize;
|
||||
}
|
||||
|
||||
static jint android_view_DisplayListCanvas_getMaxTextureHeight(JNIEnv* env, jobject clazz) {
|
||||
if (!Caches::hasInstance()) {
|
||||
android::uirenderer::renderthread::RenderProxy::staticFence();
|
||||
}
|
||||
return Caches::getInstance().maxTextureSize;
|
||||
}
|
||||
|
||||
|
||||
@@ -385,6 +385,12 @@ void RenderProxy::fence() {
|
||||
postAndWait(task);
|
||||
}
|
||||
|
||||
void RenderProxy::staticFence() {
|
||||
SETUP_TASK(fence);
|
||||
UNUSED(args);
|
||||
staticPostAndWait(task);
|
||||
}
|
||||
|
||||
CREATE_BRIDGE1(stopDrawing, CanvasContext* context) {
|
||||
args->context->stopDrawing();
|
||||
return nullptr;
|
||||
|
||||
@@ -94,6 +94,7 @@ public:
|
||||
ANDROID_API static void overrideProperty(const char* name, const char* value);
|
||||
|
||||
ANDROID_API void fence();
|
||||
ANDROID_API static void staticFence();
|
||||
ANDROID_API void stopDrawing();
|
||||
ANDROID_API void notifyFramePending();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user