diff options
| author | John Reck <jreck@google.com> | 2014-06-13 02:32:19 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-06-12 05:34:42 +0000 |
| commit | 816f71b7e0dc263362e9fc8d251c8d1944bff17c (patch) | |
| tree | 7f8dc82b247276502976e80945f5b86716d20b7e /core/java | |
| parent | c0daabbec3da4a39457ce62a15a909983a2368f1 (diff) | |
| parent | 25fbb3fa1138675379102a44405852555cefccbd (diff) | |
| download | frameworks_base-816f71b7e0dc263362e9fc8d251c8d1944bff17c.zip frameworks_base-816f71b7e0dc263362e9fc8d251c8d1944bff17c.tar.gz frameworks_base-816f71b7e0dc263362e9fc8d251c8d1944bff17c.tar.bz2 | |
Merge "Move LayerType to RenderNode"
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/view/HardwareLayer.java | 49 | ||||
| -rw-r--r-- | core/java/android/view/HardwareRenderer.java | 10 | ||||
| -rw-r--r-- | core/java/android/view/RenderNode.java | 14 | ||||
| -rw-r--r-- | core/java/android/view/TextureView.java | 10 | ||||
| -rw-r--r-- | core/java/android/view/ThreadedRenderer.java | 6 | ||||
| -rw-r--r-- | core/java/android/view/View.java | 192 | ||||
| -rw-r--r-- | core/java/android/view/ViewGroup.java | 16 | ||||
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 119 |
8 files changed, 115 insertions, 301 deletions
diff --git a/core/java/android/view/HardwareLayer.java b/core/java/android/view/HardwareLayer.java index b5b9199..266a6fe 100644 --- a/core/java/android/view/HardwareLayer.java +++ b/core/java/android/view/HardwareLayer.java @@ -19,7 +19,6 @@ package android.view; import android.graphics.Bitmap; import android.graphics.Matrix; import android.graphics.Paint; -import android.graphics.Rect; import android.graphics.SurfaceTexture; import com.android.internal.util.VirtualRefBasePtr; @@ -34,34 +33,18 @@ import com.android.internal.util.VirtualRefBasePtr; * @hide */ final class HardwareLayer { - private static final int LAYER_TYPE_TEXTURE = 1; - private static final int LAYER_TYPE_DISPLAY_LIST = 2; - private HardwareRenderer mRenderer; private VirtualRefBasePtr mFinalizer; - private RenderNode mDisplayList; - private final int mLayerType; - private HardwareLayer(HardwareRenderer renderer, long deferredUpdater, int type) { + private HardwareLayer(HardwareRenderer renderer, long deferredUpdater) { if (renderer == null || deferredUpdater == 0) { throw new IllegalArgumentException("Either hardware renderer: " + renderer + " or deferredUpdater: " + deferredUpdater + " is invalid"); } mRenderer = renderer; - mLayerType = type; mFinalizer = new VirtualRefBasePtr(deferredUpdater); } - private void assertType(int type) { - if (mLayerType != type) { - throw new IllegalAccessError("Method not appropriate for this layer type! " + mLayerType); - } - } - - boolean hasDisplayList() { - return mDisplayList != null; - } - /** * Update the paint used when drawing this layer. * @@ -90,11 +73,6 @@ final class HardwareLayer { // Already destroyed return; } - - if (mDisplayList != null) { - mDisplayList.destroyDisplayListData(); - mDisplayList = null; - } mRenderer.onLayerDestroyed(this); mRenderer = null; mFinalizer.release(); @@ -105,21 +83,6 @@ final class HardwareLayer { return mFinalizer.get(); } - public RenderNode startRecording() { - assertType(LAYER_TYPE_DISPLAY_LIST); - - if (mDisplayList == null) { - mDisplayList = RenderNode.create("HardwareLayer"); - } - return mDisplayList; - } - - public void endRecording(Rect dirtyRect) { - nUpdateRenderLayer(mFinalizer.get(), mDisplayList.getNativeDisplayList(), - dirtyRect.left, dirtyRect.top, dirtyRect.right, dirtyRect.bottom); - mRenderer.pushLayerUpdate(this); - } - /** * Copies this layer into the specified bitmap. * @@ -160,7 +123,6 @@ final class HardwareLayer { * Indicates that this layer has lost its texture. */ public void detachSurfaceTexture(final SurfaceTexture surface) { - assertType(LAYER_TYPE_TEXTURE); mRenderer.safelyRun(new Runnable() { @Override public void run() { @@ -177,13 +139,11 @@ final class HardwareLayer { } public void setSurfaceTexture(SurfaceTexture surface) { - assertType(LAYER_TYPE_TEXTURE); nSetSurfaceTexture(mFinalizer.get(), surface, false); mRenderer.pushLayerUpdate(this); } public void updateSurfaceTexture() { - assertType(LAYER_TYPE_TEXTURE); nUpdateSurfaceTexture(mFinalizer.get()); mRenderer.pushLayerUpdate(this); } @@ -192,18 +152,13 @@ final class HardwareLayer { * This should only be used by HardwareRenderer! Do not call directly */ SurfaceTexture createSurfaceTexture() { - assertType(LAYER_TYPE_TEXTURE); SurfaceTexture st = new SurfaceTexture(nGetTexName(mFinalizer.get())); nSetSurfaceTexture(mFinalizer.get(), st, true); return st; } static HardwareLayer adoptTextureLayer(HardwareRenderer renderer, long layer) { - return new HardwareLayer(renderer, layer, LAYER_TYPE_TEXTURE); - } - - static HardwareLayer adoptDisplayListLayer(HardwareRenderer renderer, long layer) { - return new HardwareLayer(renderer, layer, LAYER_TYPE_DISPLAY_LIST); + return new HardwareLayer(renderer, layer); } private static native void nOnTextureDestroyed(long layerUpdater); diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java index 592dec8..3de8144 100644 --- a/core/java/android/view/HardwareRenderer.java +++ b/core/java/android/view/HardwareRenderer.java @@ -374,16 +374,6 @@ public abstract class HardwareRenderer { abstract HardwareLayer createTextureLayer(); /** - * Creates a new hardware layer. - * - * @param width The minimum width of the layer - * @param height The minimum height of the layer - * - * @return A hardware layer - */ - abstract HardwareLayer createDisplayListLayer(int width, int height); - - /** * Creates a new {@link SurfaceTexture} that can be used to render into the * specified hardware layer. * diff --git a/core/java/android/view/RenderNode.java b/core/java/android/view/RenderNode.java index c165475..d86b699 100644 --- a/core/java/android/view/RenderNode.java +++ b/core/java/android/view/RenderNode.java @@ -19,6 +19,7 @@ package android.view; import android.annotation.NonNull; import android.graphics.Matrix; import android.graphics.Outline; +import android.graphics.Paint; import java.util.ArrayList; import java.util.List; @@ -322,11 +323,13 @@ public class RenderNode { * handled in the drawLayer operation directly (and more efficiently). * * @param caching true if the display list represents a hardware layer, false otherwise. - * - * @hide */ - public boolean setCaching(boolean caching) { - return nSetCaching(mNativeRenderNode, caching); + public boolean setLayerType(int layerType) { + return nSetLayerType(mNativeRenderNode, layerType); + } + + public boolean setLayerPaint(Paint paint) { + return nSetLayerPaint(mNativeRenderNode, paint != null ? paint.mNativePaint : 0); } /** @@ -902,7 +905,8 @@ public class RenderNode { private static native boolean nSetCameraDistance(long renderNode, float distance); private static native boolean nSetPivotY(long renderNode, float pivotY); private static native boolean nSetPivotX(long renderNode, float pivotX); - private static native boolean nSetCaching(long renderNode, boolean caching); + private static native boolean nSetLayerType(long renderNode, int layerType); + private static native boolean nSetLayerPaint(long renderNode, long paint); private static native boolean nSetClipToBounds(long renderNode, boolean clipToBounds); private static native boolean nSetProjectBackwards(long renderNode, boolean shouldProject); private static native boolean nSetProjectionReceiver(long renderNode, boolean shouldRecieve); diff --git a/core/java/android/view/TextureView.java b/core/java/android/view/TextureView.java index 2a9f7d5..1f7eaa2 100644 --- a/core/java/android/view/TextureView.java +++ b/core/java/android/view/TextureView.java @@ -275,6 +275,11 @@ public class TextureView extends View { } } + @Override + public void setLayerPaint(Paint paint) { + setLayerType(/* ignored */ 0, paint); + } + /** * Always returns {@link #LAYER_TYPE_HARDWARE}. */ @@ -332,11 +337,6 @@ public class TextureView extends View { } } - @Override - boolean destroyLayer(boolean valid) { - return false; - } - /** * @hide */ diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java index 7bbe84e..2bfbd65 100644 --- a/core/java/android/view/ThreadedRenderer.java +++ b/core/java/android/view/ThreadedRenderer.java @@ -257,12 +257,6 @@ public class ThreadedRenderer extends HardwareRenderer { } @Override - HardwareLayer createDisplayListLayer(int width, int height) { - long layer = nCreateDisplayListLayer(mNativeProxy, width, height); - return HardwareLayer.adoptDisplayListLayer(this, layer); - } - - @Override HardwareLayer createTextureLayer() { long layer = nCreateTextureLayer(mNativeProxy); return HardwareLayer.adoptTextureLayer(this, layer); diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 21bae23..453ee17 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -3472,8 +3472,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, }) int mLayerType = LAYER_TYPE_NONE; Paint mLayerPaint; - Rect mLocalDirtyRect; - private HardwareLayer mHardwareLayer; /** * Set to true when drawing cache is enabled and cannot be created. @@ -12938,7 +12936,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, stopNestedScroll(); destroyDrawingCache(); - destroyLayer(false); cleanupDraw(); mCurrentAnimation = null; @@ -13416,30 +13413,32 @@ public class View implements Drawable.Callback, KeyEvent.Callback, + "LAYER_TYPE_SOFTWARE or LAYER_TYPE_HARDWARE"); } - if (layerType == mLayerType) { + boolean typeChanged = mRenderNode.setLayerType(layerType); + + if (!typeChanged) { setLayerPaint(paint); return; } // Destroy any previous software drawing cache if needed - switch (mLayerType) { - case LAYER_TYPE_HARDWARE: - destroyLayer(false); - // fall through - non-accelerated views may use software layer mechanism instead - case LAYER_TYPE_SOFTWARE: - destroyDrawingCache(); - break; - default: - break; + if (mLayerType == LAYER_TYPE_SOFTWARE) { + destroyDrawingCache(); + invalidateParentCaches(); + invalidate(true); } mLayerType = layerType; - final boolean layerDisabled = mLayerType == LAYER_TYPE_NONE; + final boolean layerDisabled = (mLayerType == LAYER_TYPE_NONE); mLayerPaint = layerDisabled ? null : (paint == null ? new Paint() : paint); - mLocalDirtyRect = layerDisabled ? null : new Rect(); + mRenderNode.setLayerPaint(mLayerPaint); - invalidateParentCaches(); - invalidate(true); + if (mLayerType == LAYER_TYPE_SOFTWARE) { + // LAYER_TYPE_SOFTWARE is handled by View:draw(), so need to invalidate() + invalidateParentCaches(); + invalidate(true); + } else { + invalidateViewProperty(false, false); + } } /** @@ -13472,11 +13471,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if (layerType != LAYER_TYPE_NONE) { mLayerPaint = paint == null ? new Paint() : paint; if (layerType == LAYER_TYPE_HARDWARE) { - HardwareLayer layer = getHardwareLayer(); - if (layer != null) { - layer.setLayerPaint(mLayerPaint); + if (mRenderNode.setLayerPaint(mLayerPaint)) { + invalidateViewProperty(false, false); } - invalidateViewProperty(false, false); } else { invalidate(); } @@ -13534,16 +13531,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback, switch (mLayerType) { case LAYER_TYPE_HARDWARE: - getHardwareLayer(); - // TODO: We need a better way to handle this case - // If views have registered pre-draw listeners they need - // to be notified before we build the layer. Those listeners - // may however rely on other events to happen first so we - // cannot just invoke them here until they don't cancel the - // current frame - if (!attachInfo.mTreeObserver.hasOnPreDrawListeners()) { - attachInfo.mViewRootImpl.dispatchFlushHardwareLayerUpdates(); - } + // The only part of a hardware layer we can build in response to + // this call is to ensure the display list is up to date. + // The actual rendering of the display list into the layer must + // be done at playback time + updateDisplayListIfDirty(); break; case LAYER_TYPE_SOFTWARE: buildDrawingCache(true); @@ -13552,70 +13544,13 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } /** - * <p>Returns a hardware layer that can be used to draw this view again - * without executing its draw method.</p> + * If this View draws with a HardwareLayer, returns it. + * Otherwise returns null * - * @return A HardwareLayer ready to render, or null if an error occurred. + * TODO: Only TextureView uses this, can we eliminate it? */ HardwareLayer getHardwareLayer() { - if (mAttachInfo == null || mAttachInfo.mHardwareRenderer == null || - !mAttachInfo.mHardwareRenderer.isEnabled()) { - return null; - } - - final int width = mRight - mLeft; - final int height = mBottom - mTop; - - if (width == 0 || height == 0) { - return null; - } - - if ((mPrivateFlags & PFLAG_DRAWING_CACHE_VALID) == 0 || mHardwareLayer == null) { - if (mHardwareLayer == null) { - mHardwareLayer = mAttachInfo.mHardwareRenderer.createDisplayListLayer( - width, height); - mLocalDirtyRect.set(0, 0, width, height); - } else if (mHardwareLayer.isValid()) { - // This should not be necessary but applications that change - // the parameters of their background drawable without calling - // this.setBackground(Drawable) can leave the view in a bad state - // (for instance isOpaque() returns true, but the background is - // not opaque.) - computeOpaqueFlags(); - - if (mHardwareLayer.prepare(width, height, isOpaque())) { - mLocalDirtyRect.set(0, 0, width, height); - } - } - - mHardwareLayer.setLayerPaint(mLayerPaint); - RenderNode displayList = mHardwareLayer.startRecording(); - updateDisplayListIfDirty(displayList, true); - mHardwareLayer.endRecording(mLocalDirtyRect); - mLocalDirtyRect.setEmpty(); - } - - return mHardwareLayer; - } - - /** - * Destroys this View's hardware layer if possible. - * - * @return True if the layer was destroyed, false otherwise. - * - * @see #setLayerType(int, android.graphics.Paint) - * @see #LAYER_TYPE_HARDWARE - */ - boolean destroyLayer(boolean valid) { - if (mHardwareLayer != null) { - mHardwareLayer.destroy(); - mHardwareLayer = null; - - invalidate(true); - invalidateParentCaches(); - return true; - } - return false; + return null; } /** @@ -13631,7 +13566,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, */ protected void destroyHardwareResources() { resetDisplayList(); - destroyLayer(true); } /** @@ -13726,20 +13660,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, return !(mAttachInfo == null || mAttachInfo.mHardwareRenderer == null); } - /** - * Returns a DisplayList. If the incoming displayList is null, one will be created. - * Otherwise, the same display list will be returned (after having been rendered into - * along the way, depending on the invalidation state of the view). - * - * @param renderNode The previous version of this displayList, could be null. - * @param isLayer Whether the requester of the display list is a layer. If so, - * the view will avoid creating a layer inside the resulting display list. - * @return A new or reused DisplayList object. - */ - private void updateDisplayListIfDirty(@NonNull RenderNode renderNode, boolean isLayer) { - if (renderNode == null) { - throw new IllegalArgumentException("RenderNode must not be null"); - } + private void updateDisplayListIfDirty() { + final RenderNode renderNode = mRenderNode; if (!canHaveDisplayList()) { // can't populate RenderNode, don't try return; @@ -13747,11 +13669,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if ((mPrivateFlags & PFLAG_DRAWING_CACHE_VALID) == 0 || !renderNode.isValid() - || (!isLayer && mRecreateDisplayList)) { + || (mRecreateDisplayList)) { // Don't need to recreate the display list, just need to tell our // children to restore/recreate theirs if (renderNode.isValid() - && !isLayer && !mRecreateDisplayList) { mPrivateFlags |= PFLAG_DRAWN | PFLAG_DRAWING_CACHE_VALID; mPrivateFlags &= ~PFLAG_DIRTY_MASK; @@ -13760,13 +13681,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback, return; // no work needed } - if (!isLayer) { - // If we got here, we're recreating it. Mark it as such to ensure that - // we copy in child display lists into ours in drawChild() - mRecreateDisplayList = true; - } + // If we got here, we're recreating it. Mark it as such to ensure that + // we copy in child display lists into ours in drawChild() + mRecreateDisplayList = true; - boolean caching = false; int width = mRight - mLeft; int height = mBottom - mTop; int layerType = getLayerType(); @@ -13774,34 +13692,21 @@ public class View implements Drawable.Callback, KeyEvent.Callback, final HardwareCanvas canvas = renderNode.start(width, height); try { - if (!isLayer && layerType != LAYER_TYPE_NONE) { - if (layerType == LAYER_TYPE_HARDWARE) { - final HardwareLayer layer = getHardwareLayer(); - if (layer != null && layer.isValid()) { - canvas.drawHardwareLayer(layer, 0, 0, mLayerPaint); - } else { - canvas.saveLayer(0, 0, mRight - mLeft, mBottom - mTop, mLayerPaint, - Canvas.HAS_ALPHA_LAYER_SAVE_FLAG | - Canvas.CLIP_TO_LAYER_SAVE_FLAG); - } - caching = true; - } else { - buildDrawingCache(true); - Bitmap cache = getDrawingCache(true); - if (cache != null) { - canvas.drawBitmap(cache, 0, 0, mLayerPaint); - caching = true; - } + final HardwareLayer layer = getHardwareLayer(); + if (layer != null && layer.isValid()) { + canvas.drawHardwareLayer(layer, 0, 0, mLayerPaint); + } else if (layerType == LAYER_TYPE_SOFTWARE) { + buildDrawingCache(true); + Bitmap cache = getDrawingCache(true); + if (cache != null) { + canvas.drawBitmap(cache, 0, 0, mLayerPaint); } } else { - computeScroll(); canvas.translate(-mScrollX, -mScrollY); - if (!isLayer) { - mPrivateFlags |= PFLAG_DRAWN | PFLAG_DRAWING_CACHE_VALID; - mPrivateFlags &= ~PFLAG_DIRTY_MASK; - } + mPrivateFlags |= PFLAG_DRAWN | PFLAG_DRAWING_CACHE_VALID; + mPrivateFlags &= ~PFLAG_DIRTY_MASK; // Fast path for layouts with no backgrounds if ((mPrivateFlags & PFLAG_SKIP_DRAW) == PFLAG_SKIP_DRAW) { @@ -13815,14 +13720,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } } finally { renderNode.end(canvas); - renderNode.setCaching(caching); - if (isLayer) { - renderNode.setLeftTopRightBottom(0, 0, width, height); - } else { - setDisplayListProperties(renderNode); - } + setDisplayListProperties(renderNode); } - } else if (!isLayer) { + } else { mPrivateFlags |= PFLAG_DRAWN | PFLAG_DRAWING_CACHE_VALID; mPrivateFlags &= ~PFLAG_DIRTY_MASK; } @@ -13837,7 +13737,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * @hide */ public RenderNode getDisplayList() { - updateDisplayListIfDirty(mRenderNode, false); + updateDisplayListIfDirty(); return mRenderNode; } diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index b29f6d4..a02e76b 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -4386,10 +4386,9 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager // Make sure we do not set both flags at the same time int opaqueFlag = isOpaque ? PFLAG_DIRTY_OPAQUE : PFLAG_DIRTY; - if (child.mLayerType != LAYER_TYPE_NONE) { + if (child.mLayerType == LAYER_TYPE_SOFTWARE) { mPrivateFlags |= PFLAG_INVALIDATED; mPrivateFlags &= ~PFLAG_DRAWING_CACHE_VALID; - child.mLocalDirtyRect.union(dirty); } final int[] location = attachInfo.mInvalidateChildLocation; @@ -4498,9 +4497,8 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager location[CHILD_LEFT_INDEX] = left; location[CHILD_TOP_INDEX] = top; - if (mLayerType != LAYER_TYPE_NONE) { + if (mLayerType == LAYER_TYPE_SOFTWARE) { mPrivateFlags |= PFLAG_INVALIDATED; - mLocalDirtyRect.union(dirty); } return mParent; @@ -4517,9 +4515,8 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager dirty.union(0, 0, mRight - mLeft, mBottom - mTop); } - if (mLayerType != LAYER_TYPE_NONE) { + if (mLayerType == LAYER_TYPE_SOFTWARE) { mPrivateFlags |= PFLAG_INVALIDATED; - mLocalDirtyRect.union(dirty); } return mParent; @@ -4567,10 +4564,6 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager final AttachInfo attachInfo = mAttachInfo; if (attachInfo != null) { - if (child.mLayerType != LAYER_TYPE_NONE) { - child.mLocalDirtyRect.union(dirty); - } - int left = child.mLeft; int top = child.mTop; if (!child.getMatrix().isIdentity()) { @@ -4618,9 +4611,6 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager if ((mGroupFlags & FLAG_CLIP_CHILDREN) == 0 || dirty.intersect(0, 0, mRight - mLeft, mBottom - mTop)) { - if (mLayerType != LAYER_TYPE_NONE) { - mLocalDirtyRect.union(dirty); - } if (!getMatrix().isIdentity()) { transformRect(dirty); } diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 1be0d4e..4cd1b25 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -631,27 +631,7 @@ public final class ViewRootImpl implements ViewParent, } void destroyHardwareLayers() { - if (mThread != Thread.currentThread()) { - if (mAttachInfo.mHardwareRenderer != null && - mAttachInfo.mHardwareRenderer.isEnabled()) { - HardwareRenderer.trimMemory(ComponentCallbacks2.TRIM_MEMORY_MODERATE); - } - } else { - destroyHardwareLayer(mView); - } - } - - private static void destroyHardwareLayer(View view) { - view.destroyLayer(true); - - if (view instanceof ViewGroup) { - ViewGroup group = (ViewGroup) view; - - int count = group.getChildCount(); - for (int i = 0; i < count; i++) { - destroyHardwareLayer(group.getChildAt(i)); - } - } + // TODO Implement } void flushHardwareLayerUpdates() { @@ -1520,54 +1500,55 @@ public final class ViewRootImpl implements ViewParent, disposeResizeBuffer(); - if (mResizeBuffer == null) { - mResizeBuffer = mAttachInfo.mHardwareRenderer.createDisplayListLayer( - mWidth, mHeight); - } - mResizeBuffer.prepare(mWidth, mHeight, false); - RenderNode layerRenderNode = mResizeBuffer.startRecording(); - HardwareCanvas layerCanvas = layerRenderNode.start(mWidth, mHeight); - try { - final int restoreCount = layerCanvas.save(); - - int yoff; - final boolean scrolling = mScroller != null - && mScroller.computeScrollOffset(); - if (scrolling) { - yoff = mScroller.getCurrY(); - mScroller.abortAnimation(); - } else { - yoff = mScrollY; - } - - layerCanvas.translate(0, -yoff); - if (mTranslator != null) { - mTranslator.translateCanvas(layerCanvas); - } - - RenderNode renderNode = mView.mRenderNode; - if (renderNode != null && renderNode.isValid()) { - layerCanvas.drawDisplayList(renderNode, null, - RenderNode.FLAG_CLIP_CHILDREN); - } else { - mView.draw(layerCanvas); - } - - drawAccessibilityFocusedDrawableIfNeeded(layerCanvas); - - mResizeBufferStartTime = SystemClock.uptimeMillis(); - mResizeBufferDuration = mView.getResources().getInteger( - com.android.internal.R.integer.config_mediumAnimTime); - - layerCanvas.restoreToCount(restoreCount); - layerRenderNode.end(layerCanvas); - layerRenderNode.setCaching(true); - layerRenderNode.setLeftTopRightBottom(0, 0, mWidth, mHeight); - mTempRect.set(0, 0, mWidth, mHeight); - } finally { - mResizeBuffer.endRecording(mTempRect); - } - mAttachInfo.mHardwareRenderer.flushLayerUpdates(); +// TODO: Again.... +// if (mResizeBuffer == null) { +// mResizeBuffer = mAttachInfo.mHardwareRenderer.createDisplayListLayer( +// mWidth, mHeight); +// } +// mResizeBuffer.prepare(mWidth, mHeight, false); +// RenderNode layerRenderNode = mResizeBuffer.startRecording(); +// HardwareCanvas layerCanvas = layerRenderNode.start(mWidth, mHeight); +// try { +// final int restoreCount = layerCanvas.save(); +// +// int yoff; +// final boolean scrolling = mScroller != null +// && mScroller.computeScrollOffset(); +// if (scrolling) { +// yoff = mScroller.getCurrY(); +// mScroller.abortAnimation(); +// } else { +// yoff = mScrollY; +// } +// +// layerCanvas.translate(0, -yoff); +// if (mTranslator != null) { +// mTranslator.translateCanvas(layerCanvas); +// } +// +// RenderNode renderNode = mView.mRenderNode; +// if (renderNode != null && renderNode.isValid()) { +// layerCanvas.drawDisplayList(renderNode, null, +// RenderNode.FLAG_CLIP_CHILDREN); +// } else { +// mView.draw(layerCanvas); +// } +// +// drawAccessibilityFocusedDrawableIfNeeded(layerCanvas); +// +// mResizeBufferStartTime = SystemClock.uptimeMillis(); +// mResizeBufferDuration = mView.getResources().getInteger( +// com.android.internal.R.integer.config_mediumAnimTime); +// +// layerCanvas.restoreToCount(restoreCount); +// layerRenderNode.end(layerCanvas); +// layerRenderNode.setCaching(true); +// layerRenderNode.setLeftTopRightBottom(0, 0, mWidth, mHeight); +// mTempRect.set(0, 0, mWidth, mHeight); +// } finally { +// mResizeBuffer.endRecording(mTempRect); +// } +// mAttachInfo.mHardwareRenderer.flushLayerUpdates(); } mAttachInfo.mContentInsets.set(mPendingContentInsets); if (DEBUG_LAYOUT) Log.v(TAG, "Content insets changing to: " |
