summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorRomain Guy <romainguy@google.com>2011-01-18 18:26:22 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-01-18 18:26:22 -0800
commit064f6ad3928c51996359694c00a580115b2dabfc (patch)
treefd4f91dfd0f55f7488baf8e96d798ff6b18d7f5f /core/java
parente70b445d2fb128b831b84408f0c9f2b499918ced (diff)
parent2a83f001fdb189f945e82e81e717ba204824b112 (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.java14
-rw-r--r--core/java/android/view/Surface.java9
-rw-r--r--core/java/android/view/ViewRoot.java5
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) {
}