From c5bf8bc74d17dbf9737979ec8c339e2feb85ccec Mon Sep 17 00:00:00 2001 From: Andriy Naborskyy Date: Thu, 10 Nov 2016 01:51:24 +0000 Subject: DO NOT MERGE ANYWHERE Revert "DO NOT MERGE ANYWHERE libhwui: make setSurface asynchronous" This reverts commit 80e6d8873b79ced40e79fcba0bf793ea6528d20c. Bug: 32771832 Change-Id: Ia2f2ffd08dfd87cbce1ec750d6b61277799b536f --- core/java/android/view/ThreadedRenderer.java | 5 ++--- core/jni/android_view_ThreadedRenderer.cpp | 6 +++--- libs/hwui/renderthread/CanvasContext.cpp | 5 +++-- libs/hwui/renderthread/CanvasContext.h | 2 +- libs/hwui/renderthread/RenderProxy.cpp | 7 +++---- libs/hwui/renderthread/RenderProxy.h | 2 +- 6 files changed, 13 insertions(+), 14 deletions(-) diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java index db147ab51263..f6119e2898f0 100644 --- a/core/java/android/view/ThreadedRenderer.java +++ b/core/java/android/view/ThreadedRenderer.java @@ -145,10 +145,9 @@ public class ThreadedRenderer extends HardwareRenderer { @Override boolean initialize(Surface surface) throws OutOfResourcesException { - boolean status = !mInitialized; mInitialized = true; updateEnabledState(surface); - nInitialize(mNativeProxy, surface); + boolean status = nInitialize(mNativeProxy, surface); return status; } @@ -504,7 +503,7 @@ public class ThreadedRenderer extends HardwareRenderer { private static native boolean nLoadSystemProperties(long nativeProxy); private static native void nSetName(long nativeProxy, String name); - private static native void nInitialize(long nativeProxy, Surface window); + private static native boolean nInitialize(long nativeProxy, Surface window); private static native void nUpdateSurface(long nativeProxy, Surface window); private static native boolean nPauseSurface(long nativeProxy, Surface window); private static native void nSetup(long nativeProxy, int width, int height, diff --git a/core/jni/android_view_ThreadedRenderer.cpp b/core/jni/android_view_ThreadedRenderer.cpp index 7400ef04bbcd..47132f40be21 100644 --- a/core/jni/android_view_ThreadedRenderer.cpp +++ b/core/jni/android_view_ThreadedRenderer.cpp @@ -262,11 +262,11 @@ static void android_view_ThreadedRenderer_setName(JNIEnv* env, jobject clazz, env->ReleaseStringUTFChars(jname, name); } -static void android_view_ThreadedRenderer_initialize(JNIEnv* env, jobject clazz, +static jboolean android_view_ThreadedRenderer_initialize(JNIEnv* env, jobject clazz, jlong proxyPtr, jobject jsurface) { RenderProxy* proxy = reinterpret_cast(proxyPtr); sp window = android_view_Surface_getNativeWindow(env, jsurface); - proxy->initialize(window); + return proxy->initialize(window); } static void android_view_ThreadedRenderer_updateSurface(JNIEnv* env, jobject clazz, @@ -461,7 +461,7 @@ static JNINativeMethod gMethods[] = { { "nDeleteProxy", "(J)V", (void*) android_view_ThreadedRenderer_deleteProxy }, { "nLoadSystemProperties", "(J)Z", (void*) android_view_ThreadedRenderer_loadSystemProperties }, { "nSetName", "(JLjava/lang/String;)V", (void*) android_view_ThreadedRenderer_setName }, - { "nInitialize", "(JLandroid/view/Surface;)V", (void*) android_view_ThreadedRenderer_initialize }, + { "nInitialize", "(JLandroid/view/Surface;)Z", (void*) android_view_ThreadedRenderer_initialize }, { "nUpdateSurface", "(JLandroid/view/Surface;)V", (void*) android_view_ThreadedRenderer_updateSurface }, { "nPauseSurface", "(JLandroid/view/Surface;)Z", (void*) android_view_ThreadedRenderer_pauseSurface }, { "nSetup", "(JIIFII)V", (void*) android_view_ThreadedRenderer_setup }, diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp index 57e5832ff752..4cf8b152ed40 100644 --- a/libs/hwui/renderthread/CanvasContext.cpp +++ b/libs/hwui/renderthread/CanvasContext.cpp @@ -110,11 +110,12 @@ void CanvasContext::setSwapBehavior(SwapBehavior swapBehavior) { mSwapBehavior = swapBehavior; } -void CanvasContext::initialize(ANativeWindow* window) { +bool CanvasContext::initialize(ANativeWindow* window) { setSurface(window); - if (mCanvas) return; + if (mCanvas) return false; mCanvas = new OpenGLRenderer(mRenderThread.renderState()); mCanvas->initProperties(); + return true; } void CanvasContext::updateSurface(ANativeWindow* window) { diff --git a/libs/hwui/renderthread/CanvasContext.h b/libs/hwui/renderthread/CanvasContext.h index 1e6f830dbeb2..f2fa9cdcbefd 100644 --- a/libs/hwui/renderthread/CanvasContext.h +++ b/libs/hwui/renderthread/CanvasContext.h @@ -67,7 +67,7 @@ public: // Won't take effect until next EGLSurface creation void setSwapBehavior(SwapBehavior swapBehavior); - void initialize(ANativeWindow* window); + bool initialize(ANativeWindow* window); void updateSurface(ANativeWindow* window); bool pauseSurface(ANativeWindow* window); bool hasSurface() { return mNativeWindow.get(); } diff --git a/libs/hwui/renderthread/RenderProxy.cpp b/libs/hwui/renderthread/RenderProxy.cpp index 30f0073fd1f0..6d9acd429279 100644 --- a/libs/hwui/renderthread/RenderProxy.cpp +++ b/libs/hwui/renderthread/RenderProxy.cpp @@ -140,15 +140,14 @@ void RenderProxy::setName(const char* name) { } CREATE_BRIDGE2(initialize, CanvasContext* context, ANativeWindow* window) { - args->context->initialize(args->window); - return nullptr; + return (void*) args->context->initialize(args->window); } -void RenderProxy::initialize(const sp& window) { +bool RenderProxy::initialize(const sp& window) { SETUP_TASK(initialize); args->context = mContext; args->window = window.get(); - post(task); + return (bool) postAndWait(task); } CREATE_BRIDGE2(updateSurface, CanvasContext* context, ANativeWindow* window) { diff --git a/libs/hwui/renderthread/RenderProxy.h b/libs/hwui/renderthread/RenderProxy.h index db03b29f134b..5febbe0ab26c 100644 --- a/libs/hwui/renderthread/RenderProxy.h +++ b/libs/hwui/renderthread/RenderProxy.h @@ -67,7 +67,7 @@ public: ANDROID_API bool loadSystemProperties(); ANDROID_API void setName(const char* name); - ANDROID_API void initialize(const sp& window); + ANDROID_API bool initialize(const sp& window); ANDROID_API void updateSurface(const sp& window); ANDROID_API bool pauseSurface(const sp& window); ANDROID_API void setup(int width, int height, float lightRadius, -- cgit v1.2.3-59-g8ed1b