diff options
| author | Romain Guy <romainguy@google.com> | 2012-03-05 13:20:46 -0800 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-03-05 13:20:46 -0800 |
| commit | fb9c41c2060497a459d16c30122e1d082895e5d1 (patch) | |
| tree | 4140c0757c7f91367a7956bb76604e02c04ecef4 /core/java/android/view/View.java | |
| parent | e78d7670ca6d0f7cd66edeef791978234dd8d857 (diff) | |
| parent | 2bf68f063b0077ddef6ebfe54f2ae5e063c2c229 (diff) | |
| download | frameworks_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.java | 65 |
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); |
