diff options
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) { } |
