DisplayListRenderer.cpp revision db8c9a6a4d9bf8c39f834b25611926caf21380f6
14aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/* 24aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * Copyright (C) 2010 The Android Open Source Project 34aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * 44aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 54aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * you may not use this file except in compliance with the License. 64aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * You may obtain a copy of the License at 74aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * 84aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * http://www.apache.org/licenses/LICENSE-2.0 94aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * 104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * Unless required by applicable law or agreed to in writing, software 114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * distributed under the License is distributed on an "AS IS" BASIS, 124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * See the License for the specific language governing permissions and 144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * limitations under the License. 154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy */ 164aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#define LOG_TAG "OpenGLRenderer" 184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 19d5a85fb63d91a9297e8d9a11016f3b3ed60dfbabRomain Guy#include <SkCamera.h> 209c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase 216554943a1dd6854c0f4976900956e556767b49e1Romain Guy#include <private/hwui/DrawGlInfo.h> 226554943a1dd6854c0f4976900956e556767b49e1Romain Guy 239c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase#include "DisplayListLogBuffer.h" 244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include "DisplayListRenderer.h" 259c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase#include "Caches.h" 2613631f3da855f200a151e7837ed9f6b079622b58Romain Guy 274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guynamespace android { 284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guynamespace uirenderer { 294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 31b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy// Display list 32b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/////////////////////////////////////////////////////////////////////////////// 33b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 34ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guyconst char* DisplayList::OP_NAMES[] = { 35ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Save", 36ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Restore", 37ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "RestoreToCount", 38ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SaveLayer", 39ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SaveLayerAlpha", 40ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Translate", 41ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Rotate", 42ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Scale", 434cf6e2f34994f160e1baba205a43c12784dd3e0dRomain Guy "Skew", 44ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetMatrix", 45ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ConcatMatrix", 46ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ClipRect", 47ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawDisplayList", 48ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawLayer", 49ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawBitmap", 50ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawBitmapMatrix", 51ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawBitmapRect", 525a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy "DrawBitmapMesh", 53ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawPatch", 54ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawColor", 55ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawRect", 5601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy "DrawRoundRect", 5701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy "DrawCircle", 58c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy "DrawOval", 598b2f5267f16c295f12faab810527cd6311997e34Romain Guy "DrawArc", 60ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawPath", 61ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawLines", 62ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy "DrawPoints", 63ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawText", 64325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy "DrawTextOnPath", 65eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy "DrawPosText", 66ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ResetShader", 67ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetupShader", 68ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ResetColorFilter", 69ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetupColorFilter", 70ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ResetShadow", 71daf98e941e140e8739458126640183b9f296a2abChet Haase "SetupShadow", 725ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy "ResetPaintFilter", 735ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy "SetupPaintFilter", 74daf98e941e140e8739458126640183b9f296a2abChet Haase "DrawGLFunction" 75ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy}; 76ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 779c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haasevoid DisplayList::outputLogBuffer(int fd) { 789c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase DisplayListLogBuffer& logBuffer = DisplayListLogBuffer::getInstance(); 799c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase if (logBuffer.isEmpty()) { 809c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase return; 819c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase } 8265b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy 839c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase FILE *file = fdopen(fd, "a"); 8465b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy 859c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase fprintf(file, "\nRecent DisplayList operations\n"); 869c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase logBuffer.outputCommands(file, OP_NAMES); 8765b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy 8865b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy String8 cachesLog; 8965b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy Caches::getInstance().dumpMemoryUsage(cachesLog); 9065b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy fprintf(file, "\nCaches:\n%s", cachesLog.string()); 9165b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy fprintf(file, "\n"); 9265b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy 939c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase fflush(file); 949c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase} 959c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase 96491189f6bb81827a0c8e343f89420a9bcd2e62aeChet HaaseDisplayList::DisplayList(const DisplayListRenderer& recorder) : 979420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mTransformMatrix(NULL), mTransformCamera(NULL), mTransformMatrix3D(NULL), 989420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mStaticMatrix(NULL), mAnimationMatrix(NULL) { 99491189f6bb81827a0c8e343f89420a9bcd2e62aeChet Haase 1005977baa1fa24125c148a72699b53e62abaf08960Chet Haase initFromDisplayListRenderer(recorder); 1015977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 1025977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1035977baa1fa24125c148a72699b53e62abaf08960Chet HaaseDisplayList::~DisplayList() { 104d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase clearResources(); 105d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase} 106d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase 107a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haasevoid DisplayList::initProperties() { 108a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mLeft = 0; 109a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTop = 0; 110b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase mRight = 0; 111a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mBottom = 0; 112a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mClipChildren = true; 113a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mAlpha = 1; 114a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mMultipliedAlpha = 255; 115db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase mHasOverlappingRendering = true; 116a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTranslationX = 0; 117a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTranslationY = 0; 118a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mRotation = 0; 119a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mRotationX = 0; 120a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mRotationY= 0; 121a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mScaleX = 1; 122a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mScaleY = 1; 123a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPivotX = 0; 124a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPivotY = 0; 125b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase mCameraDistance = 0; 126a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mMatrixDirty = false; 127a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mMatrixFlags = 0; 128a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPrevWidth = -1; 129a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPrevHeight = -1; 130a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mWidth = 0; 131a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mHeight = 0; 132a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPivotExplicitlySet = false; 133a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mCaching = false; 134a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 135a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 136bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guyvoid DisplayList::destroyDisplayListDeferred(DisplayList* displayList) { 137bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guy if (displayList) { 138bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guy DISPLAY_LIST_LOGD("Deferring display list destruction"); 139bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guy Caches::getInstance().deleteDisplayListDeferred(displayList); 140bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guy } 141bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guy} 142bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guy 143d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haasevoid DisplayList::clearResources() { 1445977baa1fa24125c148a72699b53e62abaf08960Chet Haase sk_free((void*) mReader.base()); 1455977baa1fa24125c148a72699b53e62abaf08960Chet Haase 146866ed817d0adf5b874eff277b4a4d2bcc6f61830Chet Haase if (USE_DISPLAY_LIST_PROPERTIES) { 1479420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase delete mTransformMatrix; 1489420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase delete mTransformCamera; 1499420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase delete mTransformMatrix3D; 1509420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase delete mStaticMatrix; 1519420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase delete mAnimationMatrix; 1529420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mTransformMatrix = NULL; 1539420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mTransformCamera = NULL; 1549420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mTransformMatrix3D = NULL; 1559420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mStaticMatrix = NULL; 1569420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mAnimationMatrix = NULL; 157a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 158a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 1595977baa1fa24125c148a72699b53e62abaf08960Chet Haase Caches& caches = Caches::getInstance(); 1605977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1615977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mBitmapResources.size(); i++) { 1625977baa1fa24125c148a72699b53e62abaf08960Chet Haase caches.resourceCache.decrementRefcount(mBitmapResources.itemAt(i)); 1635977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1645977baa1fa24125c148a72699b53e62abaf08960Chet Haase mBitmapResources.clear(); 1655977baa1fa24125c148a72699b53e62abaf08960Chet Haase 166d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy for (size_t i = 0; i < mFilterResources.size(); i++) { 167d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.decrementRefcount(mFilterResources.itemAt(i)); 168d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy } 169d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy mFilterResources.clear(); 170d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 17124c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy for (size_t i = 0; i < mShaders.size(); i++) { 17243ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy caches.resourceCache.decrementRefcount(mShaders.itemAt(i)); 173d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.destructor(mShaders.itemAt(i)); 1745977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 17524c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaders.clear(); 1765977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1775977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mPaints.size(); i++) { 1785977baa1fa24125c148a72699b53e62abaf08960Chet Haase delete mPaints.itemAt(i); 1795977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1805977baa1fa24125c148a72699b53e62abaf08960Chet Haase mPaints.clear(); 1815977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1822fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy for (size_t i = 0; i < mPaths.size(); i++) { 1831af23a32d879db330eb5a08b21090ec60b604a32Romain Guy SkPath* path = mPaths.itemAt(i); 1841af23a32d879db330eb5a08b21090ec60b604a32Romain Guy caches.pathCache.remove(path); 1851af23a32d879db330eb5a08b21090ec60b604a32Romain Guy delete path; 1862fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy } 1872fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPaths.clear(); 1882fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy 1895977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mMatrices.size(); i++) { 1905977baa1fa24125c148a72699b53e62abaf08960Chet Haase delete mMatrices.itemAt(i); 1915977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1925977baa1fa24125c148a72699b53e62abaf08960Chet Haase mMatrices.clear(); 1935977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 1945977baa1fa24125c148a72699b53e62abaf08960Chet Haase 195d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haasevoid DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorder, bool reusing) { 196b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy const SkWriter32& writer = recorder.writeStream(); 197b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy init(); 198b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 199b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy if (writer.size() == 0) { 200b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return; 201b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 202b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 203d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase if (reusing) { 204d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase // re-using display list - clear out previous allocations 205d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase clearResources(); 206d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase } 207a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase initProperties(); 208d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase 20965b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy mSize = writer.size(); 21065b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy void* buffer = sk_malloc_throw(mSize); 211b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy writer.flatten(buffer); 21265b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy mReader.setMemory(buffer, mSize); 213b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 2145c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Caches& caches = Caches::getInstance(); 215b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 2165c13d89c1332fcc499379b9064b891187b75ca32Chet Haase const Vector<SkBitmap*> &bitmapResources = recorder.getBitmapResources(); 2175c13d89c1332fcc499379b9064b891187b75ca32Chet Haase for (size_t i = 0; i < bitmapResources.size(); i++) { 2185c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkBitmap* resource = bitmapResources.itemAt(i); 2195c13d89c1332fcc499379b9064b891187b75ca32Chet Haase mBitmapResources.add(resource); 2205c13d89c1332fcc499379b9064b891187b75ca32Chet Haase caches.resourceCache.incrementRefcount(resource); 221b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 222d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 223d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy const Vector<SkiaColorFilter*> &filterResources = recorder.getFilterResources(); 224d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy for (size_t i = 0; i < filterResources.size(); i++) { 225d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy SkiaColorFilter* resource = filterResources.itemAt(i); 226d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy mFilterResources.add(resource); 227d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.incrementRefcount(resource); 228d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy } 229d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 23024c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy const Vector<SkiaShader*> &shaders = recorder.getShaders(); 23124c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy for (size_t i = 0; i < shaders.size(); i++) { 232d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy SkiaShader* resource = shaders.itemAt(i); 233d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy mShaders.add(resource); 234d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.incrementRefcount(resource); 235b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 236b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 237d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase const Vector<SkPaint*> &paints = recorder.getPaints(); 238d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase for (size_t i = 0; i < paints.size(); i++) { 239d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mPaints.add(paints.itemAt(i)); 240d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase } 241d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 2422fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy const Vector<SkPath*> &paths = recorder.getPaths(); 2432fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy for (size_t i = 0; i < paths.size(); i++) { 2442fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPaths.add(paths.itemAt(i)); 2452fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy } 2462fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy 247d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase const Vector<SkMatrix*> &matrices = recorder.getMatrices(); 248d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase for (size_t i = 0; i < matrices.size(); i++) { 249d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mMatrices.add(matrices.itemAt(i)); 250d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase } 251b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 252b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 253b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyvoid DisplayList::init() { 25465b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy mSize = 0; 25504c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy mIsRenderable = true; 25665b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy} 25765b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy 25865b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guysize_t DisplayList::getSize() { 25965b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy return mSize; 260b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 261b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 262ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase/** 263ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * This function is a simplified version of replay(), where we simply retrieve and log the 264ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * display list. This function should remain in sync with the replay() function. 265ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase */ 266ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haasevoid DisplayList::output(OpenGLRenderer& renderer, uint32_t level) { 267ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase TextContainer text; 268ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 269ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t count = (level + 1) * 2; 270ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase char indent[count + 1]; 271ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase for (uint32_t i = 0; i < count; i++) { 272ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase indent[i] = ' '; 273ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 274ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase indent[count] = '\0'; 27513631f3da855f200a151e7837ed9f6b079622b58Romain Guy ALOGD("%sStart display list (%p, %s)", (char*) indent + 2, this, mName.string()); 276ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 277ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int saveCount = renderer.getSaveCount() - 1; 278ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 279a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase outputViewProperties(renderer, (char*) indent); 280ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase mReader.rewind(); 281ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 282ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase while (!mReader.eof()) { 283ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int op = mReader.readInt(); 28433f6beb10f98e8ba96250e284876d607055d278dRomain Guy if (op & OP_MAY_BE_SKIPPED_MASK) { 28533f6beb10f98e8ba96250e284876d607055d278dRomain Guy int skip = mReader.readInt(); 28633f6beb10f98e8ba96250e284876d607055d278dRomain Guy ALOGD("%sSkip %d", (char*) indent, skip); 28733f6beb10f98e8ba96250e284876d607055d278dRomain Guy op &= ~OP_MAY_BE_SKIPPED_MASK; 288a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 289ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 290ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase switch (op) { 291ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawGLFunction: { 292ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase Functor *functor = (Functor *) getInt(); 2935baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p", (char*) indent, OP_NAMES[op], functor); 294ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 295ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 296ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Save: { 297ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int rendererNum = getInt(); 2985baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %d", (char*) indent, OP_NAMES[op], rendererNum); 299ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 300ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 301ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Restore: { 3025baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 303ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 304ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 305ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case RestoreToCount: { 306ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int restoreCount = saveCount + getInt(); 3075baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %d", (char*) indent, OP_NAMES[op], restoreCount); 308ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 309ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 310ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SaveLayer: { 311ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 312ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 313ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 314ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 3155ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 316ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int flags = getInt(); 3175baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p, 0x%x", (char*) indent, 318a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase OP_NAMES[op], f1, f2, f3, f4, paint, flags); 319ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 320ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 321ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SaveLayerAlpha: { 322ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 323ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 324ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 325ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 326ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int alpha = getInt(); 327ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int flags = getInt(); 3285baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", (char*) indent, 329a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase OP_NAMES[op], f1, f2, f3, f4, alpha, flags); 330ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 331ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 332ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Translate: { 333ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 334ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 3355baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], f1, f2); 336ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 337ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 338ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Rotate: { 339ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float rotation = getFloat(); 3405baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f", (char*) indent, OP_NAMES[op], rotation); 341ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 342ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 343ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Scale: { 344ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float sx = getFloat(); 345ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float sy = getFloat(); 3465baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 347ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 348ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 349ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Skew: { 350ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float sx = getFloat(); 351ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float sy = getFloat(); 3525baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 353ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 354ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 355ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SetMatrix: { 356ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkMatrix* matrix = getMatrix(); 3575baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p", (char*) indent, OP_NAMES[op], matrix); 358ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 359ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 360ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ConcatMatrix: { 361ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkMatrix* matrix = getMatrix(); 362a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase ALOGD("%s%s new concat %p: [%f, %f, %f] [%f, %f, %f] [%f, %f, %f]", 363a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], matrix, matrix->get(0), matrix->get(1), 364a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase matrix->get(2), matrix->get(3), matrix->get(4), matrix->get(5), 365a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase matrix->get(6), matrix->get(7), matrix->get(8)); 366ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 367ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 368ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ClipRect: { 369ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 370ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 371ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 372ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 373ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int regionOp = getInt(); 3745baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d", (char*) indent, OP_NAMES[op], 375a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase f1, f2, f3, f4, regionOp); 376ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 377ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 378ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawDisplayList: { 379ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase DisplayList* displayList = getDisplayList(); 380ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t width = getUInt(); 381ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t height = getUInt(); 38233f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t flags = getInt(); 38333f6beb10f98e8ba96250e284876d607055d278dRomain Guy ALOGD("%s%s %p, %dx%d, 0x%x %d", (char*) indent, OP_NAMES[op], 384a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase displayList, width, height, flags, level + 1); 385ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase renderer.outputDisplayList(displayList, level + 1); 386ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 387ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 388ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawLayer: { 389ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase Layer* layer = (Layer*) getInt(); 390ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float x = getFloat(); 391ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float y = getFloat(); 3925ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 3935baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 394a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase layer, x, y, paint); 395ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 396ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 397ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawBitmap: { 398ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkBitmap* bitmap = getBitmap(); 399ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float x = getFloat(); 400ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float y = getFloat(); 4015ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 4025baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 403a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase bitmap, x, y, paint); 404ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 405ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 406ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawBitmapMatrix: { 407ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkBitmap* bitmap = getBitmap(); 408ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkMatrix* matrix = getMatrix(); 4095ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 4105baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p, %p, %p", (char*) indent, OP_NAMES[op], 411a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase bitmap, matrix, paint); 412ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 413ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 414ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawBitmapRect: { 415ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkBitmap* bitmap = getBitmap(); 416ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 417ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 418ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 419ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 420ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f5 = getFloat(); 421ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f6 = getFloat(); 422ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f7 = getFloat(); 423ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f8 = getFloat(); 4245ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 4255baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 426a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], bitmap, f1, f2, f3, f4, f5, f6, f7, f8, paint); 427ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 428ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 429ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawBitmapMesh: { 430ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int verticesCount = 0; 431ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t colorsCount = 0; 432ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkBitmap* bitmap = getBitmap(); 433ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t meshWidth = getInt(); 434ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t meshHeight = getInt(); 435ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float* vertices = getFloats(verticesCount); 436ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase bool hasColors = getInt(); 437ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int* colors = hasColors ? getInts(colorsCount) : NULL; 4385ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 4395baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 440ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 441ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 442ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawPatch: { 443ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int32_t* xDivs = NULL; 444ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int32_t* yDivs = NULL; 445ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t* colors = NULL; 446ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t xDivsCount = 0; 447ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t yDivsCount = 0; 448ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int8_t numColors = 0; 449ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkBitmap* bitmap = getBitmap(); 450ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase xDivs = getInts(xDivsCount); 451ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase yDivs = getInts(yDivsCount); 452ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase colors = getUInts(numColors); 453a62f172215727a1e00af0cb934904e00926a86c9Romain Guy float left = getFloat(); 454a62f172215727a1e00af0cb934904e00926a86c9Romain Guy float top = getFloat(); 455a62f172215727a1e00af0cb934904e00926a86c9Romain Guy float right = getFloat(); 456a62f172215727a1e00af0cb934904e00926a86c9Romain Guy float bottom = getFloat(); 4575ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 4585baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f", (char*) indent, OP_NAMES[op], 459a62f172215727a1e00af0cb934904e00926a86c9Romain Guy left, top, right, bottom); 460ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 461ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 462ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawColor: { 463ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int color = getInt(); 464ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int xferMode = getInt(); 4655baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s 0x%x %d", (char*) indent, OP_NAMES[op], color, xferMode); 466ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 467ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 468ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawRect: { 469ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 470ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 471ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 472ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 4735ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 4745baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 475a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase f1, f2, f3, f4, paint); 476ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 477ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 478ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawRoundRect: { 479ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 480ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 481ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 482ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 483ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f5 = getFloat(); 484ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f6 = getFloat(); 4855ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 4865baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 487a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, paint); 488ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 489ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 490ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawCircle: { 491ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 492ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 493ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 4945ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 4955baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %p", 496a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, paint); 497ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 498ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 499ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawOval: { 500ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 501ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 502ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 503ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 5045ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5055baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", 506a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, paint); 507ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 508ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 509ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawArc: { 510ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 511ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 512ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 513ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 514ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f5 = getFloat(); 515ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f6 = getFloat(); 516ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int i1 = getInt(); 5175ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5185baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %d, %p", 519a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, i1, paint); 520ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 521ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 522ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawPath: { 523ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPath* path = getPath(); 5245ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5255baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p, %p", (char*) indent, OP_NAMES[op], path, paint); 526ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 527ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 528ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawLines: { 529ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int count = 0; 530ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float* points = getFloats(count); 5315ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5325baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 533ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 534ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 535ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawPoints: { 536ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int count = 0; 537ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float* points = getFloats(count); 5385ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5395baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 540ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 541ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 542ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawText: { 543ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase getText(&text); 544325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy int32_t count = getInt(); 545ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float x = getFloat(); 546ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float y = getFloat(); 5475ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 548cac5fd3e09e9dc918753d4aff624bf29a367ade3Romain Guy float length = getFloat(); 5495baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %s, %d, %d, %.2f, %.2f, %p, %.2f", (char*) indent, OP_NAMES[op], 550a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase text.text(), text.length(), count, x, y, paint, length); 551ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 552ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 553325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy case DrawTextOnPath: { 554325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy getText(&text); 555325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy int32_t count = getInt(); 556325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy SkPath* path = getPath(); 557325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy float hOffset = getFloat(); 558325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy float vOffset = getFloat(); 559325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy SkPaint* paint = getPaint(renderer); 560325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy ALOGD("%s%s %s, %d, %d, %p", (char*) indent, OP_NAMES[op], 561325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy text.text(), text.length(), count, paint); 562325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy } 563325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy break; 564eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy case DrawPosText: { 565eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy getText(&text); 566eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy int count = getInt(); 567eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy int positionsCount = 0; 568eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy float* positions = getFloats(positionsCount); 5695ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 570eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy ALOGD("%s%s %s, %d, %d, %p", (char*) indent, OP_NAMES[op], 571a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase text.text(), text.length(), count, paint); 572eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy } 573ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ResetShader: { 5745baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 575ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 576ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 577ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SetupShader: { 578ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkiaShader* shader = getShader(); 5795baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p", (char*) indent, OP_NAMES[op], shader); 580ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 581ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 582ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ResetColorFilter: { 5835baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 584ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 585ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 586ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SetupColorFilter: { 587ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkiaColorFilter *colorFilter = getColorFilter(); 5885baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p", (char*) indent, OP_NAMES[op], colorFilter); 589ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 590ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 591ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ResetShadow: { 5925baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 593ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 594ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 595ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SetupShadow: { 596ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float radius = getFloat(); 597ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float dx = getFloat(); 598ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float dy = getFloat(); 599ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int color = getInt(); 6005baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, 0x%x", (char*) indent, OP_NAMES[op], 601a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase radius, dx, dy, color); 602ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 603ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 6045ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy case ResetPaintFilter: { 6055ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 6065ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy } 6075ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy break; 6085ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy case SetupPaintFilter: { 6095ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy int clearBits = getInt(); 6105ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy int setBits = getInt(); 6115ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy ALOGD("%s%s 0x%x, 0x%x", (char*) indent, OP_NAMES[op], clearBits, setBits); 6125ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy } 6135ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy break; 614ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase default: 6155baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("Display List error: op not handled: %s%s", 616a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op]); 617ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 618ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 619ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 620a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase ALOGD("%sDone (%p, %s)", (char*) indent + 2, this, mName.string()); 621a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 622a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 623a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haasevoid DisplayList::updateMatrix() { 624a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (mMatrixDirty) { 625a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (!mTransformMatrix) { 626a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix = new SkMatrix(); 627a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 628a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (mMatrixFlags == 0 || mMatrixFlags == TRANSLATION) { 629a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->reset(); 630a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } else { 631a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (!mPivotExplicitlySet) { 632a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (mWidth != mPrevWidth || mHeight != mPrevHeight) { 633a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPrevWidth = mWidth; 634a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPrevHeight = mHeight; 635a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPivotX = mPrevWidth / 2; 636a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPivotY = mPrevHeight / 2; 637a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 638a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 639a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if ((mMatrixFlags & ROTATION_3D) == 0) { 640a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->setTranslate(mTranslationX, mTranslationY); 641a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->preRotate(mRotation, mPivotX, mPivotY); 642a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->preScale(mScaleX, mScaleY, mPivotX, mPivotY); 643a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } else { 644a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (!mTransformCamera) { 645a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera = new Sk3DView(); 646a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix3D = new SkMatrix(); 647a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 648a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->reset(); 649a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera->save(); 650a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->preScale(mScaleX, mScaleY, mPivotX, mPivotY); 651a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera->rotateX(mRotationX); 652a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera->rotateY(mRotationY); 653a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera->rotateZ(-mRotation); 654a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera->getMatrix(mTransformMatrix3D); 655a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix3D->preTranslate(-mPivotX, -mPivotY); 656a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix3D->postTranslate(mPivotX + mTranslationX, 657a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPivotY + mTranslationY); 658a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->postConcat(*mTransformMatrix3D); 659a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera->restore(); 660a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 661a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 662a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mMatrixDirty = false; 663a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 664a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 665a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 666a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haasevoid DisplayList::outputViewProperties(OpenGLRenderer& renderer, char* indent) { 667a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (USE_DISPLAY_LIST_PROPERTIES) { 668a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase updateMatrix(); 669a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (mLeft != 0 || mTop != 0) { 6709420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase ALOGD("%s%s %d, %d", indent, "Translate (left, top)", mLeft, mTop); 6719420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase } 6729420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase if (mStaticMatrix) { 6739420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase ALOGD("%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 6749420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase indent, "ConcatMatrix (static)", mStaticMatrix, 6759420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mStaticMatrix->get(0), mStaticMatrix->get(1), 6769420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mStaticMatrix->get(2), mStaticMatrix->get(3), 6779420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mStaticMatrix->get(4), mStaticMatrix->get(5), 6789420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mStaticMatrix->get(6), mStaticMatrix->get(7), 6799420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mStaticMatrix->get(8)); 6809420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase } 6819420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase if (mAnimationMatrix) { 6829420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase ALOGD("%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 6839420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase indent, "ConcatMatrix (animation)", mAnimationMatrix, 6849420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mAnimationMatrix->get(0), mAnimationMatrix->get(1), 6859420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mAnimationMatrix->get(2), mAnimationMatrix->get(3), 6869420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mAnimationMatrix->get(4), mAnimationMatrix->get(5), 6879420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mAnimationMatrix->get(6), mAnimationMatrix->get(7), 6889420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mAnimationMatrix->get(8)); 689a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 690a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (mMatrixFlags != 0) { 691a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (mMatrixFlags == TRANSLATION) { 692a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase ALOGD("%s%s %f, %f", indent, "Translate", mTranslationX, mTranslationY); 693a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } else { 694a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase ALOGD("%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 695a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase indent, "ConcatMatrix", mTransformMatrix, 696a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->get(0), mTransformMatrix->get(1), 697a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->get(2), mTransformMatrix->get(3), 698a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->get(4), mTransformMatrix->get(5), 699a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->get(6), mTransformMatrix->get(7), 700a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->get(8)); 701a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 702a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 703b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase if (mAlpha < 1 && !mCaching) { 7049d1992deaeb3d60d5928f05b649a2cc654ba98a3Chet Haase // TODO: should be able to store the size of a DL at record time and not 7059d1992deaeb3d60d5928f05b649a2cc654ba98a3Chet Haase // have to pass it into this call. In fact, this information might be in the 7069d1992deaeb3d60d5928f05b649a2cc654ba98a3Chet Haase // location/size info that we store with the new native transform data. 7079d1992deaeb3d60d5928f05b649a2cc654ba98a3Chet Haase int flags = SkCanvas::kHasAlphaLayer_SaveFlag; 7089d1992deaeb3d60d5928f05b649a2cc654ba98a3Chet Haase if (mClipChildren) { 7099d1992deaeb3d60d5928f05b649a2cc654ba98a3Chet Haase flags |= SkCanvas::kClipToLayer_SaveFlag; 7109d1992deaeb3d60d5928f05b649a2cc654ba98a3Chet Haase } 7119d1992deaeb3d60d5928f05b649a2cc654ba98a3Chet Haase ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", indent, "SaveLayerAlpha", 7129d1992deaeb3d60d5928f05b649a2cc654ba98a3Chet Haase (float) 0, (float) 0, (float) mRight - mLeft, (float) mBottom - mTop, 7139d1992deaeb3d60d5928f05b649a2cc654ba98a3Chet Haase mMultipliedAlpha, flags); 7149d1992deaeb3d60d5928f05b649a2cc654ba98a3Chet Haase } 715a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (mClipChildren) { 716a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase ALOGD("%s%s %.2f, %.2f, %.2f, %.2f", indent, "ClipRect", 0.0f, 0.0f, 717a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (float) mRight - mLeft, (float) mBottom - mTop); 718a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 719a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 720a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 721ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 722a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haasevoid DisplayList::setViewProperties(OpenGLRenderer& renderer, uint32_t width, uint32_t height, 723a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase uint32_t level) { 724a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (USE_DISPLAY_LIST_PROPERTIES) { 725a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase#if DEBUG_DISPLAY_LIST 726a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase uint32_t count = (level + 1) * 2; 727a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase char indent[count + 1]; 728a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase for (uint32_t i = 0; i < count; i++) { 729a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase indent[i] = ' '; 730a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 731a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase indent[count] = '\0'; 732a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase#endif 733a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase updateMatrix(); 734a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (mLeft != 0 || mTop != 0) { 7359420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase DISPLAY_LIST_LOGD("%s%s %d, %d", indent, "Translate (left, top)", mLeft, mTop); 736a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase renderer.translate(mLeft, mTop); 737a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 7389420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase if (mStaticMatrix) { 7399420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase DISPLAY_LIST_LOGD( 7409420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase "%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 7419420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase indent, "ConcatMatrix (static)", mStaticMatrix, 7429420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mStaticMatrix->get(0), mStaticMatrix->get(1), 7439420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mStaticMatrix->get(2), mStaticMatrix->get(3), 7449420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mStaticMatrix->get(4), mStaticMatrix->get(5), 7459420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mStaticMatrix->get(6), mStaticMatrix->get(7), 7469420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mStaticMatrix->get(8)); 7479420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase renderer.concatMatrix(mStaticMatrix); 7489420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase } else if (mAnimationMatrix) { 7499420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase DISPLAY_LIST_LOGD( 7509420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase "%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 7519420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase indent, "ConcatMatrix (animation)", mAnimationMatrix, 7529420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mAnimationMatrix->get(0), mAnimationMatrix->get(1), 7539420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mAnimationMatrix->get(2), mAnimationMatrix->get(3), 7549420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mAnimationMatrix->get(4), mAnimationMatrix->get(5), 7559420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mAnimationMatrix->get(6), mAnimationMatrix->get(7), 7569420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mAnimationMatrix->get(8)); 7579420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase renderer.concatMatrix(mAnimationMatrix); 758a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 759a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (mMatrixFlags != 0) { 760a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (mMatrixFlags == TRANSLATION) { 761a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase DISPLAY_LIST_LOGD("%s%s %f, %f", indent, "Translate", mTranslationX, mTranslationY); 762a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase renderer.translate(mTranslationX, mTranslationY); 763a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } else { 764a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase DISPLAY_LIST_LOGD( 765a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase "%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 766a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase indent, "ConcatMatrix", mTransformMatrix, 767a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->get(0), mTransformMatrix->get(1), 768a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->get(2), mTransformMatrix->get(3), 769a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->get(4), mTransformMatrix->get(5), 770a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->get(6), mTransformMatrix->get(7), 771a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->get(8)); 772a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase renderer.concatMatrix(mTransformMatrix); 773a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 774a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 7759d1992deaeb3d60d5928f05b649a2cc654ba98a3Chet Haase if (mAlpha < 1 && !mCaching) { 776db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase if (!mHasOverlappingRendering) { 777db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase DISPLAY_LIST_LOGD("%s%s %.2f", indent, "SetAlpha", mAlpha); 778db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase renderer.setAlpha(mAlpha); 779db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase } else { 780db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase // TODO: should be able to store the size of a DL at record time and not 781db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase // have to pass it into this call. In fact, this information might be in the 782db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase // location/size info that we store with the new native transform data. 783db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase int flags = SkCanvas::kHasAlphaLayer_SaveFlag; 784db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase if (mClipChildren) { 785db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase flags |= SkCanvas::kClipToLayer_SaveFlag; 786db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase } 787db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", indent, "SaveLayerAlpha", 788db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase (float) 0, (float) 0, (float) mRight - mLeft, (float) mBottom - mTop, 789db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase mMultipliedAlpha, flags); 790db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase renderer.saveLayerAlpha(0, 0, mRight - mLeft, mBottom - mTop, 791db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase mMultipliedAlpha, flags); 7929d1992deaeb3d60d5928f05b649a2cc654ba98a3Chet Haase } 7939d1992deaeb3d60d5928f05b649a2cc654ba98a3Chet Haase } 794a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (mClipChildren) { 795a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f", indent, "ClipRect", 0.0f, 0.0f, 796a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (float) mRight - mLeft, (float) mBottom - mTop); 797a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase renderer.clipRect(0, 0, mRight - mLeft, mBottom - mTop, 798a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase SkRegion::kIntersect_Op); 799a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 800a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 801a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 802a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 803ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase/** 804ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * Changes to replay(), specifically those involving opcode or parameter changes, should be mimicked 805ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * in the output() function, since that function processes the same list of opcodes for the 806ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * purposes of logging display list info for a given view. 807ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase */ 8086554943a1dd6854c0f4976900956e556767b49e1Romain Guystatus_t DisplayList::replay(OpenGLRenderer& renderer, uint32_t width, 809a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase uint32_t height, Rect& dirty, int32_t flags, uint32_t level) { 8106554943a1dd6854c0f4976900956e556767b49e1Romain Guy status_t drawGlStatus = 0; 811b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy TextContainer text; 812b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mReader.rewind(); 813b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 814ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#if DEBUG_DISPLAY_LIST 815ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy uint32_t count = (level + 1) * 2; 816ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy char indent[count + 1]; 817ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy for (uint32_t i = 0; i < count; i++) { 818ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy indent[i] = ' '; 819ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy } 820ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy indent[count] = '\0'; 82113631f3da855f200a151e7837ed9f6b079622b58Romain Guy DISPLAY_LIST_LOGD("%sStart display list (%p, %s)", (char*) indent + 2, this, mName.string()); 822ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#endif 823b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 82413631f3da855f200a151e7837ed9f6b079622b58Romain Guy renderer.startMark(mName.string()); 825a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase int restoreTo = 0; 826a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (USE_DISPLAY_LIST_PROPERTIES) { 827a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase DISPLAY_LIST_LOGD("%s%s %d", indent, "Save", 828a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); 829a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase restoreTo = renderer.save(SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); 830a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 831a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase setViewProperties(renderer, width, height, level); 832b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase if (USE_DISPLAY_LIST_PROPERTIES && renderer.quickReject(0, 0, width, height)) { 833b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, "RestoreToCount", restoreTo); 834b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase renderer.restoreToCount(restoreTo); 835b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase renderer.endMark(); 836b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase return false; 837b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase } 83813631f3da855f200a151e7837ed9f6b079622b58Romain Guy 8399c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase DisplayListLogBuffer& logBuffer = DisplayListLogBuffer::getInstance(); 840ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy int saveCount = renderer.getSaveCount() - 1; 841b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy while (!mReader.eof()) { 8425b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int op = mReader.readInt(); 84333f6beb10f98e8ba96250e284876d607055d278dRomain Guy if (op & OP_MAY_BE_SKIPPED_MASK) { 844390f882f8905e8d1ac0d4b7f2e01aa04dccc3c16Romain Guy int32_t skip = mReader.readInt(); 84533f6beb10f98e8ba96250e284876d607055d278dRomain Guy if (CC_LIKELY(flags & kReplayFlag_ClipChildren)) { 84633f6beb10f98e8ba96250e284876d607055d278dRomain Guy mReader.skip(skip); 84733f6beb10f98e8ba96250e284876d607055d278dRomain Guy DISPLAY_LIST_LOGD("%s%s skipping %d bytes", (char*) indent, 84833f6beb10f98e8ba96250e284876d607055d278dRomain Guy OP_NAMES[op & ~OP_MAY_BE_SKIPPED_MASK], skip); 84933f6beb10f98e8ba96250e284876d607055d278dRomain Guy continue; 85033f6beb10f98e8ba96250e284876d607055d278dRomain Guy } else { 85133f6beb10f98e8ba96250e284876d607055d278dRomain Guy op &= ~OP_MAY_BE_SKIPPED_MASK; 85233f6beb10f98e8ba96250e284876d607055d278dRomain Guy } 85333f6beb10f98e8ba96250e284876d607055d278dRomain Guy } 8549c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase logBuffer.writeCommand(level, op); 855ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 8565b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy switch (op) { 857daf98e941e140e8739458126640183b9f296a2abChet Haase case DrawGLFunction: { 858daf98e941e140e8739458126640183b9f296a2abChet Haase Functor *functor = (Functor *) getInt(); 859daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], functor); 86013631f3da855f200a151e7837ed9f6b079622b58Romain Guy renderer.startMark("GL functor"); 8616554943a1dd6854c0f4976900956e556767b49e1Romain Guy drawGlStatus |= renderer.callDrawGLFunction(functor, dirty); 86213631f3da855f200a151e7837ed9f6b079622b58Romain Guy renderer.endMark(); 863daf98e941e140e8739458126640183b9f296a2abChet Haase } 864daf98e941e140e8739458126640183b9f296a2abChet Haase break; 865b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Save: { 86633f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t rendererNum = getInt(); 867daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, OP_NAMES[op], rendererNum); 868daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.save(rendererNum); 869b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 870b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 871b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Restore: { 872daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 873b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.restore(); 874b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 875b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 876b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case RestoreToCount: { 87733f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t restoreCount = saveCount + getInt(); 878daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, OP_NAMES[op], restoreCount); 879daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.restoreToCount(restoreCount); 880b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 881b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 882b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SaveLayer: { 883daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 884daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 885daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 886daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 8875ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 88833f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t flags = getInt(); 889daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p, 0x%x", (char*) indent, 890a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase OP_NAMES[op], f1, f2, f3, f4, paint, flags); 891daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.saveLayer(f1, f2, f3, f4, paint, flags); 892b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 893b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 8945b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy case SaveLayerAlpha: { 895daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 896daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 897daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 898daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 89933f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t alpha = getInt(); 90033f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t flags = getInt(); 901daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", (char*) indent, 902a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase OP_NAMES[op], f1, f2, f3, f4, alpha, flags); 903daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.saveLayerAlpha(f1, f2, f3, f4, alpha, flags); 9045b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy } 9055b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy break; 906b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Translate: { 907daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 908daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 909daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], f1, f2); 910daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.translate(f1, f2); 911b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 912b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 913b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Rotate: { 914daf98e941e140e8739458126640183b9f296a2abChet Haase float rotation = getFloat(); 915daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f", (char*) indent, OP_NAMES[op], rotation); 916daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.rotate(rotation); 917b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 918b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 919b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Scale: { 920daf98e941e140e8739458126640183b9f296a2abChet Haase float sx = getFloat(); 921daf98e941e140e8739458126640183b9f296a2abChet Haase float sy = getFloat(); 922daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 923daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.scale(sx, sy); 924b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 925b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 926807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy case Skew: { 927daf98e941e140e8739458126640183b9f296a2abChet Haase float sx = getFloat(); 928daf98e941e140e8739458126640183b9f296a2abChet Haase float sy = getFloat(); 929daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 930daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.skew(sx, sy); 931807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy } 932807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy break; 933b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetMatrix: { 934daf98e941e140e8739458126640183b9f296a2abChet Haase SkMatrix* matrix = getMatrix(); 935daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], matrix); 936daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setMatrix(matrix); 937b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 938b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 939b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ConcatMatrix: { 940daf98e941e140e8739458126640183b9f296a2abChet Haase SkMatrix* matrix = getMatrix(); 941a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase DISPLAY_LIST_LOGD( 942a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase "%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 943a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], matrix, 944a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase matrix->get(0), matrix->get(1), matrix->get(2), 945a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase matrix->get(3), matrix->get(4), matrix->get(5), 946a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase matrix->get(6), matrix->get(7), matrix->get(8)); 947daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.concatMatrix(matrix); 948b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 949b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 950b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ClipRect: { 951daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 952daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 953daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 954daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 95533f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t regionOp = getInt(); 956daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d", (char*) indent, OP_NAMES[op], 957a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase f1, f2, f3, f4, regionOp); 958daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.clipRect(f1, f2, f3, f4, (SkRegion::Op) regionOp); 959b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 960b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 9610fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy case DrawDisplayList: { 962daf98e941e140e8739458126640183b9f296a2abChet Haase DisplayList* displayList = getDisplayList(); 9637b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy uint32_t width = getUInt(); 9647b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy uint32_t height = getUInt(); 96533f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t flags = getInt(); 96633f6beb10f98e8ba96250e284876d607055d278dRomain Guy DISPLAY_LIST_LOGD("%s%s %p, %dx%d, 0x%x %d", (char*) indent, OP_NAMES[op], 967a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase displayList, width, height, flags, level + 1); 9686554943a1dd6854c0f4976900956e556767b49e1Romain Guy drawGlStatus |= renderer.drawDisplayList(displayList, width, 969a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase height, dirty, flags, level + 1); 9700fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy } 9710fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy break; 9726c319ca1275c8db892c39b48fc54864c949f9171Romain Guy case DrawLayer: { 973daf98e941e140e8739458126640183b9f296a2abChet Haase Layer* layer = (Layer*) getInt(); 974daf98e941e140e8739458126640183b9f296a2abChet Haase float x = getFloat(); 975daf98e941e140e8739458126640183b9f296a2abChet Haase float y = getFloat(); 9765ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 977a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (mCaching && mMultipliedAlpha < 255) { 978a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase paint->setAlpha(mMultipliedAlpha); 979a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 980daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 981a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase layer, x, y, paint); 982daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawLayer(layer, x, y, paint); 9836c319ca1275c8db892c39b48fc54864c949f9171Romain Guy } 9846c319ca1275c8db892c39b48fc54864c949f9171Romain Guy break; 985b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmap: { 986daf98e941e140e8739458126640183b9f296a2abChet Haase SkBitmap* bitmap = getBitmap(); 987daf98e941e140e8739458126640183b9f296a2abChet Haase float x = getFloat(); 988daf98e941e140e8739458126640183b9f296a2abChet Haase float y = getFloat(); 9895ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 990b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase if (mCaching && mMultipliedAlpha < 255) { 991b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase paint->setAlpha(mMultipliedAlpha); 992b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase } 993daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 994a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase bitmap, x, y, paint); 995daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawBitmap(bitmap, x, y, paint); 996b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 997b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 998b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmapMatrix: { 999daf98e941e140e8739458126640183b9f296a2abChet Haase SkBitmap* bitmap = getBitmap(); 1000daf98e941e140e8739458126640183b9f296a2abChet Haase SkMatrix* matrix = getMatrix(); 10015ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1002daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %p, %p", (char*) indent, OP_NAMES[op], 1003a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase bitmap, matrix, paint); 1004daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawBitmap(bitmap, matrix, paint); 1005b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1006b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1007b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmapRect: { 1008daf98e941e140e8739458126640183b9f296a2abChet Haase SkBitmap* bitmap = getBitmap(); 1009daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 1010daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 1011daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 1012daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 1013daf98e941e140e8739458126640183b9f296a2abChet Haase float f5 = getFloat(); 1014daf98e941e140e8739458126640183b9f296a2abChet Haase float f6 = getFloat(); 1015daf98e941e140e8739458126640183b9f296a2abChet Haase float f7 = getFloat(); 1016daf98e941e140e8739458126640183b9f296a2abChet Haase float f8 = getFloat(); 10175ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1018daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 1019a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], bitmap, 1020a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase f1, f2, f3, f4, f5, f6, f7, f8,paint); 1021daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawBitmap(bitmap, f1, f2, f3, f4, f5, f6, f7, f8, paint); 1022b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1023b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 10245a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy case DrawBitmapMesh: { 102533f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t verticesCount = 0; 10265a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t colorsCount = 0; 10275a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 10285a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy SkBitmap* bitmap = getBitmap(); 10295a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t meshWidth = getInt(); 10305a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t meshHeight = getInt(); 10315a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy float* vertices = getFloats(verticesCount); 10325a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy bool hasColors = getInt(); 103333f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t* colors = hasColors ? getInts(colorsCount) : NULL; 10345ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 10355a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 1036daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 10379ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy renderer.drawBitmapMesh(bitmap, meshWidth, meshHeight, vertices, colors, paint); 10385a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } 1039a566b7c3aada08d37cf08096c972e3e641bed773Romain Guy break; 1040b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawPatch: { 1041b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int32_t* xDivs = NULL; 1042b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int32_t* yDivs = NULL; 10434bb942083a0d4db746adf95349108dd8ef842e32Romain Guy uint32_t* colors = NULL; 1044b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy uint32_t xDivsCount = 0; 1045b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy uint32_t yDivsCount = 0; 10464bb942083a0d4db746adf95349108dd8ef842e32Romain Guy int8_t numColors = 0; 1047b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1048b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkBitmap* bitmap = getBitmap(); 1049b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1050b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy xDivs = getInts(xDivsCount); 1051b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy yDivs = getInts(yDivsCount); 10524bb942083a0d4db746adf95349108dd8ef842e32Romain Guy colors = getUInts(numColors); 1053b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 10549ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float left = getFloat(); 10559ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float top = getFloat(); 10569ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float right = getFloat(); 10579ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float bottom = getFloat(); 10585ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 10599ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy 1060daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 10614bb942083a0d4db746adf95349108dd8ef842e32Romain Guy renderer.drawPatch(bitmap, xDivs, yDivs, colors, xDivsCount, yDivsCount, 10629ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy numColors, left, top, right, bottom, paint); 1063b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1064b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1065b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawColor: { 106633f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t color = getInt(); 106733f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t xferMode = getInt(); 1068daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s 0x%x %d", (char*) indent, OP_NAMES[op], color, xferMode); 1069daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawColor(color, (SkXfermode::Mode) xferMode); 1070b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1071b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1072b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawRect: { 1073daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 1074daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 1075daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 1076daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 10775ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1078daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 1079a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase f1, f2, f3, f4, paint); 1080daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawRect(f1, f2, f3, f4, paint); 1081b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1082b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 108301d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy case DrawRoundRect: { 1084daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 1085daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 1086daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 1087daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 1088daf98e941e140e8739458126640183b9f296a2abChet Haase float f5 = getFloat(); 1089daf98e941e140e8739458126640183b9f296a2abChet Haase float f6 = getFloat(); 10905ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1091daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 1092a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, paint); 1093daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawRoundRect(f1, f2, f3, f4, f5, f6, paint); 109401d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy } 109501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy break; 109601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy case DrawCircle: { 1097daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 1098daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 1099daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 11005ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1101daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %p", 1102a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, paint); 1103daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawCircle(f1, f2, f3, paint); 110401d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy } 110501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy break; 1106c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy case DrawOval: { 1107daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 1108daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 1109daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 1110daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 11115ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1112daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", 1113a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, paint); 1114daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawOval(f1, f2, f3, f4, paint); 1115c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy } 1116c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy break; 11178b2f5267f16c295f12faab810527cd6311997e34Romain Guy case DrawArc: { 1118daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 1119daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 1120daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 1121daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 1122daf98e941e140e8739458126640183b9f296a2abChet Haase float f5 = getFloat(); 1123daf98e941e140e8739458126640183b9f296a2abChet Haase float f6 = getFloat(); 112433f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t i1 = getInt(); 11255ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1126daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %d, %p", 1127a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, i1, paint); 1128daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawArc(f1, f2, f3, f4, f5, f6, i1 == 1, paint); 11298b2f5267f16c295f12faab810527cd6311997e34Romain Guy } 11308b2f5267f16c295f12faab810527cd6311997e34Romain Guy break; 1131b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawPath: { 1132daf98e941e140e8739458126640183b9f296a2abChet Haase SkPath* path = getPath(); 11335ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1134daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %p", (char*) indent, OP_NAMES[op], path, paint); 1135daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawPath(path, paint); 1136b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1137b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1138b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawLines: { 113933f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t count = 0; 1140b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy float* points = getFloats(count); 11415ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1142daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 11439ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy renderer.drawLines(points, count, paint); 1144b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1145b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1146ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy case DrawPoints: { 114733f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t count = 0; 1148ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy float* points = getFloats(count); 11495ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1150ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 11519ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy renderer.drawPoints(points, count, paint); 1152ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy } 1153ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy break; 1154b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawText: { 1155b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy getText(&text); 115633f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t count = getInt(); 1157daf98e941e140e8739458126640183b9f296a2abChet Haase float x = getFloat(); 1158daf98e941e140e8739458126640183b9f296a2abChet Haase float y = getFloat(); 11595ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1160cac5fd3e09e9dc918753d4aff624bf29a367ade3Romain Guy float length = getFloat(); 1161cac5fd3e09e9dc918753d4aff624bf29a367ade3Romain Guy DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %.2f, %.2f, %p, %.2f", (char*) indent, 1162cac5fd3e09e9dc918753d4aff624bf29a367ade3Romain Guy OP_NAMES[op], text.text(), text.length(), count, x, y, paint, length); 1163cac5fd3e09e9dc918753d4aff624bf29a367ade3Romain Guy renderer.drawText(text.text(), text.length(), count, x, y, paint, length); 1164b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1165b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1166325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy case DrawTextOnPath: { 1167325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy getText(&text); 1168325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy int32_t count = getInt(); 1169325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy SkPath* path = getPath(); 1170325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy float hOffset = getFloat(); 1171325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy float vOffset = getFloat(); 1172325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy SkPaint* paint = getPaint(renderer); 1173325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %p", (char*) indent, OP_NAMES[op], 1174325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy text.text(), text.length(), count, paint); 1175325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy renderer.drawTextOnPath(text.text(), text.length(), count, path, 1176325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy hOffset, vOffset, paint); 1177325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy } 1178325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy break; 1179eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy case DrawPosText: { 1180eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy getText(&text); 118133f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t count = getInt(); 118233f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t positionsCount = 0; 1183eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy float* positions = getFloats(positionsCount); 11845ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1185eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %p", (char*) indent, 1186eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy OP_NAMES[op], text.text(), text.length(), count, paint); 1187eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy renderer.drawPosText(text.text(), text.length(), count, positions, paint); 1188eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy } 1189eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy break; 1190b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetShader: { 1191daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 1192b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetShader(); 1193b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1194b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1195b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupShader: { 1196daf98e941e140e8739458126640183b9f296a2abChet Haase SkiaShader* shader = getShader(); 1197daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], shader); 1198daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setupShader(shader); 1199b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1200b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1201b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetColorFilter: { 1202daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 1203b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetColorFilter(); 1204b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1205b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1206b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupColorFilter: { 1207daf98e941e140e8739458126640183b9f296a2abChet Haase SkiaColorFilter *colorFilter = getColorFilter(); 1208daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], colorFilter); 1209daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setupColorFilter(colorFilter); 1210b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1211b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1212b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetShadow: { 1213daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 1214b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetShadow(); 1215b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1216b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1217b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupShadow: { 1218daf98e941e140e8739458126640183b9f296a2abChet Haase float radius = getFloat(); 1219daf98e941e140e8739458126640183b9f296a2abChet Haase float dx = getFloat(); 1220daf98e941e140e8739458126640183b9f296a2abChet Haase float dy = getFloat(); 122133f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t color = getInt(); 1222daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, 0x%x", (char*) indent, OP_NAMES[op], 1223a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase radius, dx, dy, color); 1224daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setupShadow(radius, dx, dy, color); 1225daf98e941e140e8739458126640183b9f296a2abChet Haase } 1226daf98e941e140e8739458126640183b9f296a2abChet Haase break; 12275ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy case ResetPaintFilter: { 12285ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 12295ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy renderer.resetPaintFilter(); 12305ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy } 12315ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy break; 12325ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy case SetupPaintFilter: { 123333f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t clearBits = getInt(); 123433f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t setBits = getInt(); 12355ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy DISPLAY_LIST_LOGD("%s%s 0x%x, 0x%x", (char*) indent, OP_NAMES[op], 12365ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy clearBits, setBits); 12375ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy renderer.setupPaintFilter(clearBits, setBits); 12385ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy } 12395ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy break; 1240daf98e941e140e8739458126640183b9f296a2abChet Haase default: 1241daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("Display List error: op not handled: %s%s", 1242a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op]); 1243daf98e941e140e8739458126640183b9f296a2abChet Haase break; 1244b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1245b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1246ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 1247a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (USE_DISPLAY_LIST_PROPERTIES) { 1248a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, "RestoreToCount", restoreTo); 1249a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase renderer.restoreToCount(restoreTo); 1250a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 125113631f3da855f200a151e7837ed9f6b079622b58Romain Guy renderer.endMark(); 125213631f3da855f200a151e7837ed9f6b079622b58Romain Guy 1253a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase DISPLAY_LIST_LOGD("%sDone (%p, %s), returning %d", (char*) indent + 2, this, mName.string(), 12546554943a1dd6854c0f4976900956e556767b49e1Romain Guy drawGlStatus); 12556554943a1dd6854c0f4976900956e556767b49e1Romain Guy return drawGlStatus; 1256b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 1257b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1258b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/////////////////////////////////////////////////////////////////////////////// 12594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Base structure 12604aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 12614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1262a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet HaaseDisplayListRenderer::DisplayListRenderer() : mWriter(MIN_WRITER_SIZE), 126333f6beb10f98e8ba96250e284876d607055d278dRomain Guy mTranslateX(0.0f), mTranslateY(0.0f), mHasTranslate(false), mHasDrawOps(false) { 12644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 12654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 12664aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain GuyDisplayListRenderer::~DisplayListRenderer() { 12674aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy reset(); 12684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 12694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 12704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::reset() { 12714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.reset(); 12725c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 12735c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Caches& caches = Caches::getInstance(); 12745c13d89c1332fcc499379b9064b891187b75ca32Chet Haase for (size_t i = 0; i < mBitmapResources.size(); i++) { 1275d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.decrementRefcount(mBitmapResources.itemAt(i)); 12765c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 12775c13d89c1332fcc499379b9064b891187b75ca32Chet Haase mBitmapResources.clear(); 1278d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 1279d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy for (size_t i = 0; i < mFilterResources.size(); i++) { 1280d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.decrementRefcount(mFilterResources.itemAt(i)); 1281d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy } 1282d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy mFilterResources.clear(); 1283d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 128443ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy for (size_t i = 0; i < mShaders.size(); i++) { 1285d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.decrementRefcount(mShaders.itemAt(i)); 128643ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy } 128724c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaders.clear(); 128824c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaderMap.clear(); 128943ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy 129043ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy mPaints.clear(); 129143ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy mPaintMap.clear(); 1292d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 12932fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPaths.clear(); 12942fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPathMap.clear(); 1295d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 1296d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mMatrices.clear(); 129704c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy 129804c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy mHasDrawOps = false; 12994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 13004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 13014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 13024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Operations 13034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 13044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1305162a0217563f4665da6eb183dfce0fef740f641fJeff BrownDisplayList* DisplayListRenderer::getDisplayList(DisplayList* displayList) { 1306162a0217563f4665da6eb183dfce0fef740f641fJeff Brown if (!displayList) { 1307162a0217563f4665da6eb183dfce0fef740f641fJeff Brown displayList = new DisplayList(*this); 13085977baa1fa24125c148a72699b53e62abaf08960Chet Haase } else { 1309162a0217563f4665da6eb183dfce0fef740f641fJeff Brown displayList->initFromDisplayListRenderer(*this, true); 13105977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 131104c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy displayList->setRenderable(mHasDrawOps); 1312162a0217563f4665da6eb183dfce0fef740f641fJeff Brown return displayList; 13135977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 13145977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1315b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyvoid DisplayListRenderer::setViewport(int width, int height) { 1316b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mOrthoMatrix.loadOrtho(0, width, height, 0, -1, 1); 1317b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1318b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mWidth = width; 1319b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mHeight = height; 1320b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 1321b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 13227d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guyvoid DisplayListRenderer::prepareDirty(float left, float top, 13237d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy float right, float bottom, bool opaque) { 1324b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSnapshot = new Snapshot(mFirstSnapshot, 1325b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); 1326b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSaveCount = 1; 1327b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSnapshot->setClip(0.0f, 0.0f, mWidth, mHeight); 132827454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mRestoreSaveCount = -1; 132927454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy} 133027454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy 133127454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guyvoid DisplayListRenderer::finish() { 133227454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy insertRestoreToCount(); 133333f6beb10f98e8ba96250e284876d607055d278dRomain Guy insertTranlate(); 1334b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 1335b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1336daf98e941e140e8739458126640183b9f296a2abChet Haasevoid DisplayListRenderer::interrupt() { 1337daf98e941e140e8739458126640183b9f296a2abChet Haase} 1338daf98e941e140e8739458126640183b9f296a2abChet Haase 13392b1847ea60650a9f68372abe860415f18b55081dRomain Guyvoid DisplayListRenderer::resume() { 13404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 13414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 13426554943a1dd6854c0f4976900956e556767b49e1Romain Guystatus_t DisplayListRenderer::callDrawGLFunction(Functor *functor, Rect& dirty) { 1343cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy // Ignore dirty during recording, it matters only when we replay 1344daf98e941e140e8739458126640183b9f296a2abChet Haase addOp(DisplayList::DrawGLFunction); 1345daf98e941e140e8739458126640183b9f296a2abChet Haase addInt((int) functor); 13466554943a1dd6854c0f4976900956e556767b49e1Romain Guy return DrawGlInfo::kStatusDone; // No invalidate needed at record-time 1347daf98e941e140e8739458126640183b9f296a2abChet Haase} 1348daf98e941e140e8739458126640183b9f296a2abChet Haase 13494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::save(int flags) { 1350b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Save); 13514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(flags); 13524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return OpenGLRenderer::save(flags); 13534aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 13544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 13554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restore() { 135604c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy if (mRestoreSaveCount < 0) { 135733f6beb10f98e8ba96250e284876d607055d278dRomain Guy restoreToCount(getSaveCount() - 1); 135833f6beb10f98e8ba96250e284876d607055d278dRomain Guy return; 135904c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy } 136033f6beb10f98e8ba96250e284876d607055d278dRomain Guy 136133f6beb10f98e8ba96250e284876d607055d278dRomain Guy mRestoreSaveCount--; 136233f6beb10f98e8ba96250e284876d607055d278dRomain Guy insertTranlate(); 13634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::restore(); 13644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 13654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 13664aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restoreToCount(int saveCount) { 136727454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mRestoreSaveCount = saveCount; 136833f6beb10f98e8ba96250e284876d607055d278dRomain Guy insertTranlate(); 13694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::restoreToCount(saveCount); 13704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 13714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 13724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::saveLayer(float left, float top, float right, float bottom, 13735c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* p, int flags) { 1374b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SaveLayer); 13754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 13764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(p); 13774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(flags); 1378b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return OpenGLRenderer::save(flags); 13794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 13804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 13815b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guyint DisplayListRenderer::saveLayerAlpha(float left, float top, float right, float bottom, 13825b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int alpha, int flags) { 13835b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addOp(DisplayList::SaveLayerAlpha); 13845b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addBounds(left, top, right, bottom); 13855b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addInt(alpha); 13865b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addInt(flags); 13875b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy return OpenGLRenderer::save(flags); 13885b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy} 13895b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy 13904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::translate(float dx, float dy) { 139133f6beb10f98e8ba96250e284876d607055d278dRomain Guy mHasTranslate = true; 139233f6beb10f98e8ba96250e284876d607055d278dRomain Guy mTranslateX += dx; 139333f6beb10f98e8ba96250e284876d607055d278dRomain Guy mTranslateY += dy; 139433f6beb10f98e8ba96250e284876d607055d278dRomain Guy insertRestoreToCount(); 13954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::translate(dx, dy); 13964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 13974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 13984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::rotate(float degrees) { 1399b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Rotate); 14004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloat(degrees); 14014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::rotate(degrees); 14024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::scale(float sx, float sy) { 1405b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Scale); 14064aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(sx, sy); 14074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::scale(sx, sy); 14084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1410807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guyvoid DisplayListRenderer::skew(float sx, float sy) { 1411807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy addOp(DisplayList::Skew); 1412807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy addPoint(sx, sy); 1413807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy OpenGLRenderer::skew(sx, sy); 1414807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy} 1415807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy 14164aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setMatrix(SkMatrix* matrix) { 1417b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SetMatrix); 14184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 14194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::setMatrix(matrix); 14204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::concatMatrix(SkMatrix* matrix) { 1423b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ConcatMatrix); 14244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 14254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::concatMatrix(matrix); 14264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guybool DisplayListRenderer::clipRect(float left, float top, float right, float bottom, 14294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkRegion::Op op) { 1430b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ClipRect); 14314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 14324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(op); 14334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return OpenGLRenderer::clipRect(left, top, right, bottom, op); 14344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14366554943a1dd6854c0f4976900956e556767b49e1Romain Guystatus_t DisplayListRenderer::drawDisplayList(DisplayList* displayList, 143733f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t width, uint32_t height, Rect& dirty, int32_t flags, uint32_t level) { 1438cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy // dirty is an out parameter and should not be recorded, 1439cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy // it matters only when replaying the display list 1440b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase 1441b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase addOp(DisplayList::DrawDisplayList); 14420fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addDisplayList(displayList); 14437b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy addSize(width, height); 144433f6beb10f98e8ba96250e284876d607055d278dRomain Guy addInt(flags); 14456554943a1dd6854c0f4976900956e556767b49e1Romain Guy return DrawGlInfo::kStatusDone; 14460fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy} 14470fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy 1448ada830f639591b99c3e40de22b07296c7932a33fRomain Guyvoid DisplayListRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* paint) { 14496c319ca1275c8db892c39b48fc54864c949f9171Romain Guy addOp(DisplayList::DrawLayer); 1450ada830f639591b99c3e40de22b07296c7932a33fRomain Guy addInt((int) layer); 1451ada830f639591b99c3e40de22b07296c7932a33fRomain Guy addPoint(x, y); 14526c319ca1275c8db892c39b48fc54864c949f9171Romain Guy addPaint(paint); 14536c319ca1275c8db892c39b48fc54864c949f9171Romain Guy} 14546c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 145533f6beb10f98e8ba96250e284876d607055d278dRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float left, float top, SkPaint* paint) { 145633f6beb10f98e8ba96250e284876d607055d278dRomain Guy const bool reject = quickReject(left, top, left + bitmap->width(), top + bitmap->height()); 145733f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawBitmap, reject); 14584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 14594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(left, top); 14604aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 146133f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 14624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 146433f6beb10f98e8ba96250e284876d607055d278dRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, SkPaint* paint) { 146533f6beb10f98e8ba96250e284876d607055d278dRomain Guy Rect r(0.0f, 0.0f, bitmap->width(), bitmap->height()); 146633f6beb10f98e8ba96250e284876d607055d278dRomain Guy const mat4 transform(*matrix); 146733f6beb10f98e8ba96250e284876d607055d278dRomain Guy transform.mapRect(r); 146833f6beb10f98e8ba96250e284876d607055d278dRomain Guy 146933f6beb10f98e8ba96250e284876d607055d278dRomain Guy const bool reject = quickReject(r.left, r.top, r.right, r.bottom); 147033f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawBitmapMatrix, reject); 14714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 14724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 14734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 147433f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 14754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop, 14784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float srcRight, float srcBottom, float dstLeft, float dstTop, 14795c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float dstRight, float dstBottom, SkPaint* paint) { 148033f6beb10f98e8ba96250e284876d607055d278dRomain Guy const bool reject = quickReject(dstLeft, dstTop, dstRight, dstBottom); 148133f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawBitmapRect, reject); 14824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 14834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(srcLeft, srcTop, srcRight, srcBottom); 14844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(dstLeft, dstTop, dstRight, dstBottom); 14854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 148633f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 14874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14895a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guyvoid DisplayListRenderer::drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight, 14905a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy float* vertices, int* colors, SkPaint* paint) { 14915a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addOp(DisplayList::DrawBitmapMesh); 14925a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addBitmap(bitmap); 14935a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(meshWidth); 14945a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(meshHeight); 14955a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addFloats(vertices, (meshWidth + 1) * (meshHeight + 1) * 2); 14965a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy if (colors) { 14975a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(1); 14985a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInts(colors, (meshWidth + 1) * (meshHeight + 1)); 14995a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } else { 15005a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(0); 15015a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } 15025a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addPaint(paint); 15035a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy} 15045a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 15054aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int32_t* yDivs, 15064bb942083a0d4db746adf95349108dd8ef842e32Romain Guy const uint32_t* colors, uint32_t width, uint32_t height, int8_t numColors, 15075c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float left, float top, float right, float bottom, SkPaint* paint) { 150833f6beb10f98e8ba96250e284876d607055d278dRomain Guy const bool reject = quickReject(left, top, right, bottom); 150933f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawPatch, reject); 15104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 15114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInts(xDivs, width); 15124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInts(yDivs, height); 15134bb942083a0d4db746adf95349108dd8ef842e32Romain Guy addUInts(colors, numColors); 15144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 15154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 151633f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 15174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 15184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 15194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawColor(int color, SkXfermode::Mode mode) { 1520b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawColor); 15214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(color); 15224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(mode); 15234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 15244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 15254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawRect(float left, float top, float right, float bottom, 15265c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 152733f6beb10f98e8ba96250e284876d607055d278dRomain Guy const bool reject = paint->getStyle() == SkPaint::kFill_Style && 152833f6beb10f98e8ba96250e284876d607055d278dRomain Guy quickReject(left, top, right, bottom); 152933f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawRect, reject); 15304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 15314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 153233f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 15334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 15344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 153501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guyvoid DisplayListRenderer::drawRoundRect(float left, float top, float right, float bottom, 1536a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase float rx, float ry, SkPaint* paint) { 153733f6beb10f98e8ba96250e284876d607055d278dRomain Guy const bool reject = paint->getStyle() == SkPaint::kFill_Style && 153833f6beb10f98e8ba96250e284876d607055d278dRomain Guy quickReject(left, top, right, bottom); 153933f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawRoundRect, reject); 154001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addBounds(left, top, right, bottom); 154101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPoint(rx, ry); 154201d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPaint(paint); 154333f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 154401d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy} 154501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy 154601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guyvoid DisplayListRenderer::drawCircle(float x, float y, float radius, SkPaint* paint) { 154701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addOp(DisplayList::DrawCircle); 154801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPoint(x, y); 154901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addFloat(radius); 155001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPaint(paint); 155101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy} 155201d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy 1553c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guyvoid DisplayListRenderer::drawOval(float left, float top, float right, float bottom, 1554c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy SkPaint* paint) { 1555c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addOp(DisplayList::DrawOval); 1556c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addBounds(left, top, right, bottom); 1557c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addPaint(paint); 1558c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy} 1559c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy 15608b2f5267f16c295f12faab810527cd6311997e34Romain Guyvoid DisplayListRenderer::drawArc(float left, float top, float right, float bottom, 15618b2f5267f16c295f12faab810527cd6311997e34Romain Guy float startAngle, float sweepAngle, bool useCenter, SkPaint* paint) { 156282d41a515368236e56454bd84023bebd6306f6b7Romain Guy addOp(DisplayList::DrawArc); 15638b2f5267f16c295f12faab810527cd6311997e34Romain Guy addBounds(left, top, right, bottom); 15648b2f5267f16c295f12faab810527cd6311997e34Romain Guy addPoint(startAngle, sweepAngle); 15658b2f5267f16c295f12faab810527cd6311997e34Romain Guy addInt(useCenter ? 1 : 0); 15668b2f5267f16c295f12faab810527cd6311997e34Romain Guy addPaint(paint); 15678b2f5267f16c295f12faab810527cd6311997e34Romain Guy} 15688b2f5267f16c295f12faab810527cd6311997e34Romain Guy 15694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawPath(SkPath* path, SkPaint* paint) { 157033f6beb10f98e8ba96250e284876d607055d278dRomain Guy float left, top, offset; 157133f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t width, height; 157233f6beb10f98e8ba96250e284876d607055d278dRomain Guy computePathBounds(path, paint, left, top, offset, width, height); 157333f6beb10f98e8ba96250e284876d607055d278dRomain Guy 157433f6beb10f98e8ba96250e284876d607055d278dRomain Guy const bool reject = quickReject(left - offset, top - offset, width, height); 157533f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawPath, reject); 15764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPath(path); 15774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 157833f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 15794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 15804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 15815c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid DisplayListRenderer::drawLines(float* points, int count, SkPaint* paint) { 1582b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawLines); 15834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloats(points, count); 15844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 1585ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy} 1586ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy 1587ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guyvoid DisplayListRenderer::drawPoints(float* points, int count, SkPaint* paint) { 1588ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy addOp(DisplayList::DrawPoints); 1589ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy addFloats(points, count); 1590ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy addPaint(paint); 15914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 15924aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 15934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawText(const char* text, int bytesCount, int count, 1594cac5fd3e09e9dc918753d4aff624bf29a367ade3Romain Guy float x, float y, SkPaint* paint, float length) { 159533f6beb10f98e8ba96250e284876d607055d278dRomain Guy if (!text || count <= 0) return; 159633f6beb10f98e8ba96250e284876d607055d278dRomain Guy 15978f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // TODO: We should probably make a copy of the paint instead of modifying 15988f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // it; modifying the paint will change its generationID the first 15998f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // time, which might impact caches. More investigation needed to 16008f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // see if it matters. 16018f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // If we make a copy, then drawTextDecorations() should *not* make 16028f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // its own copy as it does right now. 1603c511bee87cda99a252d1a62487f47c8f05aee78cFabrice Di Meglio // Beware: this needs Glyph encoding (already done on the Paint constructor) 16048f9a9f61ab793d9387a5942b307e74324704893bRomain Guy paint->setAntiAlias(true); 160533f6beb10f98e8ba96250e284876d607055d278dRomain Guy if (length < 0.0f) length = paint->measureText(text, bytesCount); 160633f6beb10f98e8ba96250e284876d607055d278dRomain Guy 160733f6beb10f98e8ba96250e284876d607055d278dRomain Guy bool reject = false; 160833f6beb10f98e8ba96250e284876d607055d278dRomain Guy if (CC_LIKELY(paint->getTextAlign() == SkPaint::kLeft_Align)) { 160933f6beb10f98e8ba96250e284876d607055d278dRomain Guy SkPaint::FontMetrics metrics; 161033f6beb10f98e8ba96250e284876d607055d278dRomain Guy paint->getFontMetrics(&metrics, 0.0f); 161133f6beb10f98e8ba96250e284876d607055d278dRomain Guy reject = quickReject(x, y + metrics.fTop, x + length, y + metrics.fBottom); 161233f6beb10f98e8ba96250e284876d607055d278dRomain Guy } 161333f6beb10f98e8ba96250e284876d607055d278dRomain Guy 161433f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawText, reject); 161533f6beb10f98e8ba96250e284876d607055d278dRomain Guy addText(text, bytesCount); 161633f6beb10f98e8ba96250e284876d607055d278dRomain Guy addInt(count); 161733f6beb10f98e8ba96250e284876d607055d278dRomain Guy addPoint(x, y); 16184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 161933f6beb10f98e8ba96250e284876d607055d278dRomain Guy addFloat(length); 162033f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 16214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 16224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1623325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guyvoid DisplayListRenderer::drawTextOnPath(const char* text, int bytesCount, int count, 1624325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy SkPath* path, float hOffset, float vOffset, SkPaint* paint) { 1625325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy if (!text || count <= 0) return; 1626325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy addOp(DisplayList::DrawTextOnPath); 1627325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy addText(text, bytesCount); 1628325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy addInt(count); 1629325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy addPath(path); 1630325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy addFloat(hOffset); 1631325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy addFloat(vOffset); 1632325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy paint->setAntiAlias(true); 1633325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy addPaint(paint); 1634325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy} 1635325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy 1636eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guyvoid DisplayListRenderer::drawPosText(const char* text, int bytesCount, int count, 1637eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy const float* positions, SkPaint* paint) { 163833f6beb10f98e8ba96250e284876d607055d278dRomain Guy if (!text || count <= 0) return; 1639eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy addOp(DisplayList::DrawPosText); 1640eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy addText(text, bytesCount); 1641eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy addInt(count); 1642eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy addFloats(positions, count * 2); 1643eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy paint->setAntiAlias(true); 1644eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy addPaint(paint); 1645eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy} 1646eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy 16474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShader() { 1648b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetShader); 16494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 16504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 16514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShader(SkiaShader* shader) { 16525c13d89c1332fcc499379b9064b891187b75ca32Chet Haase addOp(DisplayList::SetupShader); 16535c13d89c1332fcc499379b9064b891187b75ca32Chet Haase addShader(shader); 16544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 16554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 16564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetColorFilter() { 1657b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetColorFilter); 16584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 16594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 16604aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupColorFilter(SkiaColorFilter* filter) { 1661ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase addOp(DisplayList::SetupColorFilter); 1662ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase addColorFilter(filter); 16634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 16644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 16654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShadow() { 1666b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetShadow); 16674aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 16684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 16694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShadow(float radius, float dx, float dy, int color) { 1670b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SetupShadow); 16714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloat(radius); 16724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(dx, dy); 16734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(color); 16744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 16754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 16765ff9df658230d49e42c43586997a02d8e4dd417eRomain Guyvoid DisplayListRenderer::resetPaintFilter() { 16775ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy addOp(DisplayList::ResetPaintFilter); 16785ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy} 16795ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy 16805ff9df658230d49e42c43586997a02d8e4dd417eRomain Guyvoid DisplayListRenderer::setupPaintFilter(int clearBits, int setBits) { 16815ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy addOp(DisplayList::SetupPaintFilter); 16825ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy addInt(clearBits); 16835ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy addInt(setBits); 16845ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy} 16855ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy 16864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace uirenderer 16874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace android 1688