Merge "libhwui: make setSurface asynchronous"
This commit is contained in:
@@ -145,9 +145,10 @@ public class ThreadedRenderer extends HardwareRenderer {
|
||||
|
||||
@Override
|
||||
boolean initialize(Surface surface) throws OutOfResourcesException {
|
||||
boolean status = !mInitialized;
|
||||
mInitialized = true;
|
||||
updateEnabledState(surface);
|
||||
boolean status = nInitialize(mNativeProxy, surface);
|
||||
nInitialize(mNativeProxy, surface);
|
||||
return status;
|
||||
}
|
||||
|
||||
@@ -503,7 +504,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 boolean nInitialize(long nativeProxy, Surface window);
|
||||
private static native void 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,
|
||||
|
||||
@@ -262,11 +262,11 @@ static void android_view_ThreadedRenderer_setName(JNIEnv* env, jobject clazz,
|
||||
env->ReleaseStringUTFChars(jname, name);
|
||||
}
|
||||
|
||||
static jboolean android_view_ThreadedRenderer_initialize(JNIEnv* env, jobject clazz,
|
||||
static void android_view_ThreadedRenderer_initialize(JNIEnv* env, jobject clazz,
|
||||
jlong proxyPtr, jobject jsurface) {
|
||||
RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr);
|
||||
sp<ANativeWindow> window = android_view_Surface_getNativeWindow(env, jsurface);
|
||||
return proxy->initialize(window);
|
||||
proxy->initialize(window);
|
||||
}
|
||||
|
||||
static void android_view_ThreadedRenderer_updateSurface(JNIEnv* env, jobject clazz,
|
||||
@@ -461,7 +461,7 @@ static const 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;)Z", (void*) android_view_ThreadedRenderer_initialize },
|
||||
{ "nInitialize", "(JLandroid/view/Surface;)V", (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 },
|
||||
|
||||
@@ -110,12 +110,11 @@ void CanvasContext::setSwapBehavior(SwapBehavior swapBehavior) {
|
||||
mSwapBehavior = swapBehavior;
|
||||
}
|
||||
|
||||
bool CanvasContext::initialize(ANativeWindow* window) {
|
||||
void CanvasContext::initialize(ANativeWindow* window) {
|
||||
setSurface(window);
|
||||
if (mCanvas) return false;
|
||||
if (mCanvas) return;
|
||||
mCanvas = new OpenGLRenderer(mRenderThread.renderState());
|
||||
mCanvas->initProperties();
|
||||
return true;
|
||||
}
|
||||
|
||||
void CanvasContext::updateSurface(ANativeWindow* window) {
|
||||
|
||||
@@ -67,7 +67,7 @@ public:
|
||||
// Won't take effect until next EGLSurface creation
|
||||
void setSwapBehavior(SwapBehavior swapBehavior);
|
||||
|
||||
bool initialize(ANativeWindow* window);
|
||||
void initialize(ANativeWindow* window);
|
||||
void updateSurface(ANativeWindow* window);
|
||||
bool pauseSurface(ANativeWindow* window);
|
||||
bool hasSurface() { return mNativeWindow.get(); }
|
||||
|
||||
@@ -140,14 +140,15 @@ void RenderProxy::setName(const char* name) {
|
||||
}
|
||||
|
||||
CREATE_BRIDGE2(initialize, CanvasContext* context, ANativeWindow* window) {
|
||||
return (void*) args->context->initialize(args->window);
|
||||
args->context->initialize(args->window);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bool RenderProxy::initialize(const sp<ANativeWindow>& window) {
|
||||
void RenderProxy::initialize(const sp<ANativeWindow>& window) {
|
||||
SETUP_TASK(initialize);
|
||||
args->context = mContext;
|
||||
args->window = window.get();
|
||||
return (bool) postAndWait(task);
|
||||
post(task);
|
||||
}
|
||||
|
||||
CREATE_BRIDGE2(updateSurface, CanvasContext* context, ANativeWindow* window) {
|
||||
|
||||
@@ -67,7 +67,7 @@ public:
|
||||
ANDROID_API bool loadSystemProperties();
|
||||
ANDROID_API void setName(const char* name);
|
||||
|
||||
ANDROID_API bool initialize(const sp<ANativeWindow>& window);
|
||||
ANDROID_API void initialize(const sp<ANativeWindow>& window);
|
||||
ANDROID_API void updateSurface(const sp<ANativeWindow>& window);
|
||||
ANDROID_API bool pauseSurface(const sp<ANativeWindow>& window);
|
||||
ANDROID_API void setup(int width, int height, float lightRadius,
|
||||
|
||||
Reference in New Issue
Block a user