DisplayListCanvas.java revision caa08ff5e9ee004634a95776fc72bb769f1286de
1e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy/* 2e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * Copyright (C) 2010 The Android Open Source Project 3e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * 4e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 5e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * you may not use this file except in compliance with the License. 6e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * You may obtain a copy of the License at 7e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * 8e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * http://www.apache.org/licenses/LICENSE-2.0 9e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * 10e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * Unless required by applicable law or agreed to in writing, software 11e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * distributed under the License is distributed on an "AS IS" BASIS, 12e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * See the License for the specific language governing permissions and 14e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * limitations under the License. 15e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy */ 16e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 17e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guypackage android.view; 18e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 19c9070ebd13263a341511cf779087a46750021196Chris Craikimport android.annotation.NonNull; 204afbed15f3b4f88c0190bbb89deba7a6ceae2da7John Reckimport android.annotation.Nullable; 21e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guyimport android.graphics.Bitmap; 2252244fff29042926e21fa897ef5ab11148e35299John Reckimport android.graphics.CanvasProperty; 23e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guyimport android.graphics.Paint; 24c9070ebd13263a341511cf779087a46750021196Chris Craikimport android.util.Pools.SynchronizedPool; 25e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 265cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reckimport dalvik.annotation.optimization.FastNative; 275cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck 28e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy/** 29f64c34e73f00bf61b5f98fa0f37f60b5798cc709Derek Sollenberger * A Canvas implementation that records view system drawing operations for deferred rendering. 30c9070ebd13263a341511cf779087a46750021196Chris Craik * This is intended for use with a DisplayList. This class keeps a list of all the Paint and 31c9070ebd13263a341511cf779087a46750021196Chris Craik * Bitmap objects that it draws, preventing the backing memory of Bitmaps from being freed while 32c9070ebd13263a341511cf779087a46750021196Chris Craik * the DisplayList is still holding a native reference to the memory. 33f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik * 34f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik * @hide 35e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy */ 36caa08ff5e9ee004634a95776fc72bb769f1286deJohn Reckpublic final class DisplayListCanvas extends RecordingCanvas { 37c9070ebd13263a341511cf779087a46750021196Chris Craik // The recording canvas pool should be large enough to handle a deeply nested 38c9070ebd13263a341511cf779087a46750021196Chris Craik // view hierarchy because display lists are generated recursively. 39c9070ebd13263a341511cf779087a46750021196Chris Craik private static final int POOL_LIMIT = 25; 40c9070ebd13263a341511cf779087a46750021196Chris Craik 413d8298e1a8b35dadb0a383aadb9a545ecab463e2sergeyv private static final int MAX_BITMAP_SIZE = 100 * 1024 * 1024; // 100 MB 423d8298e1a8b35dadb0a383aadb9a545ecab463e2sergeyv 43c9070ebd13263a341511cf779087a46750021196Chris Craik private static final SynchronizedPool<DisplayListCanvas> sPool = 44caa08ff5e9ee004634a95776fc72bb769f1286deJohn Reck new SynchronizedPool<>(POOL_LIMIT); 45c9070ebd13263a341511cf779087a46750021196Chris Craik 46c9070ebd13263a341511cf779087a46750021196Chris Craik RenderNode mNode; 47e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy private int mWidth; 48e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy private int mHeight; 49051910b9f998030dacb8a0722588cc715813fde1Raph Levien 50cc882b6518129a11fa007f8c9343e972f03607b4Derek Sollenberger static DisplayListCanvas obtain(@NonNull RenderNode node, int width, int height) { 51c9070ebd13263a341511cf779087a46750021196Chris Craik if (node == null) throw new IllegalArgumentException("node cannot be null"); 52c9070ebd13263a341511cf779087a46750021196Chris Craik DisplayListCanvas canvas = sPool.acquire(); 53c9070ebd13263a341511cf779087a46750021196Chris Craik if (canvas == null) { 54cc882b6518129a11fa007f8c9343e972f03607b4Derek Sollenberger canvas = new DisplayListCanvas(width, height); 55cc882b6518129a11fa007f8c9343e972f03607b4Derek Sollenberger } else { 56cc882b6518129a11fa007f8c9343e972f03607b4Derek Sollenberger nResetDisplayListCanvas(canvas.mNativeCanvasWrapper, width, height); 57c9070ebd13263a341511cf779087a46750021196Chris Craik } 58c9070ebd13263a341511cf779087a46750021196Chris Craik canvas.mNode = node; 59cc882b6518129a11fa007f8c9343e972f03607b4Derek Sollenberger canvas.mWidth = width; 60cc882b6518129a11fa007f8c9343e972f03607b4Derek Sollenberger canvas.mHeight = height; 61c9070ebd13263a341511cf779087a46750021196Chris Craik return canvas; 62c9070ebd13263a341511cf779087a46750021196Chris Craik } 63c9070ebd13263a341511cf779087a46750021196Chris Craik 64c9070ebd13263a341511cf779087a46750021196Chris Craik void recycle() { 65c9070ebd13263a341511cf779087a46750021196Chris Craik mNode = null; 66c9070ebd13263a341511cf779087a46750021196Chris Craik sPool.release(this); 67c9070ebd13263a341511cf779087a46750021196Chris Craik } 68c9070ebd13263a341511cf779087a46750021196Chris Craik 69c9070ebd13263a341511cf779087a46750021196Chris Craik long finishRecording() { 70c9070ebd13263a341511cf779087a46750021196Chris Craik return nFinishRecording(mNativeCanvasWrapper); 71c9070ebd13263a341511cf779087a46750021196Chris Craik } 72c9070ebd13263a341511cf779087a46750021196Chris Craik 73c9070ebd13263a341511cf779087a46750021196Chris Craik @Override 74c9070ebd13263a341511cf779087a46750021196Chris Craik public boolean isRecordingFor(Object o) { 75c9070ebd13263a341511cf779087a46750021196Chris Craik return o == mNode; 76c9070ebd13263a341511cf779087a46750021196Chris Craik } 776926c72e25b8dec3dd4b84af0819fa1937ae7296Romain Guy 78163935113919a184122b8b3bd672ef08c8df65dcRomain Guy /////////////////////////////////////////////////////////////////////////// 79e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // Constructors 80e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy /////////////////////////////////////////////////////////////////////////// 81b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 82cc882b6518129a11fa007f8c9343e972f03607b4Derek Sollenberger private DisplayListCanvas(int width, int height) { 83cc882b6518129a11fa007f8c9343e972f03607b4Derek Sollenberger super(nCreateDisplayListCanvas(width, height)); 849c08ee0f6cbfce4696acb166fcfbf424d8efcb31Chris Craik mDensity = 0; // disable bitmap density scaling 85e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 86b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 87e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy /////////////////////////////////////////////////////////////////////////// 88e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // Canvas management 89e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy /////////////////////////////////////////////////////////////////////////// 90e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 919c08ee0f6cbfce4696acb166fcfbf424d8efcb31Chris Craik 929c08ee0f6cbfce4696acb166fcfbf424d8efcb31Chris Craik @Override 939c08ee0f6cbfce4696acb166fcfbf424d8efcb31Chris Craik public void setDensity(int density) { 949c08ee0f6cbfce4696acb166fcfbf424d8efcb31Chris Craik // drop silently, since DisplayListCanvas doesn't perform density scaling 959c08ee0f6cbfce4696acb166fcfbf424d8efcb31Chris Craik } 969c08ee0f6cbfce4696acb166fcfbf424d8efcb31Chris Craik 97e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 98f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik public boolean isHardwareAccelerated() { 99f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik return true; 100f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik } 101f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik 102f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik @Override 103f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik public void setBitmap(Bitmap bitmap) { 104f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik throw new UnsupportedOperationException(); 105f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik } 106f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik 107f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik @Override 108e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public boolean isOpaque() { 1098dfaa4904205772cdceee63ef3989bcdedf1a914Tom Hudson return false; 110e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 111e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 112e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 113e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public int getWidth() { 114e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy return mWidth; 115e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 116e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 117e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 118e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy public int getHeight() { 119e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy return mHeight; 120e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy } 121e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 122f61970fc79e9c5cf340fa942597628242361864aRomain Guy @Override 123f61970fc79e9c5cf340fa942597628242361864aRomain Guy public int getMaximumBitmapWidth() { 124f61970fc79e9c5cf340fa942597628242361864aRomain Guy return nGetMaximumTextureWidth(); 125f61970fc79e9c5cf340fa942597628242361864aRomain Guy } 126f61970fc79e9c5cf340fa942597628242361864aRomain Guy 127f61970fc79e9c5cf340fa942597628242361864aRomain Guy @Override 128f61970fc79e9c5cf340fa942597628242361864aRomain Guy public int getMaximumBitmapHeight() { 129f61970fc79e9c5cf340fa942597628242361864aRomain Guy return nGetMaximumTextureHeight(); 130f61970fc79e9c5cf340fa942597628242361864aRomain Guy } 131f61970fc79e9c5cf340fa942597628242361864aRomain Guy 132e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy /////////////////////////////////////////////////////////////////////////// 133e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // Setup 134e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy /////////////////////////////////////////////////////////////////////////// 135e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 136e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy @Override 1378afd0f245cc0c4a0366f39f41b5f78e47ee83be3Chris Craik public void insertReorderBarrier() { 1388dfaa4904205772cdceee63ef3989bcdedf1a914Tom Hudson nInsertReorderBarrier(mNativeCanvasWrapper, true); 1398afd0f245cc0c4a0366f39f41b5f78e47ee83be3Chris Craik } 1408afd0f245cc0c4a0366f39f41b5f78e47ee83be3Chris Craik 1418afd0f245cc0c4a0366f39f41b5f78e47ee83be3Chris Craik @Override 1428afd0f245cc0c4a0366f39f41b5f78e47ee83be3Chris Craik public void insertInorderBarrier() { 1438dfaa4904205772cdceee63ef3989bcdedf1a914Tom Hudson nInsertReorderBarrier(mNativeCanvasWrapper, false); 1448afd0f245cc0c4a0366f39f41b5f78e47ee83be3Chris Craik } 1458afd0f245cc0c4a0366f39f41b5f78e47ee83be3Chris Craik 146530041d3191ce817832a0108514617768e43cda6Romain Guy /////////////////////////////////////////////////////////////////////////// 147530041d3191ce817832a0108514617768e43cda6Romain Guy // Functor 148530041d3191ce817832a0108514617768e43cda6Romain Guy /////////////////////////////////////////////////////////////////////////// 149530041d3191ce817832a0108514617768e43cda6Romain Guy 150f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik /** 151cd1c3eba69d044b551cededad75474038f919890John Reck * Records the functor specified with the drawGLFunction function pointer. This is 152cd1c3eba69d044b551cededad75474038f919890John Reck * functionality used by webview for calling into their renderer from our display lists. 153f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik * 154f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik * @param drawGLFunction A native function pointer 155f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik */ 15657616d3e55ffd3a4dbfd3a721b078a09fbe6d05cNarayan Kamath public void callDrawGLFunction2(long drawGLFunction) { 157cd1c3eba69d044b551cededad75474038f919890John Reck nCallDrawGLFunction(mNativeCanvasWrapper, drawGLFunction, null); 158daf98e941e140e8739458126640183b9f296a2abChet Haase } 159daf98e941e140e8739458126640183b9f296a2abChet Haase 160cd1c3eba69d044b551cededad75474038f919890John Reck /** 161cd1c3eba69d044b551cededad75474038f919890John Reck * Records the functor specified with the drawGLFunction function pointer. This is 162cd1c3eba69d044b551cededad75474038f919890John Reck * functionality used by webview for calling into their renderer from our display lists. 163cd1c3eba69d044b551cededad75474038f919890John Reck * 164cd1c3eba69d044b551cededad75474038f919890John Reck * @param drawGLFunction A native function pointer 165cd1c3eba69d044b551cededad75474038f919890John Reck * @param releasedCallback Called when the display list is destroyed, and thus 166cd1c3eba69d044b551cededad75474038f919890John Reck * the functor is no longer referenced by this canvas's display list. 167cd1c3eba69d044b551cededad75474038f919890John Reck * 168cd1c3eba69d044b551cededad75474038f919890John Reck * NOTE: The callback does *not* necessarily mean that there are no longer 169cd1c3eba69d044b551cededad75474038f919890John Reck * any references to the functor, just that the reference from this specific 170cd1c3eba69d044b551cededad75474038f919890John Reck * canvas's display list has been released. 171cd1c3eba69d044b551cededad75474038f919890John Reck */ 1724afbed15f3b4f88c0190bbb89deba7a6ceae2da7John Reck public void drawGLFunctor2(long drawGLFunctor, @Nullable Runnable releasedCallback) { 173cd1c3eba69d044b551cededad75474038f919890John Reck nCallDrawGLFunction(mNativeCanvasWrapper, drawGLFunctor, releasedCallback); 174cd1c3eba69d044b551cededad75474038f919890John Reck } 175cd1c3eba69d044b551cededad75474038f919890John Reck 176bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy /////////////////////////////////////////////////////////////////////////// 177b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy // Display list 178b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy /////////////////////////////////////////////////////////////////////////// 179b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 180f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik /** 181f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik * Draws the specified display list onto this canvas. The display list can only 182f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik * be drawn if {@link android.view.RenderNode#isValid()} returns true. 183f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik * 184956f340aacc7d8fc2d10f776551f13fde2d8d3abChris Craik * @param renderNode The RenderNode to draw. 185f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik */ 186f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik public void drawRenderNode(RenderNode renderNode) { 187956f340aacc7d8fc2d10f776551f13fde2d8d3abChris Craik nDrawRenderNode(mNativeCanvasWrapper, renderNode.getNativeDisplayList()); 188f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik } 189f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik 190e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy /////////////////////////////////////////////////////////////////////////// 1916c319ca1275c8db892c39b48fc54864c949f9171Romain Guy // Hardware layer 1926c319ca1275c8db892c39b48fc54864c949f9171Romain Guy /////////////////////////////////////////////////////////////////////////// 193051910b9f998030dacb8a0722588cc715813fde1Raph Levien 194f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik /** 195f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik * Draws the specified layer onto this canvas. 196f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik * 197f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik * @param layer The layer to composite on this canvas 198f6829a0a618b4523619ec53c996b04d67e3186b9Chris Craik */ 1993aadd60521960be063ee06208562ccb63dc414e3Chris Craik void drawHardwareLayer(HardwareLayer layer) { 2003aadd60521960be063ee06208562ccb63dc414e3Chris Craik nDrawLayer(mNativeCanvasWrapper, layer.getLayerHandle()); 2016c319ca1275c8db892c39b48fc54864c949f9171Romain Guy } 2026c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 2036c319ca1275c8db892c39b48fc54864c949f9171Romain Guy /////////////////////////////////////////////////////////////////////////// 204e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy // Drawing 205e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy /////////////////////////////////////////////////////////////////////////// 206e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 20752244fff29042926e21fa897ef5ab11148e35299John Reck public void drawCircle(CanvasProperty<Float> cx, CanvasProperty<Float> cy, 20852244fff29042926e21fa897ef5ab11148e35299John Reck CanvasProperty<Float> radius, CanvasProperty<Paint> paint) { 2098dfaa4904205772cdceee63ef3989bcdedf1a914Tom Hudson nDrawCircle(mNativeCanvasWrapper, cx.getNativeContainer(), cy.getNativeContainer(), 21052244fff29042926e21fa897ef5ab11148e35299John Reck radius.getNativeContainer(), paint.getNativeContainer()); 21152244fff29042926e21fa897ef5ab11148e35299John Reck } 21252244fff29042926e21fa897ef5ab11148e35299John Reck 213072707dfad1da6f49f4d3ce58ca104f6c46a7266Jorim Jaggi public void drawRoundRect(CanvasProperty<Float> left, CanvasProperty<Float> top, 214072707dfad1da6f49f4d3ce58ca104f6c46a7266Jorim Jaggi CanvasProperty<Float> right, CanvasProperty<Float> bottom, CanvasProperty<Float> rx, 215072707dfad1da6f49f4d3ce58ca104f6c46a7266Jorim Jaggi CanvasProperty<Float> ry, CanvasProperty<Paint> paint) { 2168dfaa4904205772cdceee63ef3989bcdedf1a914Tom Hudson nDrawRoundRect(mNativeCanvasWrapper, left.getNativeContainer(), top.getNativeContainer(), 217072707dfad1da6f49f4d3ce58ca104f6c46a7266Jorim Jaggi right.getNativeContainer(), bottom.getNativeContainer(), 218072707dfad1da6f49f4d3ce58ca104f6c46a7266Jorim Jaggi rx.getNativeContainer(), ry.getNativeContainer(), 219072707dfad1da6f49f4d3ce58ca104f6c46a7266Jorim Jaggi paint.getNativeContainer()); 220072707dfad1da6f49f4d3ce58ca104f6c46a7266Jorim Jaggi } 221072707dfad1da6f49f4d3ce58ca104f6c46a7266Jorim Jaggi 2223d8298e1a8b35dadb0a383aadb9a545ecab463e2sergeyv @Override 2233d8298e1a8b35dadb0a383aadb9a545ecab463e2sergeyv protected void throwIfCannotDraw(Bitmap bitmap) { 2243d8298e1a8b35dadb0a383aadb9a545ecab463e2sergeyv super.throwIfCannotDraw(bitmap); 2253d8298e1a8b35dadb0a383aadb9a545ecab463e2sergeyv int bitmapSize = bitmap.getByteCount(); 2263d8298e1a8b35dadb0a383aadb9a545ecab463e2sergeyv if (bitmapSize > MAX_BITMAP_SIZE) { 2273d8298e1a8b35dadb0a383aadb9a545ecab463e2sergeyv throw new RuntimeException( 2283d8298e1a8b35dadb0a383aadb9a545ecab463e2sergeyv "Canvas: trying to draw too large(" + bitmapSize + "bytes) bitmap."); 2293d8298e1a8b35dadb0a383aadb9a545ecab463e2sergeyv } 2303d8298e1a8b35dadb0a383aadb9a545ecab463e2sergeyv } 2315cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck 2325cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck @FastNative 2335cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck private static native long nCreateDisplayListCanvas(int width, int height); 2345cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck @FastNative 2355cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck private static native void nResetDisplayListCanvas(long canvas, int width, int height); 2365cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck @FastNative 2375cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck private static native int nGetMaximumTextureWidth(); 2385cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck @FastNative 2395cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck private static native int nGetMaximumTextureHeight(); 2405cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck @FastNative 2415cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck private static native void nInsertReorderBarrier(long renderer, boolean enableReorder); 2425cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck @FastNative 2435cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck private static native void nCallDrawGLFunction(long renderer, 2445cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck long drawGLFunction, Runnable releasedCallback); 2455cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck @FastNative 2465cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck private static native long nFinishRecording(long renderer); 2475cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck @FastNative 2485cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck private static native void nDrawRenderNode(long renderer, long renderNode); 2495cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck @FastNative 2505cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck private static native void nDrawLayer(long renderer, long layer); 2515cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck @FastNative 2525cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck private static native void nDrawCircle(long renderer, long propCx, 2535cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck long propCy, long propRadius, long propPaint); 2545cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck @FastNative 2555cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck private static native void nDrawRoundRect(long renderer, long propLeft, long propTop, 2565cb74bca88268a8b9025be2cce81e1b4f967d19dJohn Reck long propRight, long propBottom, long propRx, long propRy, long propPaint); 257e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy} 258