resolved conflicts for merge of a51a0901 to lmp-mr1-dev-plus-aosp

Change-Id: Id7df835f0bd3d5d276b162635ddfb7fe0918dfed
This commit is contained in:
John Reck
2014-12-04 13:41:04 -08:00
10 changed files with 25 additions and 20 deletions

View File

@ -235,7 +235,7 @@ public abstract class HardwareRenderer {
* or not the surface used by the HardwareRenderer will be changing. It
* Suspends any rendering into the surface, but will not do any destruction
*/
abstract void pauseSurface(Surface surface);
abstract boolean pauseSurface(Surface surface);
/**
* Destroys all hardware rendering resources associated with the specified

View File

@ -155,8 +155,8 @@ public class ThreadedRenderer extends HardwareRenderer {
}
@Override
void pauseSurface(Surface surface) {
nPauseSurface(mNativeProxy, surface);
boolean pauseSurface(Surface surface) {
return nPauseSurface(mNativeProxy, surface);
}
@Override
@ -494,7 +494,7 @@ public class ThreadedRenderer extends HardwareRenderer {
private static native boolean nInitialize(long nativeProxy, Surface window);
private static native void nUpdateSurface(long nativeProxy, Surface window);
private static native void 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,
float lightX, float lightY, float lightZ, float lightRadius,
int ambientShadowAlpha, int spotShadowAlpha);

View File

@ -1493,7 +1493,11 @@ public final class ViewRootImpl implements ViewParent,
// relayoutWindow may decide to destroy mSurface. As that decision
// happens in WindowManager service, we need to be defensive here
// and stop using the surface in case it gets destroyed.
mAttachInfo.mHardwareRenderer.pauseSurface(mSurface);
if (mAttachInfo.mHardwareRenderer.pauseSurface(mSurface)) {
// Animations were running so we need to push a frame
// to resume them
mDirty.set(0, 0, mWidth, mHeight);
}
}
final int surfaceGenerationId = mSurface.getGenerationId();
relayoutResult = relayoutWindow(params, viewVisibility, insetsPending);

View File

@ -270,14 +270,14 @@ static void android_view_ThreadedRenderer_updateSurface(JNIEnv* env, jobject cla
proxy->updateSurface(window);
}
static void android_view_ThreadedRenderer_pauseSurface(JNIEnv* env, jobject clazz,
static jboolean android_view_ThreadedRenderer_pauseSurface(JNIEnv* env, jobject clazz,
jlong proxyPtr, jobject jsurface) {
RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr);
sp<ANativeWindow> window;
if (jsurface) {
window = android_view_Surface_getNativeWindow(env, jsurface);
}
proxy->pauseSurface(window);
return proxy->pauseSurface(window);
}
static void android_view_ThreadedRenderer_setup(JNIEnv* env, jobject clazz, jlong proxyPtr,
@ -429,7 +429,7 @@ static JNINativeMethod gMethods[] = {
{ "nLoadSystemProperties", "(J)Z", (void*) android_view_ThreadedRenderer_loadSystemProperties },
{ "nInitialize", "(JLandroid/view/Surface;)Z", (void*) android_view_ThreadedRenderer_initialize },
{ "nUpdateSurface", "(JLandroid/view/Surface;)V", (void*) android_view_ThreadedRenderer_updateSurface },
{ "nPauseSurface", "(JLandroid/view/Surface;)V", (void*) android_view_ThreadedRenderer_pauseSurface },
{ "nPauseSurface", "(JLandroid/view/Surface;)Z", (void*) android_view_ThreadedRenderer_pauseSurface },
{ "nSetup", "(JIIFFFFII)V", (void*) android_view_ThreadedRenderer_setup },
{ "nSetOpaque", "(JZ)V", (void*) android_view_ThreadedRenderer_setOpaque },
{ "nSyncAndDrawFrame", "(JJJF)I", (void*) android_view_ThreadedRenderer_syncAndDrawFrame },

View File

@ -123,8 +123,8 @@ void CanvasContext::updateSurface(ANativeWindow* window) {
setSurface(window);
}
void CanvasContext::pauseSurface(ANativeWindow* /* window */) {
stopDrawing();
bool CanvasContext::pauseSurface(ANativeWindow* /* window */) {
return mRenderThread.removeFrameCallback(this);
}
// TODO: don't pass viewport size, it's automatic via EGL

View File

@ -67,7 +67,7 @@ public:
bool initialize(ANativeWindow* window);
void updateSurface(ANativeWindow* window);
void pauseSurface(ANativeWindow* window);
bool pauseSurface(ANativeWindow* window);
bool hasSurface() { return mNativeWindow.get(); }
void setup(int width, int height, const Vector3& lightCenter, float lightRadius,

View File

@ -156,15 +156,14 @@ void RenderProxy::updateSurface(const sp<ANativeWindow>& window) {
}
CREATE_BRIDGE2(pauseSurface, CanvasContext* context, ANativeWindow* window) {
args->context->pauseSurface(args->window);
return NULL;
return (void*) args->context->pauseSurface(args->window);
}
void RenderProxy::pauseSurface(const sp<ANativeWindow>& window) {
bool RenderProxy::pauseSurface(const sp<ANativeWindow>& window) {
SETUP_TASK(pauseSurface);
args->context = mContext;
args->window = window.get();
postAndWait(task);
return (bool) postAndWait(task);
}
CREATE_BRIDGE7(setup, CanvasContext* context, int width, int height,

View File

@ -69,7 +69,7 @@ public:
ANDROID_API bool initialize(const sp<ANativeWindow>& window);
ANDROID_API void updateSurface(const sp<ANativeWindow>& window);
ANDROID_API void pauseSurface(const sp<ANativeWindow>& window);
ANDROID_API bool pauseSurface(const sp<ANativeWindow>& window);
ANDROID_API void setup(int width, int height, const Vector3& lightCenter, float lightRadius,
uint8_t ambientShadowAlpha, uint8_t spotShadowAlpha);
ANDROID_API void setOpaque(bool opaque);

View File

@ -314,9 +314,11 @@ void RenderThread::postFrameCallback(IFrameCallback* callback) {
mPendingRegistrationFrameCallbacks.insert(callback);
}
void RenderThread::removeFrameCallback(IFrameCallback* callback) {
mFrameCallbacks.erase(callback);
mPendingRegistrationFrameCallbacks.erase(callback);
bool RenderThread::removeFrameCallback(IFrameCallback* callback) {
size_t erased;
erased = mFrameCallbacks.erase(callback);
erased |= mPendingRegistrationFrameCallbacks.erase(callback);
return erased;
}
void RenderThread::pushBackFrameCallback(IFrameCallback* callback) {

View File

@ -80,7 +80,7 @@ public:
// Mimics android.view.Choreographer
void postFrameCallback(IFrameCallback* callback);
void removeFrameCallback(IFrameCallback* callback);
bool removeFrameCallback(IFrameCallback* callback);
// If the callback is currently registered, it will be pushed back until
// the next vsync. If it is not currently registered this does nothing.
void pushBackFrameCallback(IFrameCallback* callback);