Loading core/java/android/view/GLES20Canvas.java +6 −0 Original line number Diff line number Diff line Loading @@ -162,6 +162,11 @@ class GLES20Canvas extends HardwareCanvas { nPushLayerUpdate(mRenderer, ((GLES20RenderLayer) layer).mLayer); } @Override void flushLayerUpdates() { nFlushLayerUpdates(mRenderer); } @Override void clearLayerUpdates() { nClearLayerUpdates(mRenderer); Loading @@ -184,6 +189,7 @@ class GLES20Canvas extends HardwareCanvas { static native boolean nCopyLayer(int layerId, int bitmap); private static native void nClearLayerUpdates(int renderer); private static native void nFlushLayerUpdates(int renderer); private static native void nPushLayerUpdate(int renderer, int layer); /////////////////////////////////////////////////////////////////////////// Loading core/java/android/view/HardwareCanvas.java +9 −0 Original line number Diff line number Diff line Loading @@ -201,6 +201,15 @@ public abstract class HardwareCanvas extends Canvas { */ abstract void pushLayerUpdate(HardwareLayer layer); /** * Immediately executes all enqueued layer updates. * * @see #pushLayerUpdate(HardwareLayer) * * @hide */ abstract void flushLayerUpdates(); /** * Removes all enqueued layer updates. * Loading core/java/android/view/HardwareRenderer.java +14 −0 Original line number Diff line number Diff line Loading @@ -449,9 +449,18 @@ public abstract class HardwareRenderer { * as soon as possible. * * @param layer The hardware layer that needs an update * * @see #flushLayerUpdates() */ abstract void pushLayerUpdate(HardwareLayer layer); /** * Forces all enqueued layer updates to be executed immediately. * * @see #pushLayerUpdate(HardwareLayer) */ abstract void flushLayerUpdates(); /** * Interface used to receive callbacks whenever a view is drawn by * a hardware renderer instance. Loading Loading @@ -2123,6 +2132,11 @@ public abstract class HardwareRenderer { mGlCanvas.pushLayerUpdate(layer); } @Override void flushLayerUpdates() { mGlCanvas.flushLayerUpdates(); } @Override public DisplayList createDisplayList(String name) { return new GLES20DisplayList(name); Loading core/java/android/view/View.java +6 −4 Original line number Diff line number Diff line Loading @@ -12615,16 +12615,18 @@ public class View implements Drawable.Callback, KeyEvent.Callback, public void buildLayer() { if (mLayerType == LAYER_TYPE_NONE) return; if (mAttachInfo == null) { final AttachInfo attachInfo = mAttachInfo; if (attachInfo == null) { throw new IllegalStateException("This view must be attached to a window first"); } switch (mLayerType) { case LAYER_TYPE_HARDWARE: if (mAttachInfo.mHardwareRenderer != null && mAttachInfo.mHardwareRenderer.isEnabled() && mAttachInfo.mHardwareRenderer.validate()) { if (attachInfo.mHardwareRenderer != null && attachInfo.mHardwareRenderer.isEnabled() && attachInfo.mHardwareRenderer.validate()) { getHardwareLayer(); attachInfo.mViewRootImpl.dispatchFlushHardwareLayerUpdates(); } break; case LAYER_TYPE_SOFTWARE: Loading core/java/android/view/ViewRootImpl.java +18 −0 Original line number Diff line number Diff line Loading @@ -640,6 +640,18 @@ public final class ViewRootImpl implements ViewParent, } } void flushHardwareLayerUpdates() { if (mAttachInfo.mHardwareRenderer != null && mAttachInfo.mHardwareRenderer.isEnabled() && mAttachInfo.mHardwareRenderer.validate()) { mAttachInfo.mHardwareRenderer.flushLayerUpdates(); } } void dispatchFlushHardwareLayerUpdates() { mHandler.removeMessages(MSG_FLUSH_LAYER_UPDATES); mHandler.sendMessageAtFrontOfQueue(mHandler.obtainMessage(MSG_FLUSH_LAYER_UPDATES)); } public boolean attachFunctor(int functor) { //noinspection SimplifiableIfStatement if (mAttachInfo.mHardwareRenderer != null && mAttachInfo.mHardwareRenderer.isEnabled()) { Loading Loading @@ -2900,6 +2912,7 @@ public final class ViewRootImpl implements ViewParent, private final static int MSG_DISPATCH_DONE_ANIMATING = 22; private final static int MSG_INVALIDATE_WORLD = 23; private final static int MSG_WINDOW_MOVED = 24; private final static int MSG_FLUSH_LAYER_UPDATES = 25; final class ViewRootHandler extends Handler { @Override Loading Loading @@ -2949,6 +2962,8 @@ public final class ViewRootImpl implements ViewParent, return "MSG_DISPATCH_DONE_ANIMATING"; case MSG_WINDOW_MOVED: return "MSG_WINDOW_MOVED"; case MSG_FLUSH_LAYER_UPDATES: return "MSG_FLUSH_LAYER_UPDATES"; } return super.getMessageName(message); } Loading Loading @@ -3171,6 +3186,9 @@ public final class ViewRootImpl implements ViewParent, invalidateWorld(mView); } } break; case MSG_FLUSH_LAYER_UPDATES: { flushHardwareLayerUpdates(); } break; } } } Loading Loading
core/java/android/view/GLES20Canvas.java +6 −0 Original line number Diff line number Diff line Loading @@ -162,6 +162,11 @@ class GLES20Canvas extends HardwareCanvas { nPushLayerUpdate(mRenderer, ((GLES20RenderLayer) layer).mLayer); } @Override void flushLayerUpdates() { nFlushLayerUpdates(mRenderer); } @Override void clearLayerUpdates() { nClearLayerUpdates(mRenderer); Loading @@ -184,6 +189,7 @@ class GLES20Canvas extends HardwareCanvas { static native boolean nCopyLayer(int layerId, int bitmap); private static native void nClearLayerUpdates(int renderer); private static native void nFlushLayerUpdates(int renderer); private static native void nPushLayerUpdate(int renderer, int layer); /////////////////////////////////////////////////////////////////////////// Loading
core/java/android/view/HardwareCanvas.java +9 −0 Original line number Diff line number Diff line Loading @@ -201,6 +201,15 @@ public abstract class HardwareCanvas extends Canvas { */ abstract void pushLayerUpdate(HardwareLayer layer); /** * Immediately executes all enqueued layer updates. * * @see #pushLayerUpdate(HardwareLayer) * * @hide */ abstract void flushLayerUpdates(); /** * Removes all enqueued layer updates. * Loading
core/java/android/view/HardwareRenderer.java +14 −0 Original line number Diff line number Diff line Loading @@ -449,9 +449,18 @@ public abstract class HardwareRenderer { * as soon as possible. * * @param layer The hardware layer that needs an update * * @see #flushLayerUpdates() */ abstract void pushLayerUpdate(HardwareLayer layer); /** * Forces all enqueued layer updates to be executed immediately. * * @see #pushLayerUpdate(HardwareLayer) */ abstract void flushLayerUpdates(); /** * Interface used to receive callbacks whenever a view is drawn by * a hardware renderer instance. Loading Loading @@ -2123,6 +2132,11 @@ public abstract class HardwareRenderer { mGlCanvas.pushLayerUpdate(layer); } @Override void flushLayerUpdates() { mGlCanvas.flushLayerUpdates(); } @Override public DisplayList createDisplayList(String name) { return new GLES20DisplayList(name); Loading
core/java/android/view/View.java +6 −4 Original line number Diff line number Diff line Loading @@ -12615,16 +12615,18 @@ public class View implements Drawable.Callback, KeyEvent.Callback, public void buildLayer() { if (mLayerType == LAYER_TYPE_NONE) return; if (mAttachInfo == null) { final AttachInfo attachInfo = mAttachInfo; if (attachInfo == null) { throw new IllegalStateException("This view must be attached to a window first"); } switch (mLayerType) { case LAYER_TYPE_HARDWARE: if (mAttachInfo.mHardwareRenderer != null && mAttachInfo.mHardwareRenderer.isEnabled() && mAttachInfo.mHardwareRenderer.validate()) { if (attachInfo.mHardwareRenderer != null && attachInfo.mHardwareRenderer.isEnabled() && attachInfo.mHardwareRenderer.validate()) { getHardwareLayer(); attachInfo.mViewRootImpl.dispatchFlushHardwareLayerUpdates(); } break; case LAYER_TYPE_SOFTWARE: Loading
core/java/android/view/ViewRootImpl.java +18 −0 Original line number Diff line number Diff line Loading @@ -640,6 +640,18 @@ public final class ViewRootImpl implements ViewParent, } } void flushHardwareLayerUpdates() { if (mAttachInfo.mHardwareRenderer != null && mAttachInfo.mHardwareRenderer.isEnabled() && mAttachInfo.mHardwareRenderer.validate()) { mAttachInfo.mHardwareRenderer.flushLayerUpdates(); } } void dispatchFlushHardwareLayerUpdates() { mHandler.removeMessages(MSG_FLUSH_LAYER_UPDATES); mHandler.sendMessageAtFrontOfQueue(mHandler.obtainMessage(MSG_FLUSH_LAYER_UPDATES)); } public boolean attachFunctor(int functor) { //noinspection SimplifiableIfStatement if (mAttachInfo.mHardwareRenderer != null && mAttachInfo.mHardwareRenderer.isEnabled()) { Loading Loading @@ -2900,6 +2912,7 @@ public final class ViewRootImpl implements ViewParent, private final static int MSG_DISPATCH_DONE_ANIMATING = 22; private final static int MSG_INVALIDATE_WORLD = 23; private final static int MSG_WINDOW_MOVED = 24; private final static int MSG_FLUSH_LAYER_UPDATES = 25; final class ViewRootHandler extends Handler { @Override Loading Loading @@ -2949,6 +2962,8 @@ public final class ViewRootImpl implements ViewParent, return "MSG_DISPATCH_DONE_ANIMATING"; case MSG_WINDOW_MOVED: return "MSG_WINDOW_MOVED"; case MSG_FLUSH_LAYER_UPDATES: return "MSG_FLUSH_LAYER_UPDATES"; } return super.getMessageName(message); } Loading Loading @@ -3171,6 +3186,9 @@ public final class ViewRootImpl implements ViewParent, invalidateWorld(mView); } } break; case MSG_FLUSH_LAYER_UPDATES: { flushHardwareLayerUpdates(); } break; } } } Loading