diff options
| author | Romain Guy <romainguy@google.com> | 2011-01-18 18:26:22 -0800 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-01-18 18:26:22 -0800 |
| commit | 064f6ad3928c51996359694c00a580115b2dabfc (patch) | |
| tree | fd4f91dfd0f55f7488baf8e96d798ff6b18d7f5f /core/java | |
| parent | e70b445d2fb128b831b84408f0c9f2b499918ced (diff) | |
| parent | 2a83f001fdb189f945e82e81e717ba204824b112 (diff) | |
Merge "Recreate the EGL surface when ViewRoot's surface changes. Bug #3306150" into honeycomb
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/view/HardwareRenderer.java | 14 | ||||
| -rw-r--r-- | core/java/android/view/Surface.java | 9 | ||||
| -rw-r--r-- | core/java/android/view/ViewRoot.java | 5 |
3 files changed, 28 insertions, 0 deletions
diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java index f9a6c1b58c3f..addd1b342d5f 100644 --- a/core/java/android/view/HardwareRenderer.java +++ b/core/java/android/view/HardwareRenderer.java @@ -84,6 +84,13 @@ public abstract class HardwareRenderer { * @return True if the initialization was successful, false otherwise. */ abstract boolean initialize(SurfaceHolder holder); + + /** + * Updates the hardware renderer for the specified surface. + * + * @param holder The holder for the surface to hardware accelerate. + */ + abstract void updateSurface(SurfaceHolder holder); /** * Setup the hardware renderer for drawing. This is called for every @@ -330,6 +337,13 @@ public abstract class HardwareRenderer { } return false; } + + @Override + void updateSurface(SurfaceHolder holder) { + if (isRequested() && isEnabled()) { + createEglSurface(holder); + } + } abstract GLES20Canvas createCanvas(); diff --git a/core/java/android/view/Surface.java b/core/java/android/view/Surface.java index e20335506ac4..0326a8f46182 100644 --- a/core/java/android/view/Surface.java +++ b/core/java/android/view/Surface.java @@ -159,6 +159,8 @@ public class Surface implements Parcelable { private Canvas mCanvas; @SuppressWarnings("unused") private int mNativeSurface; + @SuppressWarnings("unused") + private int mSurfaceGenerationId; private String mName; // The display metrics used to provide the pseudo canvas size for applications @@ -308,6 +310,13 @@ public class Surface implements Parcelable { * returns false. */ public native boolean isValid(); + + /** + * @hide + */ + public int getGenerationId() { + return mSurfaceGenerationId; + } /** Free all server-side state associated with this surface and * release this object's reference. {@hide} */ diff --git a/core/java/android/view/ViewRoot.java b/core/java/android/view/ViewRoot.java index 96f8cdcce70b..961b633170d8 100644 --- a/core/java/android/view/ViewRoot.java +++ b/core/java/android/view/ViewRoot.java @@ -983,6 +983,8 @@ public final class ViewRoot extends Handler implements ViewParent, Log.i(TAG, "host=w:" + host.getMeasuredWidth() + ", h:" + host.getMeasuredHeight() + ", params=" + params); } + + final int surfaceGenerationId = mSurface.getGenerationId(); relayoutResult = relayoutWindow(params, viewVisibility, insetsPending); if (params != null) { @@ -1043,6 +1045,9 @@ public final class ViewRoot extends Handler implements ViewParent, mScroller.abortAnimation(); } disposeResizeBitmap(); + } else if (surfaceGenerationId != mSurface.getGenerationId() && + mSurfaceHolder == null && mAttachInfo.mHardwareRenderer != null) { + mAttachInfo.mHardwareRenderer.updateSurface(mHolder); } } catch (RemoteException e) { } |
