diff options
-rw-r--r-- | core/java/android/view/ThreadedRenderer.java | 13 | ||||
-rw-r--r-- | core/java/android/view/View.java | 7 | ||||
-rw-r--r-- | core/java/android/view/ViewRootImpl.java | 69 |
3 files changed, 49 insertions, 40 deletions
diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java index 60d7c78..924c331 100644 --- a/core/java/android/view/ThreadedRenderer.java +++ b/core/java/android/view/ThreadedRenderer.java @@ -178,11 +178,14 @@ public class ThreadedRenderer extends HardwareRenderer { Trace.traceBegin(Trace.TRACE_TAG_VIEW, "getDisplayList"); HardwareCanvas canvas = mRootNode.start(mWidth, mHeight); - callbacks.onHardwarePostDraw(canvas); - canvas.drawDisplayList(view.getDisplayList()); - callbacks.onHardwarePostDraw(canvas); - mRootNode.end(canvas); - Trace.traceEnd(Trace.TRACE_TAG_VIEW); + try { + callbacks.onHardwarePostDraw(canvas); + canvas.drawDisplayList(view.getDisplayList()); + callbacks.onHardwarePostDraw(canvas); + } finally { + mRootNode.end(canvas); + Trace.traceEnd(Trace.TRACE_TAG_VIEW); + } view.mRecreateDisplayList = false; } diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index be316e2..cb05b05 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -14897,8 +14897,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback, final int width = bounds.width(); final int height = bounds.height(); final HardwareCanvas canvas = displayList.start(width, height); - drawable.draw(canvas); - displayList.end(canvas); + try { + drawable.draw(canvas); + } finally { + displayList.end(canvas); + } // Set up drawable properties that are view-independent. displayList.setLeftTopRightBottom(bounds.left, bounds.top, bounds.right, bounds.bottom); diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 374787e..23be203 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -1514,43 +1514,46 @@ public final class ViewRootImpl implements ViewParent, mResizeBuffer.prepare(mWidth, mHeight, false); RenderNode layerRenderNode = mResizeBuffer.startRecording(); HardwareCanvas layerCanvas = layerRenderNode.start(mWidth, mHeight); - final int restoreCount = layerCanvas.save(); - - int yoff; - final boolean scrolling = mScroller != null - && mScroller.computeScrollOffset(); - if (scrolling) { - yoff = mScroller.getCurrY(); - mScroller.abortAnimation(); - } else { - yoff = mScrollY; - } + 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); - } + 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); - } + RenderNode renderNode = mView.mRenderNode; + if (renderNode != null && renderNode.isValid()) { + layerCanvas.drawDisplayList(renderNode, null, + RenderNode.FLAG_CLIP_CHILDREN); + } else { + mView.draw(layerCanvas); + } - drawAccessibilityFocusedDrawableIfNeeded(layerCanvas); + drawAccessibilityFocusedDrawableIfNeeded(layerCanvas); - mResizeBufferStartTime = SystemClock.uptimeMillis(); - mResizeBufferDuration = mView.getResources().getInteger( - com.android.internal.R.integer.config_mediumAnimTime); + 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); - mResizeBuffer.endRecording(mTempRect); + 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); @@ -2949,7 +2952,7 @@ public final class ViewRootImpl implements ViewParent, } } } - + /** * Return true if child is an ancestor of parent, (or equal to the parent). */ |