summaryrefslogtreecommitdiffstats
path: root/core/java/android/view/View.java
diff options
context:
space:
mode:
authorRomain Guy <romainguy@google.com>2012-03-05 13:20:46 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-03-05 13:20:46 -0800
commitfb9c41c2060497a459d16c30122e1d082895e5d1 (patch)
tree4140c0757c7f91367a7956bb76604e02c04ecef4 /core/java/android/view/View.java
parente78d7670ca6d0f7cd66edeef791978234dd8d857 (diff)
parent2bf68f063b0077ddef6ebfe54f2ae5e063c2c229 (diff)
downloadframeworks_base-fb9c41c2060497a459d16c30122e1d082895e5d1.zip
frameworks_base-fb9c41c2060497a459d16c30122e1d082895e5d1.tar.gz
frameworks_base-fb9c41c2060497a459d16c30122e1d082895e5d1.tar.bz2
Merge "Deferred layer updates"
Diffstat (limited to 'core/java/android/view/View.java')
-rw-r--r--core/java/android/view/View.java65
1 files changed, 28 insertions, 37 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index f7dc73c..49f6023 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -10123,7 +10123,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
* dynamic.
*/
boolean hasStaticLayer() {
- return mLayerType == LAYER_TYPE_NONE;
+ return true;
}
/**
@@ -10170,7 +10170,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
if (mAttachInfo.mHardwareRenderer != null &&
mAttachInfo.mHardwareRenderer.isEnabled() &&
mAttachInfo.mHardwareRenderer.validate()) {
- getHardwareLayer();
+ getHardwareLayer(true);
}
break;
case LAYER_TYPE_SOFTWARE:
@@ -10192,7 +10192,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
*
* @return A HardwareLayer ready to render, or null if an error occurred.
*/
- HardwareLayer getHardwareLayer() {
+ HardwareLayer getHardwareLayer(boolean immediateRefresh) {
if (mAttachInfo == null || mAttachInfo.mHardwareRenderer == null ||
!mAttachInfo.mHardwareRenderer.isEnabled()) {
return null;
@@ -10222,41 +10222,32 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
return null;
}
- HardwareCanvas currentCanvas = mAttachInfo.mHardwareCanvas;
- final HardwareCanvas canvas = mHardwareLayer.start(currentCanvas);
-
- // Make sure all the GPU resources have been properly allocated
- if (canvas == null) {
- mHardwareLayer.end(currentCanvas);
- return null;
- }
-
- mAttachInfo.mHardwareCanvas = canvas;
- try {
- canvas.setViewport(width, height);
- canvas.onPreDraw(mLocalDirtyRect);
+ if (!immediateRefresh) {
+ mHardwareLayer.redraw(getDisplayList(), mLocalDirtyRect);
mLocalDirtyRect.setEmpty();
-
- final int restoreCount = canvas.save();
-
- computeScroll();
- canvas.translate(-mScrollX, -mScrollY);
-
- mPrivateFlags |= DRAWN | DRAWING_CACHE_VALID;
-
- // Fast path for layouts with no backgrounds
- if ((mPrivateFlags & SKIP_DRAW) == SKIP_DRAW) {
- mPrivateFlags &= ~DIRTY_MASK;
- dispatchDraw(canvas);
- } else {
- draw(canvas);
+ } else {
+ HardwareCanvas currentCanvas = mAttachInfo.mHardwareCanvas;
+ final HardwareCanvas canvas = mHardwareLayer.start(currentCanvas);
+
+ // Make sure all the GPU resources have been properly allocated
+ if (canvas == null) {
+ mHardwareLayer.end(currentCanvas);
+ return null;
+ }
+
+ mAttachInfo.mHardwareCanvas = canvas;
+ try {
+ canvas.setViewport(width, height);
+ canvas.onPreDraw(mLocalDirtyRect);
+ mLocalDirtyRect.setEmpty();
+
+ canvas.drawDisplayList(getDisplayList(), mRight - mLeft, mBottom - mTop, null,
+ DisplayList.FLAG_CLIP_CHILDREN);
+ } finally {
+ canvas.onPostDraw();
+ mHardwareLayer.end(currentCanvas);
+ mAttachInfo.mHardwareCanvas = currentCanvas;
}
-
- canvas.restoreToCount(restoreCount);
- } finally {
- canvas.onPostDraw();
- mHardwareLayer.end(currentCanvas);
- mAttachInfo.mHardwareCanvas = currentCanvas;
}
}
@@ -11224,7 +11215,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
if (hasNoCache) {
boolean layerRendered = false;
if (layerType == LAYER_TYPE_HARDWARE) {
- final HardwareLayer layer = getHardwareLayer();
+ final HardwareLayer layer = getHardwareLayer(false);
if (layer != null && layer.isValid()) {
mLayerPaint.setAlpha((int) (alpha * 255));
((HardwareCanvas) canvas).drawHardwareLayer(layer, 0, 0, mLayerPaint);