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