Loading core/java/android/view/HardwareRenderer.java +12 −0 Original line number Diff line number Diff line Loading @@ -218,6 +218,13 @@ public abstract class HardwareRenderer { */ abstract int getHeight(); /** * Gets the current canvas associated with this HardwareRenderer. * * @return the current HardwareCanvas */ abstract HardwareCanvas getCanvas(); /** * Sets the directory to use as a persistent storage for hardware rendering * resources. Loading Loading @@ -783,6 +790,11 @@ public abstract class HardwareRenderer { return mHeight; } @Override HardwareCanvas getCanvas() { return mCanvas; } boolean canDraw() { return mGl != null && mCanvas != null; } Loading core/java/android/view/ViewRootImpl.java +14 −13 Original line number Diff line number Diff line Loading @@ -1216,7 +1216,8 @@ public final class ViewRootImpl extends Handler implements ViewParent, disposeResizeBuffer(); boolean completed = false; HardwareCanvas canvas = null; HardwareCanvas hwRendererCanvas = mAttachInfo.mHardwareRenderer.getCanvas(); HardwareCanvas layerCanvas = null; try { if (mResizeBuffer == null) { mResizeBuffer = mAttachInfo.mHardwareRenderer.createHardwareLayer( Loading @@ -1225,12 +1226,12 @@ public final class ViewRootImpl extends Handler implements ViewParent, mResizeBuffer.getHeight() != mHeight) { mResizeBuffer.resize(mWidth, mHeight); } canvas = mResizeBuffer.start(mAttachInfo.mHardwareCanvas); canvas.setViewport(mWidth, mHeight); canvas.onPreDraw(null); final int restoreCount = canvas.save(); layerCanvas = mResizeBuffer.start(hwRendererCanvas); layerCanvas.setViewport(mWidth, mHeight); layerCanvas.onPreDraw(null); final int restoreCount = layerCanvas.save(); canvas.drawColor(0xff000000, PorterDuff.Mode.SRC); layerCanvas.drawColor(0xff000000, PorterDuff.Mode.SRC); int yoff; final boolean scrolling = mScroller != null Loading @@ -1242,27 +1243,27 @@ public final class ViewRootImpl extends Handler implements ViewParent, yoff = mScrollY; } canvas.translate(0, -yoff); layerCanvas.translate(0, -yoff); if (mTranslator != null) { mTranslator.translateCanvas(canvas); mTranslator.translateCanvas(layerCanvas); } mView.draw(canvas); mView.draw(layerCanvas); mResizeBufferStartTime = SystemClock.uptimeMillis(); mResizeBufferDuration = mView.getResources().getInteger( com.android.internal.R.integer.config_mediumAnimTime); completed = true; canvas.restoreToCount(restoreCount); layerCanvas.restoreToCount(restoreCount); } catch (OutOfMemoryError e) { Log.w(TAG, "Not enough memory for content change anim buffer", e); } finally { if (canvas != null) { canvas.onPostDraw(); if (layerCanvas != null) { layerCanvas.onPostDraw(); } if (mResizeBuffer != null) { mResizeBuffer.end(mAttachInfo.mHardwareCanvas); mResizeBuffer.end(hwRendererCanvas); if (!completed) { mResizeBuffer.destroy(); mResizeBuffer = null; Loading libs/hwui/OpenGLRenderer.cpp +4 −2 Original line number Diff line number Diff line Loading @@ -201,14 +201,16 @@ void OpenGLRenderer::interrupt() { } void OpenGLRenderer::resume() { glViewport(0, 0, mSnapshot->viewport.getWidth(), mSnapshot->viewport.getHeight()); sp<Snapshot> snapshot = (mSnapshot != NULL) ? mSnapshot : mFirstSnapshot; glViewport(0, 0, snapshot->viewport.getWidth(), snapshot->viewport.getHeight()); glEnable(GL_SCISSOR_TEST); dirtyClip(); glDisable(GL_DITHER); glBindFramebuffer(GL_FRAMEBUFFER, mSnapshot->fbo); glBindFramebuffer(GL_FRAMEBUFFER, snapshot->fbo); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); mCaches.blend = true; Loading Loading
core/java/android/view/HardwareRenderer.java +12 −0 Original line number Diff line number Diff line Loading @@ -218,6 +218,13 @@ public abstract class HardwareRenderer { */ abstract int getHeight(); /** * Gets the current canvas associated with this HardwareRenderer. * * @return the current HardwareCanvas */ abstract HardwareCanvas getCanvas(); /** * Sets the directory to use as a persistent storage for hardware rendering * resources. Loading Loading @@ -783,6 +790,11 @@ public abstract class HardwareRenderer { return mHeight; } @Override HardwareCanvas getCanvas() { return mCanvas; } boolean canDraw() { return mGl != null && mCanvas != null; } Loading
core/java/android/view/ViewRootImpl.java +14 −13 Original line number Diff line number Diff line Loading @@ -1216,7 +1216,8 @@ public final class ViewRootImpl extends Handler implements ViewParent, disposeResizeBuffer(); boolean completed = false; HardwareCanvas canvas = null; HardwareCanvas hwRendererCanvas = mAttachInfo.mHardwareRenderer.getCanvas(); HardwareCanvas layerCanvas = null; try { if (mResizeBuffer == null) { mResizeBuffer = mAttachInfo.mHardwareRenderer.createHardwareLayer( Loading @@ -1225,12 +1226,12 @@ public final class ViewRootImpl extends Handler implements ViewParent, mResizeBuffer.getHeight() != mHeight) { mResizeBuffer.resize(mWidth, mHeight); } canvas = mResizeBuffer.start(mAttachInfo.mHardwareCanvas); canvas.setViewport(mWidth, mHeight); canvas.onPreDraw(null); final int restoreCount = canvas.save(); layerCanvas = mResizeBuffer.start(hwRendererCanvas); layerCanvas.setViewport(mWidth, mHeight); layerCanvas.onPreDraw(null); final int restoreCount = layerCanvas.save(); canvas.drawColor(0xff000000, PorterDuff.Mode.SRC); layerCanvas.drawColor(0xff000000, PorterDuff.Mode.SRC); int yoff; final boolean scrolling = mScroller != null Loading @@ -1242,27 +1243,27 @@ public final class ViewRootImpl extends Handler implements ViewParent, yoff = mScrollY; } canvas.translate(0, -yoff); layerCanvas.translate(0, -yoff); if (mTranslator != null) { mTranslator.translateCanvas(canvas); mTranslator.translateCanvas(layerCanvas); } mView.draw(canvas); mView.draw(layerCanvas); mResizeBufferStartTime = SystemClock.uptimeMillis(); mResizeBufferDuration = mView.getResources().getInteger( com.android.internal.R.integer.config_mediumAnimTime); completed = true; canvas.restoreToCount(restoreCount); layerCanvas.restoreToCount(restoreCount); } catch (OutOfMemoryError e) { Log.w(TAG, "Not enough memory for content change anim buffer", e); } finally { if (canvas != null) { canvas.onPostDraw(); if (layerCanvas != null) { layerCanvas.onPostDraw(); } if (mResizeBuffer != null) { mResizeBuffer.end(mAttachInfo.mHardwareCanvas); mResizeBuffer.end(hwRendererCanvas); if (!completed) { mResizeBuffer.destroy(); mResizeBuffer = null; Loading
libs/hwui/OpenGLRenderer.cpp +4 −2 Original line number Diff line number Diff line Loading @@ -201,14 +201,16 @@ void OpenGLRenderer::interrupt() { } void OpenGLRenderer::resume() { glViewport(0, 0, mSnapshot->viewport.getWidth(), mSnapshot->viewport.getHeight()); sp<Snapshot> snapshot = (mSnapshot != NULL) ? mSnapshot : mFirstSnapshot; glViewport(0, 0, snapshot->viewport.getWidth(), snapshot->viewport.getHeight()); glEnable(GL_SCISSOR_TEST); dirtyClip(); glDisable(GL_DITHER); glBindFramebuffer(GL_FRAMEBUFFER, mSnapshot->fbo); glBindFramebuffer(GL_FRAMEBUFFER, snapshot->fbo); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); mCaches.blend = true; Loading