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