DisplayListRenderer.cpp revision 45e4c3df6c00ac98ff6144de9af574877d4fff19
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", 52e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy "DrawBitmapData", 535a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy "DrawBitmapMesh", 54ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawPatch", 55ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawColor", 56ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawRect", 5701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy "DrawRoundRect", 5801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy "DrawCircle", 59c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy "DrawOval", 608b2f5267f16c295f12faab810527cd6311997e34Romain Guy "DrawArc", 61ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawPath", 62ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawLines", 63ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy "DrawPoints", 64325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy "DrawTextOnPath", 65eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy "DrawPosText", 66c25259519f1b74bb62a2b051b74537f073436b5cRomain Guy "DrawText", 67ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ResetShader", 68ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetupShader", 69ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ResetColorFilter", 70ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetupColorFilter", 71ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ResetShadow", 72daf98e941e140e8739458126640183b9f296a2abChet Haase "SetupShadow", 735ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy "ResetPaintFilter", 745ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy "SetupPaintFilter", 75daf98e941e140e8739458126640183b9f296a2abChet Haase "DrawGLFunction" 76ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy}; 77ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 789c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haasevoid DisplayList::outputLogBuffer(int fd) { 799c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase DisplayListLogBuffer& logBuffer = DisplayListLogBuffer::getInstance(); 809c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase if (logBuffer.isEmpty()) { 819c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase return; 829c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase } 8365b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy 849c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase FILE *file = fdopen(fd, "a"); 8565b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy 869c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase fprintf(file, "\nRecent DisplayList operations\n"); 879c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase logBuffer.outputCommands(file, OP_NAMES); 8865b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy 8965b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy String8 cachesLog; 9065b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy Caches::getInstance().dumpMemoryUsage(cachesLog); 9165b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy fprintf(file, "\nCaches:\n%s", cachesLog.string()); 9265b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy fprintf(file, "\n"); 9365b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy 949c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase fflush(file); 959c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase} 969c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase 97491189f6bb81827a0c8e343f89420a9bcd2e62aeChet HaaseDisplayList::DisplayList(const DisplayListRenderer& recorder) : 989420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mTransformMatrix(NULL), mTransformCamera(NULL), mTransformMatrix3D(NULL), 999420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase mStaticMatrix(NULL), mAnimationMatrix(NULL) { 100491189f6bb81827a0c8e343f89420a9bcd2e62aeChet Haase 1015977baa1fa24125c148a72699b53e62abaf08960Chet Haase initFromDisplayListRenderer(recorder); 1025977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 1035977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1045977baa1fa24125c148a72699b53e62abaf08960Chet HaaseDisplayList::~DisplayList() { 105d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase clearResources(); 106d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase} 107d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase 108a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haasevoid DisplayList::initProperties() { 109a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mLeft = 0; 110a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTop = 0; 111b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase mRight = 0; 112a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mBottom = 0; 113a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mClipChildren = true; 114a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mAlpha = 1; 115a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mMultipliedAlpha = 255; 116db8c9a6a4d9bf8c39f834b25611926caf21380f6Chet Haase mHasOverlappingRendering = true; 117a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTranslationX = 0; 118a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTranslationY = 0; 119a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mRotation = 0; 120a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mRotationX = 0; 121a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mRotationY= 0; 122a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mScaleX = 1; 123a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mScaleY = 1; 124a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPivotX = 0; 125a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPivotY = 0; 126b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase mCameraDistance = 0; 127a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mMatrixDirty = false; 128a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mMatrixFlags = 0; 129a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPrevWidth = -1; 130a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPrevHeight = -1; 131a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mWidth = 0; 132a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mHeight = 0; 133a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPivotExplicitlySet = false; 134a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mCaching = false; 135a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 136a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 137bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guyvoid DisplayList::destroyDisplayListDeferred(DisplayList* displayList) { 138bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guy if (displayList) { 139bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guy DISPLAY_LIST_LOGD("Deferring display list destruction"); 140bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guy Caches::getInstance().deleteDisplayListDeferred(displayList); 141bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guy } 142bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guy} 143bb0acdf9e1d862a7cf0e2533321fc1105c29b5e3Romain Guy 144d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haasevoid DisplayList::clearResources() { 1455977baa1fa24125c148a72699b53e62abaf08960Chet Haase sk_free((void*) mReader.base()); 1465977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1471271e2cc80b01d577e9db339459ef0222bb9320dChet Haase delete mTransformMatrix; 1481271e2cc80b01d577e9db339459ef0222bb9320dChet Haase delete mTransformCamera; 1491271e2cc80b01d577e9db339459ef0222bb9320dChet Haase delete mTransformMatrix3D; 1501271e2cc80b01d577e9db339459ef0222bb9320dChet Haase delete mStaticMatrix; 1511271e2cc80b01d577e9db339459ef0222bb9320dChet Haase delete mAnimationMatrix; 15258ecc204fbcacef34806290492384677a330d4d4Romain Guy 1531271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix = NULL; 1541271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformCamera = NULL; 1551271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix3D = NULL; 1561271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix = NULL; 1571271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix = NULL; 158a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 1595977baa1fa24125c148a72699b53e62abaf08960Chet Haase Caches& caches = Caches::getInstance(); 16058ecc204fbcacef34806290492384677a330d4d4Romain Guy caches.resourceCache.lock(); 1615977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1625977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mBitmapResources.size(); i++) { 16358ecc204fbcacef34806290492384677a330d4d4Romain Guy caches.resourceCache.decrementRefcountLocked(mBitmapResources.itemAt(i)); 1645977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1655977baa1fa24125c148a72699b53e62abaf08960Chet Haase 16649c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy for (size_t i = 0; i < mOwnedBitmapResources.size(); i++) { 16749c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy SkBitmap* bitmap = mOwnedBitmapResources.itemAt(i); 16858ecc204fbcacef34806290492384677a330d4d4Romain Guy caches.resourceCache.decrementRefcountLocked(bitmap); 16958ecc204fbcacef34806290492384677a330d4d4Romain Guy caches.resourceCache.destructorLocked(bitmap); 17049c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy } 17149c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy 172d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy for (size_t i = 0; i < mFilterResources.size(); i++) { 17358ecc204fbcacef34806290492384677a330d4d4Romain Guy caches.resourceCache.decrementRefcountLocked(mFilterResources.itemAt(i)); 174d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy } 175d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 17624c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy for (size_t i = 0; i < mShaders.size(); i++) { 17758ecc204fbcacef34806290492384677a330d4d4Romain Guy caches.resourceCache.decrementRefcountLocked(mShaders.itemAt(i)); 17858ecc204fbcacef34806290492384677a330d4d4Romain Guy caches.resourceCache.destructorLocked(mShaders.itemAt(i)); 1795977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 18058ecc204fbcacef34806290492384677a330d4d4Romain Guy 18158ecc204fbcacef34806290492384677a330d4d4Romain Guy for (size_t i = 0; i < mSourcePaths.size(); i++) { 18258ecc204fbcacef34806290492384677a330d4d4Romain Guy caches.resourceCache.decrementRefcountLocked(mSourcePaths.itemAt(i)); 18358ecc204fbcacef34806290492384677a330d4d4Romain Guy } 18458ecc204fbcacef34806290492384677a330d4d4Romain Guy 18558ecc204fbcacef34806290492384677a330d4d4Romain Guy caches.resourceCache.unlock(); 1865977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1875977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mPaints.size(); i++) { 1885977baa1fa24125c148a72699b53e62abaf08960Chet Haase delete mPaints.itemAt(i); 1895977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1905977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1912fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy for (size_t i = 0; i < mPaths.size(); i++) { 1921af23a32d879db330eb5a08b21090ec60b604a32Romain Guy SkPath* path = mPaths.itemAt(i); 1931af23a32d879db330eb5a08b21090ec60b604a32Romain Guy caches.pathCache.remove(path); 1941af23a32d879db330eb5a08b21090ec60b604a32Romain Guy delete path; 1952fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy } 196d34dd71800d9a1077e58c3b7f2511c46848da417Chet Haase 1975977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mMatrices.size(); i++) { 1985977baa1fa24125c148a72699b53e62abaf08960Chet Haase delete mMatrices.itemAt(i); 1995977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 20058ecc204fbcacef34806290492384677a330d4d4Romain Guy 20158ecc204fbcacef34806290492384677a330d4d4Romain Guy mBitmapResources.clear(); 20258ecc204fbcacef34806290492384677a330d4d4Romain Guy mOwnedBitmapResources.clear(); 20358ecc204fbcacef34806290492384677a330d4d4Romain Guy mFilterResources.clear(); 20458ecc204fbcacef34806290492384677a330d4d4Romain Guy mShaders.clear(); 20558ecc204fbcacef34806290492384677a330d4d4Romain Guy mSourcePaths.clear(); 20658ecc204fbcacef34806290492384677a330d4d4Romain Guy mPaints.clear(); 20758ecc204fbcacef34806290492384677a330d4d4Romain Guy mPaths.clear(); 2085977baa1fa24125c148a72699b53e62abaf08960Chet Haase mMatrices.clear(); 2095977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 2105977baa1fa24125c148a72699b53e62abaf08960Chet Haase 211d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haasevoid DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorder, bool reusing) { 212b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy const SkWriter32& writer = recorder.writeStream(); 213b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy init(); 214b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 215b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy if (writer.size() == 0) { 216b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return; 217b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 218b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 219d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase if (reusing) { 220d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase // re-using display list - clear out previous allocations 221d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase clearResources(); 222d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase } 223a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase initProperties(); 224d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase 22565b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy mSize = writer.size(); 22665b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy void* buffer = sk_malloc_throw(mSize); 227b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy writer.flatten(buffer); 22865b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy mReader.setMemory(buffer, mSize); 229b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 2305c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Caches& caches = Caches::getInstance(); 23158ecc204fbcacef34806290492384677a330d4d4Romain Guy caches.resourceCache.lock(); 232b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 23349c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy const Vector<SkBitmap*>& bitmapResources = recorder.getBitmapResources(); 2345c13d89c1332fcc499379b9064b891187b75ca32Chet Haase for (size_t i = 0; i < bitmapResources.size(); i++) { 2355c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkBitmap* resource = bitmapResources.itemAt(i); 2365c13d89c1332fcc499379b9064b891187b75ca32Chet Haase mBitmapResources.add(resource); 23758ecc204fbcacef34806290492384677a330d4d4Romain Guy caches.resourceCache.incrementRefcountLocked(resource); 238b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 239d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 24049c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy const Vector<SkBitmap*> &ownedBitmapResources = recorder.getOwnedBitmapResources(); 24149c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy for (size_t i = 0; i < ownedBitmapResources.size(); i++) { 24249c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy SkBitmap* resource = ownedBitmapResources.itemAt(i); 24349c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy mOwnedBitmapResources.add(resource); 24458ecc204fbcacef34806290492384677a330d4d4Romain Guy caches.resourceCache.incrementRefcountLocked(resource); 24549c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy } 24649c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy 24749c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy const Vector<SkiaColorFilter*>& filterResources = recorder.getFilterResources(); 248d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy for (size_t i = 0; i < filterResources.size(); i++) { 249d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy SkiaColorFilter* resource = filterResources.itemAt(i); 250d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy mFilterResources.add(resource); 25158ecc204fbcacef34806290492384677a330d4d4Romain Guy caches.resourceCache.incrementRefcountLocked(resource); 252d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy } 253d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 25449c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy const Vector<SkiaShader*>& shaders = recorder.getShaders(); 25524c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy for (size_t i = 0; i < shaders.size(); i++) { 256d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy SkiaShader* resource = shaders.itemAt(i); 257d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy mShaders.add(resource); 25858ecc204fbcacef34806290492384677a330d4d4Romain Guy caches.resourceCache.incrementRefcountLocked(resource); 25958ecc204fbcacef34806290492384677a330d4d4Romain Guy } 26058ecc204fbcacef34806290492384677a330d4d4Romain Guy 26158ecc204fbcacef34806290492384677a330d4d4Romain Guy const SortedVector<SkPath*>& sourcePaths = recorder.getSourcePaths(); 26258ecc204fbcacef34806290492384677a330d4d4Romain Guy for (size_t i = 0; i < sourcePaths.size(); i++) { 26358ecc204fbcacef34806290492384677a330d4d4Romain Guy mSourcePaths.add(sourcePaths.itemAt(i)); 26458ecc204fbcacef34806290492384677a330d4d4Romain Guy caches.resourceCache.incrementRefcountLocked(sourcePaths.itemAt(i)); 265b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 266b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 26758ecc204fbcacef34806290492384677a330d4d4Romain Guy caches.resourceCache.unlock(); 26858ecc204fbcacef34806290492384677a330d4d4Romain Guy 26949c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy const Vector<SkPaint*>& paints = recorder.getPaints(); 270d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase for (size_t i = 0; i < paints.size(); i++) { 271d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mPaints.add(paints.itemAt(i)); 272d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase } 273d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 27449c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy const Vector<SkPath*>& paths = recorder.getPaths(); 2752fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy for (size_t i = 0; i < paths.size(); i++) { 2762fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPaths.add(paths.itemAt(i)); 2772fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy } 2782fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy 27949c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy const Vector<SkMatrix*>& matrices = recorder.getMatrices(); 280d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase for (size_t i = 0; i < matrices.size(); i++) { 281d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mMatrices.add(matrices.itemAt(i)); 282d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase } 283b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 284b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 285b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyvoid DisplayList::init() { 28665b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy mSize = 0; 28704c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy mIsRenderable = true; 28865b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy} 28965b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy 29065b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guysize_t DisplayList::getSize() { 29165b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy return mSize; 292b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 293b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 294ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase/** 295ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * This function is a simplified version of replay(), where we simply retrieve and log the 296ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * display list. This function should remain in sync with the replay() function. 297ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase */ 298ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haasevoid DisplayList::output(OpenGLRenderer& renderer, uint32_t level) { 299ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase TextContainer text; 300ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 301ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t count = (level + 1) * 2; 302ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase char indent[count + 1]; 303ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase for (uint32_t i = 0; i < count; i++) { 304ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase indent[i] = ' '; 305ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 306ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase indent[count] = '\0'; 307ddf74373616c89e0880a28a2185fd7ce3db91de6Romain Guy ALOGD("%sStart display list (%p, %s, render=%d)", (char*) indent + 2, this, 308ddf74373616c89e0880a28a2185fd7ce3db91de6Romain Guy mName.string(), isRenderable()); 309ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 3101271e2cc80b01d577e9db339459ef0222bb9320dChet Haase ALOGD("%s%s %d", indent, "Save", SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); 311ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int saveCount = renderer.getSaveCount() - 1; 312ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 313a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase outputViewProperties(renderer, (char*) indent); 314ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase mReader.rewind(); 315ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 316ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase while (!mReader.eof()) { 317ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int op = mReader.readInt(); 31833f6beb10f98e8ba96250e284876d607055d278dRomain Guy if (op & OP_MAY_BE_SKIPPED_MASK) { 31933f6beb10f98e8ba96250e284876d607055d278dRomain Guy int skip = mReader.readInt(); 32033f6beb10f98e8ba96250e284876d607055d278dRomain Guy ALOGD("%sSkip %d", (char*) indent, skip); 32133f6beb10f98e8ba96250e284876d607055d278dRomain Guy op &= ~OP_MAY_BE_SKIPPED_MASK; 322a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 323ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 324ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase switch (op) { 325ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawGLFunction: { 326ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase Functor *functor = (Functor *) getInt(); 3275baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p", (char*) indent, OP_NAMES[op], functor); 328ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 329ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 330ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Save: { 331ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int rendererNum = getInt(); 3325baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %d", (char*) indent, OP_NAMES[op], rendererNum); 333ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 334ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 335ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Restore: { 3365baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 337ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 338ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 339ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case RestoreToCount: { 340ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int restoreCount = saveCount + getInt(); 3415baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %d", (char*) indent, OP_NAMES[op], restoreCount); 342ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 343ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 344ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SaveLayer: { 345ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 346ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 347ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 348ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 3495ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 350ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int flags = getInt(); 3515baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p, 0x%x", (char*) indent, 352a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase OP_NAMES[op], f1, f2, f3, f4, paint, flags); 353ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 354ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 355ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SaveLayerAlpha: { 356ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 357ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 358ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 359ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 360ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int alpha = getInt(); 361ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int flags = getInt(); 3625baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", (char*) indent, 363a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase OP_NAMES[op], f1, f2, f3, f4, alpha, flags); 364ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 365ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 366ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Translate: { 367ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 368ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 3695baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], f1, f2); 370ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 371ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 372ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Rotate: { 373ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float rotation = getFloat(); 3745baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f", (char*) indent, OP_NAMES[op], rotation); 375ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 376ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 377ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Scale: { 378ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float sx = getFloat(); 379ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float sy = getFloat(); 3805baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 381ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 382ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 383ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Skew: { 384ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float sx = getFloat(); 385ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float sy = getFloat(); 3865baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 387ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 388ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 389ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SetMatrix: { 390ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkMatrix* matrix = getMatrix(); 3915baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p", (char*) indent, OP_NAMES[op], matrix); 392ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 393ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 394ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ConcatMatrix: { 395ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkMatrix* matrix = getMatrix(); 396a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase ALOGD("%s%s new concat %p: [%f, %f, %f] [%f, %f, %f] [%f, %f, %f]", 397a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], matrix, matrix->get(0), matrix->get(1), 398a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase matrix->get(2), matrix->get(3), matrix->get(4), matrix->get(5), 399a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase matrix->get(6), matrix->get(7), matrix->get(8)); 400ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 401ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 402ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ClipRect: { 403ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 404ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 405ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 406ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 407ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int regionOp = getInt(); 4085baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d", (char*) indent, OP_NAMES[op], 409a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase f1, f2, f3, f4, regionOp); 410ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 411ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 412ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawDisplayList: { 413ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase DisplayList* displayList = getDisplayList(); 41433f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t flags = getInt(); 41533f6beb10f98e8ba96250e284876d607055d278dRomain Guy ALOGD("%s%s %p, %dx%d, 0x%x %d", (char*) indent, OP_NAMES[op], 4161271e2cc80b01d577e9db339459ef0222bb9320dChet Haase displayList, mWidth, mHeight, flags, level + 1); 417ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase renderer.outputDisplayList(displayList, level + 1); 418ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 419ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 420ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawLayer: { 421ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase Layer* layer = (Layer*) getInt(); 422ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float x = getFloat(); 423ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float y = getFloat(); 4245ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 4255baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 426a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase layer, x, y, paint); 427ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 428ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 429ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawBitmap: { 430ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkBitmap* bitmap = getBitmap(); 431ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float x = getFloat(); 432ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float y = getFloat(); 4335ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 4345baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 435a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase bitmap, x, y, paint); 436ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 437ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 438ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawBitmapMatrix: { 439ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkBitmap* bitmap = getBitmap(); 440ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkMatrix* matrix = getMatrix(); 4415ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 4425baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p, %p, %p", (char*) indent, OP_NAMES[op], 443a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase bitmap, matrix, paint); 444ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 445ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 446ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawBitmapRect: { 447ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkBitmap* bitmap = getBitmap(); 448ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 449ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 450ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 451ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 452ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f5 = getFloat(); 453ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f6 = getFloat(); 454ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f7 = getFloat(); 455ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f8 = getFloat(); 4565ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 4575baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 458a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], bitmap, f1, f2, f3, f4, f5, f6, f7, f8, paint); 459ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 460ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 461e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy case DrawBitmapData: { 462e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy SkBitmap* bitmap = getBitmapData(); 463e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy float x = getFloat(); 464e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy float y = getFloat(); 465e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy SkPaint* paint = getPaint(renderer); 466e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy ALOGD("%s%s %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], x, y, paint); 467e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy } 468e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy break; 469ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawBitmapMesh: { 470ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int verticesCount = 0; 471ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t colorsCount = 0; 472ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkBitmap* bitmap = getBitmap(); 473ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t meshWidth = getInt(); 474ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t meshHeight = getInt(); 475ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float* vertices = getFloats(verticesCount); 476ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase bool hasColors = getInt(); 477ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int* colors = hasColors ? getInts(colorsCount) : NULL; 4785ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 4795baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 480ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 481ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 482ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawPatch: { 483ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int32_t* xDivs = NULL; 484ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int32_t* yDivs = NULL; 485ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t* colors = NULL; 486ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t xDivsCount = 0; 487ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t yDivsCount = 0; 488ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int8_t numColors = 0; 489ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkBitmap* bitmap = getBitmap(); 490ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase xDivs = getInts(xDivsCount); 491ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase yDivs = getInts(yDivsCount); 492ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase colors = getUInts(numColors); 493a62f172215727a1e00af0cb934904e00926a86c9Romain Guy float left = getFloat(); 494a62f172215727a1e00af0cb934904e00926a86c9Romain Guy float top = getFloat(); 495a62f172215727a1e00af0cb934904e00926a86c9Romain Guy float right = getFloat(); 496a62f172215727a1e00af0cb934904e00926a86c9Romain Guy float bottom = getFloat(); 497be6f9dc1e71b425b7ac1c40c0a2c72d03eb9fbeeRomain Guy int alpha = getInt(); 498be6f9dc1e71b425b7ac1c40c0a2c72d03eb9fbeeRomain Guy SkXfermode::Mode mode = (SkXfermode::Mode) getInt(); 4995baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f", (char*) indent, OP_NAMES[op], 500a62f172215727a1e00af0cb934904e00926a86c9Romain Guy left, top, right, bottom); 501ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 502ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 503ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawColor: { 504ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int color = getInt(); 505ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int xferMode = getInt(); 5065baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s 0x%x %d", (char*) indent, OP_NAMES[op], color, xferMode); 507ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 508ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 509ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawRect: { 510ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 511ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 512ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 513ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 5145ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5155baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 516a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase f1, f2, f3, f4, paint); 517ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 518ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 519ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawRoundRect: { 520ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 521ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 522ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 523ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 524ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f5 = getFloat(); 525ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f6 = getFloat(); 5265ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5275baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 528a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, paint); 529ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 530ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 531ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawCircle: { 532ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 533ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 534ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 5355ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5365baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %p", 537a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, paint); 538ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 539ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 540ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawOval: { 541ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 542ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 543ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 544ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 5455ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5465baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", 547a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, paint); 548ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 549ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 550ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawArc: { 551ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 552ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 553ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 554ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 555ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f5 = getFloat(); 556ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f6 = getFloat(); 557ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int i1 = getInt(); 5585ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5595baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %d, %p", 560a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, i1, paint); 561ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 562ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 563ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawPath: { 564ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPath* path = getPath(); 5655ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5665baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p, %p", (char*) indent, OP_NAMES[op], path, paint); 567ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 568ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 569ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawLines: { 570ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int count = 0; 571ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float* points = getFloats(count); 5725ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5735baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 574ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 575ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 576ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawPoints: { 577ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int count = 0; 578ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float* points = getFloats(count); 5795ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5805baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 581ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 582ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 583325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy case DrawTextOnPath: { 584325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy getText(&text); 585325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy int32_t count = getInt(); 586325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy SkPath* path = getPath(); 587325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy float hOffset = getFloat(); 588325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy float vOffset = getFloat(); 589325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy SkPaint* paint = getPaint(renderer); 590325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy ALOGD("%s%s %s, %d, %d, %p", (char*) indent, OP_NAMES[op], 591325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy text.text(), text.length(), count, paint); 592325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy } 593325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy break; 594eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy case DrawPosText: { 595eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy getText(&text); 596eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy int count = getInt(); 597eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy int positionsCount = 0; 598eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy float* positions = getFloats(positionsCount); 5995ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 600eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy ALOGD("%s%s %s, %d, %d, %p", (char*) indent, OP_NAMES[op], 601a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase text.text(), text.length(), count, paint); 602eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy } 603996e57c84368058be793897ebc355b917a59abc2Raph Levien break; 604c25259519f1b74bb62a2b051b74537f073436b5cRomain Guy case DrawText: { 605996e57c84368058be793897ebc355b917a59abc2Raph Levien getText(&text); 60618edb81172daa9b98b53d226d94fc03249b1adedRomain Guy int32_t count = getInt(); 60718edb81172daa9b98b53d226d94fc03249b1adedRomain Guy float x = getFloat(); 60818edb81172daa9b98b53d226d94fc03249b1adedRomain Guy float y = getFloat(); 60918edb81172daa9b98b53d226d94fc03249b1adedRomain Guy int32_t positionsCount = 0; 610996e57c84368058be793897ebc355b917a59abc2Raph Levien float* positions = getFloats(positionsCount); 611996e57c84368058be793897ebc355b917a59abc2Raph Levien SkPaint* paint = getPaint(renderer); 61218edb81172daa9b98b53d226d94fc03249b1adedRomain Guy float length = getFloat(); 613996e57c84368058be793897ebc355b917a59abc2Raph Levien ALOGD("%s%s %s, %d, %d, %p", (char*) indent, OP_NAMES[op], 614996e57c84368058be793897ebc355b917a59abc2Raph Levien text.text(), text.length(), count, paint); 615996e57c84368058be793897ebc355b917a59abc2Raph Levien } 616996e57c84368058be793897ebc355b917a59abc2Raph Levien break; 617ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ResetShader: { 6185baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 619ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 620ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 621ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SetupShader: { 622ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkiaShader* shader = getShader(); 6235baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p", (char*) indent, OP_NAMES[op], shader); 624ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 625ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 626ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ResetColorFilter: { 6275baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 628ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 629ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 630ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SetupColorFilter: { 631ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkiaColorFilter *colorFilter = getColorFilter(); 6325baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p", (char*) indent, OP_NAMES[op], colorFilter); 633ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 634ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 635ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ResetShadow: { 6365baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 637ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 638ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 639ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SetupShadow: { 640ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float radius = getFloat(); 641ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float dx = getFloat(); 642ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float dy = getFloat(); 643ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int color = getInt(); 6445baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, 0x%x", (char*) indent, OP_NAMES[op], 645a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase radius, dx, dy, color); 646ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 647ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 6485ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy case ResetPaintFilter: { 6495ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 6505ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy } 6515ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy break; 6525ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy case SetupPaintFilter: { 6535ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy int clearBits = getInt(); 6545ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy int setBits = getInt(); 6555ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy ALOGD("%s%s 0x%x, 0x%x", (char*) indent, OP_NAMES[op], clearBits, setBits); 6565ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy } 6575ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy break; 658ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase default: 6595baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("Display List error: op not handled: %s%s", 660a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op]); 661ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 662ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 663ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 664a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase ALOGD("%sDone (%p, %s)", (char*) indent + 2, this, mName.string()); 665a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 666a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 667a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haasevoid DisplayList::updateMatrix() { 668a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (mMatrixDirty) { 669a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (!mTransformMatrix) { 670a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix = new SkMatrix(); 671a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 672a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (mMatrixFlags == 0 || mMatrixFlags == TRANSLATION) { 673a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->reset(); 674a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } else { 675a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (!mPivotExplicitlySet) { 676a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (mWidth != mPrevWidth || mHeight != mPrevHeight) { 677a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPrevWidth = mWidth; 678a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPrevHeight = mHeight; 679a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPivotX = mPrevWidth / 2; 680a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPivotY = mPrevHeight / 2; 681a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 682a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 683a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if ((mMatrixFlags & ROTATION_3D) == 0) { 684a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->setTranslate(mTranslationX, mTranslationY); 685a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->preRotate(mRotation, mPivotX, mPivotY); 686a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->preScale(mScaleX, mScaleY, mPivotX, mPivotY); 687a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } else { 688a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (!mTransformCamera) { 689a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera = new Sk3DView(); 690a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix3D = new SkMatrix(); 691a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 692a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->reset(); 693a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera->save(); 694a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->preScale(mScaleX, mScaleY, mPivotX, mPivotY); 695a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera->rotateX(mRotationX); 696a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera->rotateY(mRotationY); 697a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera->rotateZ(-mRotation); 698a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera->getMatrix(mTransformMatrix3D); 699a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix3D->preTranslate(-mPivotX, -mPivotY); 700a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix3D->postTranslate(mPivotX + mTranslationX, 701a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPivotY + mTranslationY); 702a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->postConcat(*mTransformMatrix3D); 703a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera->restore(); 704a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 705a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 706a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mMatrixDirty = false; 707a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 708a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 709a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 710a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haasevoid DisplayList::outputViewProperties(OpenGLRenderer& renderer, char* indent) { 7111271e2cc80b01d577e9db339459ef0222bb9320dChet Haase updateMatrix(); 7121271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mLeft != 0 || mTop != 0) { 7131271e2cc80b01d577e9db339459ef0222bb9320dChet Haase ALOGD("%s%s %d, %d", indent, "Translate (left, top)", mLeft, mTop); 7141271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } 7151271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mStaticMatrix) { 7161271e2cc80b01d577e9db339459ef0222bb9320dChet Haase ALOGD("%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 7171271e2cc80b01d577e9db339459ef0222bb9320dChet Haase indent, "ConcatMatrix (static)", mStaticMatrix, 7181271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(0), mStaticMatrix->get(1), 7191271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(2), mStaticMatrix->get(3), 7201271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(4), mStaticMatrix->get(5), 7211271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(6), mStaticMatrix->get(7), 7221271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(8)); 7231271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } 7241271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mAnimationMatrix) { 7251271e2cc80b01d577e9db339459ef0222bb9320dChet Haase ALOGD("%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 7261271e2cc80b01d577e9db339459ef0222bb9320dChet Haase indent, "ConcatMatrix (animation)", mAnimationMatrix, 7271271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(0), mAnimationMatrix->get(1), 7281271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(2), mAnimationMatrix->get(3), 7291271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(4), mAnimationMatrix->get(5), 7301271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(6), mAnimationMatrix->get(7), 7311271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(8)); 7321271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } 7331271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mMatrixFlags != 0) { 7341271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mMatrixFlags == TRANSLATION) { 7351271e2cc80b01d577e9db339459ef0222bb9320dChet Haase ALOGD("%s%s %f, %f", indent, "Translate", mTranslationX, mTranslationY); 7361271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } else { 7379420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase ALOGD("%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 7381271e2cc80b01d577e9db339459ef0222bb9320dChet Haase indent, "ConcatMatrix", mTransformMatrix, 7391271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(0), mTransformMatrix->get(1), 7401271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(2), mTransformMatrix->get(3), 7411271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(4), mTransformMatrix->get(5), 7421271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(6), mTransformMatrix->get(7), 7431271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(8)); 7449d1992deaeb3d60d5928f05b649a2cc654ba98a3Chet Haase } 7451271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } 7461271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mAlpha < 1 && !mCaching) { 7471271e2cc80b01d577e9db339459ef0222bb9320dChet Haase // TODO: should be able to store the size of a DL at record time and not 7481271e2cc80b01d577e9db339459ef0222bb9320dChet Haase // have to pass it into this call. In fact, this information might be in the 7491271e2cc80b01d577e9db339459ef0222bb9320dChet Haase // location/size info that we store with the new native transform data. 7501271e2cc80b01d577e9db339459ef0222bb9320dChet Haase int flags = SkCanvas::kHasAlphaLayer_SaveFlag; 751a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (mClipChildren) { 7521271e2cc80b01d577e9db339459ef0222bb9320dChet Haase flags |= SkCanvas::kClipToLayer_SaveFlag; 753a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 7541271e2cc80b01d577e9db339459ef0222bb9320dChet Haase ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", indent, "SaveLayerAlpha", 7551271e2cc80b01d577e9db339459ef0222bb9320dChet Haase (float) 0, (float) 0, (float) mRight - mLeft, (float) mBottom - mTop, 7561271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mMultipliedAlpha, flags); 7571271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } 7581271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mClipChildren) { 7591271e2cc80b01d577e9db339459ef0222bb9320dChet Haase ALOGD("%s%s %.2f, %.2f, %.2f, %.2f", indent, "ClipRect", 0.0f, 0.0f, 7601271e2cc80b01d577e9db339459ef0222bb9320dChet Haase (float) mRight - mLeft, (float) mBottom - mTop); 761a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 762a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 763ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 7641271e2cc80b01d577e9db339459ef0222bb9320dChet Haasevoid DisplayList::setViewProperties(OpenGLRenderer& renderer, uint32_t level) { 765a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase#if DEBUG_DISPLAY_LIST 766a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase uint32_t count = (level + 1) * 2; 767a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase char indent[count + 1]; 768a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase for (uint32_t i = 0; i < count; i++) { 769a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase indent[i] = ' '; 770a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 771a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase indent[count] = '\0'; 772a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase#endif 7731271e2cc80b01d577e9db339459ef0222bb9320dChet Haase updateMatrix(); 7741271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mLeft != 0 || mTop != 0) { 7751271e2cc80b01d577e9db339459ef0222bb9320dChet Haase DISPLAY_LIST_LOGD("%s%s %d, %d", indent, "Translate (left, top)", mLeft, mTop); 7761271e2cc80b01d577e9db339459ef0222bb9320dChet Haase renderer.translate(mLeft, mTop); 7771271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } 7781271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mStaticMatrix) { 7791271e2cc80b01d577e9db339459ef0222bb9320dChet Haase DISPLAY_LIST_LOGD( 7801271e2cc80b01d577e9db339459ef0222bb9320dChet Haase "%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 7811271e2cc80b01d577e9db339459ef0222bb9320dChet Haase indent, "ConcatMatrix (static)", mStaticMatrix, 7821271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(0), mStaticMatrix->get(1), 7831271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(2), mStaticMatrix->get(3), 7841271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(4), mStaticMatrix->get(5), 7851271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(6), mStaticMatrix->get(7), 7861271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(8)); 7871271e2cc80b01d577e9db339459ef0222bb9320dChet Haase renderer.concatMatrix(mStaticMatrix); 7881271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } else if (mAnimationMatrix) { 7891271e2cc80b01d577e9db339459ef0222bb9320dChet Haase DISPLAY_LIST_LOGD( 7901271e2cc80b01d577e9db339459ef0222bb9320dChet Haase "%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 7911271e2cc80b01d577e9db339459ef0222bb9320dChet Haase indent, "ConcatMatrix (animation)", mAnimationMatrix, 7921271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(0), mAnimationMatrix->get(1), 7931271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(2), mAnimationMatrix->get(3), 7941271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(4), mAnimationMatrix->get(5), 7951271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(6), mAnimationMatrix->get(7), 7961271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(8)); 7971271e2cc80b01d577e9db339459ef0222bb9320dChet Haase renderer.concatMatrix(mAnimationMatrix); 7981271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } 7991271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mMatrixFlags != 0) { 8001271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mMatrixFlags == TRANSLATION) { 8011271e2cc80b01d577e9db339459ef0222bb9320dChet Haase DISPLAY_LIST_LOGD("%s%s %f, %f", indent, "Translate", mTranslationX, mTranslationY); 8021271e2cc80b01d577e9db339459ef0222bb9320dChet Haase renderer.translate(mTranslationX, mTranslationY); 8031271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } else { 8049420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase DISPLAY_LIST_LOGD( 8059420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase "%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 8061271e2cc80b01d577e9db339459ef0222bb9320dChet Haase indent, "ConcatMatrix", mTransformMatrix, 8071271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(0), mTransformMatrix->get(1), 8081271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(2), mTransformMatrix->get(3), 8091271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(4), mTransformMatrix->get(5), 8101271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(6), mTransformMatrix->get(7), 8111271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(8)); 8121271e2cc80b01d577e9db339459ef0222bb9320dChet Haase renderer.concatMatrix(mTransformMatrix); 813a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 8141271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } 8151271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mAlpha < 1 && !mCaching) { 8161271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (!mHasOverlappingRendering) { 8171271e2cc80b01d577e9db339459ef0222bb9320dChet Haase DISPLAY_LIST_LOGD("%s%s %.2f", indent, "SetAlpha", mAlpha); 8181271e2cc80b01d577e9db339459ef0222bb9320dChet Haase renderer.setAlpha(mAlpha); 8191271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } else { 8201271e2cc80b01d577e9db339459ef0222bb9320dChet Haase // TODO: should be able to store the size of a DL at record time and not 8211271e2cc80b01d577e9db339459ef0222bb9320dChet Haase // have to pass it into this call. In fact, this information might be in the 8221271e2cc80b01d577e9db339459ef0222bb9320dChet Haase // location/size info that we store with the new native transform data. 8231271e2cc80b01d577e9db339459ef0222bb9320dChet Haase int flags = SkCanvas::kHasAlphaLayer_SaveFlag; 8241271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mClipChildren) { 8251271e2cc80b01d577e9db339459ef0222bb9320dChet Haase flags |= SkCanvas::kClipToLayer_SaveFlag; 8269d1992deaeb3d60d5928f05b649a2cc654ba98a3Chet Haase } 8271271e2cc80b01d577e9db339459ef0222bb9320dChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", indent, "SaveLayerAlpha", 8281271e2cc80b01d577e9db339459ef0222bb9320dChet Haase (float) 0, (float) 0, (float) mRight - mLeft, (float) mBottom - mTop, 8291271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mMultipliedAlpha, flags); 8301271e2cc80b01d577e9db339459ef0222bb9320dChet Haase renderer.saveLayerAlpha(0, 0, mRight - mLeft, mBottom - mTop, 8311271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mMultipliedAlpha, flags); 8329d1992deaeb3d60d5928f05b649a2cc654ba98a3Chet Haase } 8331271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } 8341271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mClipChildren) { 8351271e2cc80b01d577e9db339459ef0222bb9320dChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f", indent, "ClipRect", 0.0f, 0.0f, 8361271e2cc80b01d577e9db339459ef0222bb9320dChet Haase (float) mRight - mLeft, (float) mBottom - mTop); 8371271e2cc80b01d577e9db339459ef0222bb9320dChet Haase renderer.clipRect(0, 0, mRight - mLeft, mBottom - mTop, 8381271e2cc80b01d577e9db339459ef0222bb9320dChet Haase SkRegion::kIntersect_Op); 839a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 840a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 841a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 842ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase/** 843ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * Changes to replay(), specifically those involving opcode or parameter changes, should be mimicked 844ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * in the output() function, since that function processes the same list of opcodes for the 845ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * purposes of logging display list info for a given view. 846ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase */ 8471271e2cc80b01d577e9db339459ef0222bb9320dChet Haasestatus_t DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flags, uint32_t level) { 848486590963e2207d68eebd6944fec70d50d41116aChet Haase status_t drawGlStatus = DrawGlInfo::kStatusDone; 849b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy TextContainer text; 850b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mReader.rewind(); 851b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 852ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#if DEBUG_DISPLAY_LIST 853ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy uint32_t count = (level + 1) * 2; 854ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy char indent[count + 1]; 855ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy for (uint32_t i = 0; i < count; i++) { 856ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy indent[i] = ' '; 857ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy } 858ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy indent[count] = '\0'; 859a23eed808a1ae4ec0d818c0a9238385e797fd056Chet Haase Rect* clipRect = renderer.getClipRect(); 860a23eed808a1ae4ec0d818c0a9238385e797fd056Chet Haase DISPLAY_LIST_LOGD("%sStart display list (%p, %s), clipRect: %.0f, %.f, %.0f, %.0f", 861a23eed808a1ae4ec0d818c0a9238385e797fd056Chet Haase (char*) indent + 2, this, mName.string(), clipRect->left, clipRect->top, 862a23eed808a1ae4ec0d818c0a9238385e797fd056Chet Haase clipRect->right, clipRect->bottom); 863ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#endif 864b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 86513631f3da855f200a151e7837ed9f6b079622b58Romain Guy renderer.startMark(mName.string()); 8668a4ac610e1aaf04931ac1af54b146a7fc8e66114Romain Guy 8671271e2cc80b01d577e9db339459ef0222bb9320dChet Haase int restoreTo = renderer.save(SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); 8681271e2cc80b01d577e9db339459ef0222bb9320dChet Haase DISPLAY_LIST_LOGD("%s%s %d %d", indent, "Save", 8691271e2cc80b01d577e9db339459ef0222bb9320dChet Haase SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag, restoreTo); 8701271e2cc80b01d577e9db339459ef0222bb9320dChet Haase setViewProperties(renderer, level); 8718a4ac610e1aaf04931ac1af54b146a7fc8e66114Romain Guy 8728a4ac610e1aaf04931ac1af54b146a7fc8e66114Romain Guy if (renderer.quickRejectNoScissor(0, 0, mWidth, mHeight)) { 873b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, "RestoreToCount", restoreTo); 874b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase renderer.restoreToCount(restoreTo); 875b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase renderer.endMark(); 876486590963e2207d68eebd6944fec70d50d41116aChet Haase return drawGlStatus; 877b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase } 87813631f3da855f200a151e7837ed9f6b079622b58Romain Guy 8799c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase DisplayListLogBuffer& logBuffer = DisplayListLogBuffer::getInstance(); 880ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy int saveCount = renderer.getSaveCount() - 1; 8818a4ac610e1aaf04931ac1af54b146a7fc8e66114Romain Guy 882b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy while (!mReader.eof()) { 8835b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int op = mReader.readInt(); 88433f6beb10f98e8ba96250e284876d607055d278dRomain Guy if (op & OP_MAY_BE_SKIPPED_MASK) { 885390f882f8905e8d1ac0d4b7f2e01aa04dccc3c16Romain Guy int32_t skip = mReader.readInt(); 88633f6beb10f98e8ba96250e284876d607055d278dRomain Guy if (CC_LIKELY(flags & kReplayFlag_ClipChildren)) { 88733f6beb10f98e8ba96250e284876d607055d278dRomain Guy mReader.skip(skip); 88833f6beb10f98e8ba96250e284876d607055d278dRomain Guy DISPLAY_LIST_LOGD("%s%s skipping %d bytes", (char*) indent, 88933f6beb10f98e8ba96250e284876d607055d278dRomain Guy OP_NAMES[op & ~OP_MAY_BE_SKIPPED_MASK], skip); 89033f6beb10f98e8ba96250e284876d607055d278dRomain Guy continue; 89133f6beb10f98e8ba96250e284876d607055d278dRomain Guy } else { 89233f6beb10f98e8ba96250e284876d607055d278dRomain Guy op &= ~OP_MAY_BE_SKIPPED_MASK; 89333f6beb10f98e8ba96250e284876d607055d278dRomain Guy } 89433f6beb10f98e8ba96250e284876d607055d278dRomain Guy } 8959c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase logBuffer.writeCommand(level, op); 896ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 8978a4ac610e1aaf04931ac1af54b146a7fc8e66114Romain Guy#if DEBUG_DISPLAY_LIST_OPS_AS_EVENTS 8988a4ac610e1aaf04931ac1af54b146a7fc8e66114Romain Guy Caches::getInstance().eventMark(strlen(OP_NAMES[op]), OP_NAMES[op]); 8998a4ac610e1aaf04931ac1af54b146a7fc8e66114Romain Guy#endif 9008a4ac610e1aaf04931ac1af54b146a7fc8e66114Romain Guy 9015b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy switch (op) { 902daf98e941e140e8739458126640183b9f296a2abChet Haase case DrawGLFunction: { 903daf98e941e140e8739458126640183b9f296a2abChet Haase Functor *functor = (Functor *) getInt(); 904daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], functor); 90513631f3da855f200a151e7837ed9f6b079622b58Romain Guy renderer.startMark("GL functor"); 9066554943a1dd6854c0f4976900956e556767b49e1Romain Guy drawGlStatus |= renderer.callDrawGLFunction(functor, dirty); 90713631f3da855f200a151e7837ed9f6b079622b58Romain Guy renderer.endMark(); 908daf98e941e140e8739458126640183b9f296a2abChet Haase } 909daf98e941e140e8739458126640183b9f296a2abChet Haase break; 910b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Save: { 91133f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t rendererNum = getInt(); 912daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, OP_NAMES[op], rendererNum); 913daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.save(rendererNum); 914b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 915b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 916b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Restore: { 917daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 918b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.restore(); 919b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 920b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 921b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case RestoreToCount: { 92233f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t restoreCount = saveCount + getInt(); 923daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, OP_NAMES[op], restoreCount); 924daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.restoreToCount(restoreCount); 925b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 926b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 927b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SaveLayer: { 928daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 929daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 930daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 931daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 9325ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 93333f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t flags = getInt(); 934daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p, 0x%x", (char*) indent, 935a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase OP_NAMES[op], f1, f2, f3, f4, paint, flags); 936daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.saveLayer(f1, f2, f3, f4, paint, flags); 937b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 938b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 9395b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy case SaveLayerAlpha: { 940daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 941daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 942daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 943daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 94433f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t alpha = getInt(); 94533f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t flags = getInt(); 946daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", (char*) indent, 947a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase OP_NAMES[op], f1, f2, f3, f4, alpha, flags); 948daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.saveLayerAlpha(f1, f2, f3, f4, alpha, flags); 9495b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy } 9505b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy break; 951b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Translate: { 952daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 953daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 954daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], f1, f2); 955daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.translate(f1, f2); 956b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 957b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 958b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Rotate: { 959daf98e941e140e8739458126640183b9f296a2abChet Haase float rotation = getFloat(); 960daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f", (char*) indent, OP_NAMES[op], rotation); 961daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.rotate(rotation); 962b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 963b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 964b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Scale: { 965daf98e941e140e8739458126640183b9f296a2abChet Haase float sx = getFloat(); 966daf98e941e140e8739458126640183b9f296a2abChet Haase float sy = getFloat(); 967daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 968daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.scale(sx, sy); 969b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 970b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 971807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy case Skew: { 972daf98e941e140e8739458126640183b9f296a2abChet Haase float sx = getFloat(); 973daf98e941e140e8739458126640183b9f296a2abChet Haase float sy = getFloat(); 974daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 975daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.skew(sx, sy); 976807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy } 977807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy break; 978b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetMatrix: { 979daf98e941e140e8739458126640183b9f296a2abChet Haase SkMatrix* matrix = getMatrix(); 980daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], matrix); 981daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setMatrix(matrix); 982b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 983b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 984b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ConcatMatrix: { 985daf98e941e140e8739458126640183b9f296a2abChet Haase SkMatrix* matrix = getMatrix(); 986a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase DISPLAY_LIST_LOGD( 987a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase "%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 988a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], matrix, 989a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase matrix->get(0), matrix->get(1), matrix->get(2), 990a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase matrix->get(3), matrix->get(4), matrix->get(5), 991a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase matrix->get(6), matrix->get(7), matrix->get(8)); 992daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.concatMatrix(matrix); 993b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 994b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 995b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ClipRect: { 996daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 997daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 998daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 999daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 100033f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t regionOp = getInt(); 1001daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d", (char*) indent, OP_NAMES[op], 1002a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase f1, f2, f3, f4, regionOp); 1003daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.clipRect(f1, f2, f3, f4, (SkRegion::Op) regionOp); 1004b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1005b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 10060fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy case DrawDisplayList: { 1007daf98e941e140e8739458126640183b9f296a2abChet Haase DisplayList* displayList = getDisplayList(); 100833f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t flags = getInt(); 100933f6beb10f98e8ba96250e284876d607055d278dRomain Guy DISPLAY_LIST_LOGD("%s%s %p, %dx%d, 0x%x %d", (char*) indent, OP_NAMES[op], 10101271e2cc80b01d577e9db339459ef0222bb9320dChet Haase displayList, mWidth, mHeight, flags, level + 1); 10111271e2cc80b01d577e9db339459ef0222bb9320dChet Haase drawGlStatus |= renderer.drawDisplayList(displayList, dirty, flags, level + 1); 10120fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy } 10130fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy break; 10146c319ca1275c8db892c39b48fc54864c949f9171Romain Guy case DrawLayer: { 1015d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase int oldAlpha = -1; 1016daf98e941e140e8739458126640183b9f296a2abChet Haase Layer* layer = (Layer*) getInt(); 1017daf98e941e140e8739458126640183b9f296a2abChet Haase float x = getFloat(); 1018daf98e941e140e8739458126640183b9f296a2abChet Haase float y = getFloat(); 10195ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1020d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase if (mCaching && mMultipliedAlpha < 255) { 1021d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase oldAlpha = layer->getAlpha(); 1022d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase layer->setAlpha(mMultipliedAlpha); 1023a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 1024daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 1025a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase layer, x, y, paint); 1026486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawLayer(layer, x, y, paint); 1027d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase if (oldAlpha >= 0) { 1028d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase layer->setAlpha(oldAlpha); 1029d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase } 10306c319ca1275c8db892c39b48fc54864c949f9171Romain Guy } 10316c319ca1275c8db892c39b48fc54864c949f9171Romain Guy break; 1032b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmap: { 1033d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase int oldAlpha = -1; 1034daf98e941e140e8739458126640183b9f296a2abChet Haase SkBitmap* bitmap = getBitmap(); 1035daf98e941e140e8739458126640183b9f296a2abChet Haase float x = getFloat(); 1036daf98e941e140e8739458126640183b9f296a2abChet Haase float y = getFloat(); 10375ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1038d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase if (mCaching && mMultipliedAlpha < 255) { 1039d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase oldAlpha = paint->getAlpha(); 1040b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase paint->setAlpha(mMultipliedAlpha); 1041b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase } 1042daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 1043a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase bitmap, x, y, paint); 1044486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawBitmap(bitmap, x, y, paint); 1045d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase if (oldAlpha >= 0) { 1046d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase paint->setAlpha(oldAlpha); 1047d15ebf25c595b855f6978d0600218e3ea5f31e92Chet Haase } 1048b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1049b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1050b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmapMatrix: { 1051daf98e941e140e8739458126640183b9f296a2abChet Haase SkBitmap* bitmap = getBitmap(); 1052daf98e941e140e8739458126640183b9f296a2abChet Haase SkMatrix* matrix = getMatrix(); 10535ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1054daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %p, %p", (char*) indent, OP_NAMES[op], 1055a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase bitmap, matrix, paint); 1056486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawBitmap(bitmap, matrix, paint); 1057b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1058b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1059b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmapRect: { 1060daf98e941e140e8739458126640183b9f296a2abChet Haase SkBitmap* bitmap = getBitmap(); 1061daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 1062daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 1063daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 1064daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 1065daf98e941e140e8739458126640183b9f296a2abChet Haase float f5 = getFloat(); 1066daf98e941e140e8739458126640183b9f296a2abChet Haase float f6 = getFloat(); 1067daf98e941e140e8739458126640183b9f296a2abChet Haase float f7 = getFloat(); 1068daf98e941e140e8739458126640183b9f296a2abChet Haase float f8 = getFloat(); 10695ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1070daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 1071a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], bitmap, 1072a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase f1, f2, f3, f4, f5, f6, f7, f8,paint); 1073486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawBitmap(bitmap, f1, f2, f3, f4, f5, f6, f7, f8, paint); 1074b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1075b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1076e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy case DrawBitmapData: { 1077e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy SkBitmap* bitmap = getBitmapData(); 1078e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy float x = getFloat(); 1079e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy float y = getFloat(); 1080e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy SkPaint* paint = getPaint(renderer); 1081e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 1082e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy bitmap, x, y, paint); 1083486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawBitmap(bitmap, x, y, paint); 1084e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy } 1085e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy break; 10865a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy case DrawBitmapMesh: { 108733f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t verticesCount = 0; 10885a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t colorsCount = 0; 10895a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 10905a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy SkBitmap* bitmap = getBitmap(); 10915a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t meshWidth = getInt(); 10925a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t meshHeight = getInt(); 10935a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy float* vertices = getFloats(verticesCount); 10945a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy bool hasColors = getInt(); 109533f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t* colors = hasColors ? getInts(colorsCount) : NULL; 10965ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 10975a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 1098daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 1099486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawBitmapMesh(bitmap, meshWidth, meshHeight, vertices, 1100486590963e2207d68eebd6944fec70d50d41116aChet Haase colors, paint); 11015a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } 1102a566b7c3aada08d37cf08096c972e3e641bed773Romain Guy break; 1103b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawPatch: { 1104b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int32_t* xDivs = NULL; 1105b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int32_t* yDivs = NULL; 11064bb942083a0d4db746adf95349108dd8ef842e32Romain Guy uint32_t* colors = NULL; 1107b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy uint32_t xDivsCount = 0; 1108b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy uint32_t yDivsCount = 0; 11094bb942083a0d4db746adf95349108dd8ef842e32Romain Guy int8_t numColors = 0; 1110b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1111b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkBitmap* bitmap = getBitmap(); 1112b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1113b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy xDivs = getInts(xDivsCount); 1114b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy yDivs = getInts(yDivsCount); 11154bb942083a0d4db746adf95349108dd8ef842e32Romain Guy colors = getUInts(numColors); 1116b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 11179ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float left = getFloat(); 11189ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float top = getFloat(); 11199ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float right = getFloat(); 11209ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float bottom = getFloat(); 1121be6f9dc1e71b425b7ac1c40c0a2c72d03eb9fbeeRomain Guy 1122be6f9dc1e71b425b7ac1c40c0a2c72d03eb9fbeeRomain Guy int alpha = getInt(); 1123be6f9dc1e71b425b7ac1c40c0a2c72d03eb9fbeeRomain Guy SkXfermode::Mode mode = (SkXfermode::Mode) getInt(); 11249ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy 1125daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 1126486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawPatch(bitmap, xDivs, yDivs, colors, 1127be6f9dc1e71b425b7ac1c40c0a2c72d03eb9fbeeRomain Guy xDivsCount, yDivsCount, numColors, left, top, right, bottom, 1128be6f9dc1e71b425b7ac1c40c0a2c72d03eb9fbeeRomain Guy alpha, mode); 1129b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1130b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1131b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawColor: { 113233f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t color = getInt(); 113333f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t xferMode = getInt(); 1134daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s 0x%x %d", (char*) indent, OP_NAMES[op], color, xferMode); 1135486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawColor(color, (SkXfermode::Mode) xferMode); 1136b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1137b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1138b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawRect: { 1139daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 1140daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 1141daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 1142daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 11435ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1144daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 1145a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase f1, f2, f3, f4, paint); 1146486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawRect(f1, f2, f3, f4, paint); 1147b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1148b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 114901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy case DrawRoundRect: { 1150daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 1151daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 1152daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 1153daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 1154daf98e941e140e8739458126640183b9f296a2abChet Haase float f5 = getFloat(); 1155daf98e941e140e8739458126640183b9f296a2abChet Haase float f6 = getFloat(); 11565ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1157daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 1158a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, paint); 1159486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawRoundRect(f1, f2, f3, f4, f5, f6, paint); 116001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy } 116101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy break; 116201d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy case DrawCircle: { 1163daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 1164daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 1165daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 11665ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1167daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %p", 1168a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, paint); 1169486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawCircle(f1, f2, f3, paint); 117001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy } 117101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy break; 1172c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy case DrawOval: { 1173daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 1174daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 1175daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 1176daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 11775ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1178daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", 1179a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, paint); 1180486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawOval(f1, f2, f3, f4, paint); 1181c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy } 1182c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy break; 11838b2f5267f16c295f12faab810527cd6311997e34Romain Guy case DrawArc: { 1184daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 1185daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 1186daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 1187daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 1188daf98e941e140e8739458126640183b9f296a2abChet Haase float f5 = getFloat(); 1189daf98e941e140e8739458126640183b9f296a2abChet Haase float f6 = getFloat(); 119033f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t i1 = getInt(); 11915ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1192daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %d, %p", 1193a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, i1, paint); 1194486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawArc(f1, f2, f3, f4, f5, f6, i1 == 1, paint); 11958b2f5267f16c295f12faab810527cd6311997e34Romain Guy } 11968b2f5267f16c295f12faab810527cd6311997e34Romain Guy break; 1197b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawPath: { 1198daf98e941e140e8739458126640183b9f296a2abChet Haase SkPath* path = getPath(); 11995ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1200daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %p", (char*) indent, OP_NAMES[op], path, paint); 1201486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawPath(path, paint); 1202b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1203b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1204b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawLines: { 120533f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t count = 0; 1206b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy float* points = getFloats(count); 12075ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1208daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 1209486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawLines(points, count, paint); 1210b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1211b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1212ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy case DrawPoints: { 121333f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t count = 0; 1214ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy float* points = getFloats(count); 12155ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1216ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 1217486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawPoints(points, count, paint); 1218ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy } 1219ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy break; 1220325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy case DrawTextOnPath: { 1221325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy getText(&text); 1222325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy int32_t count = getInt(); 1223325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy SkPath* path = getPath(); 1224325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy float hOffset = getFloat(); 1225325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy float vOffset = getFloat(); 1226325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy SkPaint* paint = getPaint(renderer); 1227325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %p", (char*) indent, OP_NAMES[op], 1228325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy text.text(), text.length(), count, paint); 1229486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawTextOnPath(text.text(), text.length(), count, path, 1230325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy hOffset, vOffset, paint); 1231325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy } 1232325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy break; 1233eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy case DrawPosText: { 1234eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy getText(&text); 123533f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t count = getInt(); 123633f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t positionsCount = 0; 1237eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy float* positions = getFloats(positionsCount); 12385ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1239eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %p", (char*) indent, 1240eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy OP_NAMES[op], text.text(), text.length(), count, paint); 1241486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawPosText(text.text(), text.length(), count, 1242486590963e2207d68eebd6944fec70d50d41116aChet Haase positions, paint); 1243eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy } 1244eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy break; 1245c25259519f1b74bb62a2b051b74537f073436b5cRomain Guy case DrawText: { 1246996e57c84368058be793897ebc355b917a59abc2Raph Levien getText(&text); 1247996e57c84368058be793897ebc355b917a59abc2Raph Levien int32_t count = getInt(); 1248996e57c84368058be793897ebc355b917a59abc2Raph Levien float x = getFloat(); 1249996e57c84368058be793897ebc355b917a59abc2Raph Levien float y = getFloat(); 1250996e57c84368058be793897ebc355b917a59abc2Raph Levien int32_t positionsCount = 0; 1251996e57c84368058be793897ebc355b917a59abc2Raph Levien float* positions = getFloats(positionsCount); 1252996e57c84368058be793897ebc355b917a59abc2Raph Levien SkPaint* paint = getPaint(renderer); 1253996e57c84368058be793897ebc355b917a59abc2Raph Levien float length = getFloat(); 1254996e57c84368058be793897ebc355b917a59abc2Raph Levien DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %.2f, %.2f, %p, %.2f", (char*) indent, 1255996e57c84368058be793897ebc355b917a59abc2Raph Levien OP_NAMES[op], text.text(), text.length(), count, x, y, paint, length); 1256c25259519f1b74bb62a2b051b74537f073436b5cRomain Guy drawGlStatus |= renderer.drawText(text.text(), text.length(), count, 1257996e57c84368058be793897ebc355b917a59abc2Raph Levien x, y, positions, paint, length); 1258996e57c84368058be793897ebc355b917a59abc2Raph Levien } 1259996e57c84368058be793897ebc355b917a59abc2Raph Levien break; 1260b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetShader: { 1261daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 1262b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetShader(); 1263b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1264b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1265b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupShader: { 1266daf98e941e140e8739458126640183b9f296a2abChet Haase SkiaShader* shader = getShader(); 1267daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], shader); 1268daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setupShader(shader); 1269b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1270b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1271b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetColorFilter: { 1272daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 1273b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetColorFilter(); 1274b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1275b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1276b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupColorFilter: { 1277daf98e941e140e8739458126640183b9f296a2abChet Haase SkiaColorFilter *colorFilter = getColorFilter(); 1278daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], colorFilter); 1279daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setupColorFilter(colorFilter); 1280b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1281b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1282b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetShadow: { 1283daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 1284b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetShadow(); 1285b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1286b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1287b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupShadow: { 1288daf98e941e140e8739458126640183b9f296a2abChet Haase float radius = getFloat(); 1289daf98e941e140e8739458126640183b9f296a2abChet Haase float dx = getFloat(); 1290daf98e941e140e8739458126640183b9f296a2abChet Haase float dy = getFloat(); 129133f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t color = getInt(); 1292daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, 0x%x", (char*) indent, OP_NAMES[op], 1293a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase radius, dx, dy, color); 1294daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setupShadow(radius, dx, dy, color); 1295daf98e941e140e8739458126640183b9f296a2abChet Haase } 1296daf98e941e140e8739458126640183b9f296a2abChet Haase break; 12975ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy case ResetPaintFilter: { 12985ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 12995ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy renderer.resetPaintFilter(); 13005ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy } 13015ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy break; 13025ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy case SetupPaintFilter: { 130333f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t clearBits = getInt(); 130433f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t setBits = getInt(); 13055ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy DISPLAY_LIST_LOGD("%s%s 0x%x, 0x%x", (char*) indent, OP_NAMES[op], 13065ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy clearBits, setBits); 13075ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy renderer.setupPaintFilter(clearBits, setBits); 13085ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy } 13095ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy break; 1310daf98e941e140e8739458126640183b9f296a2abChet Haase default: 1311daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("Display List error: op not handled: %s%s", 1312a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op]); 1313daf98e941e140e8739458126640183b9f296a2abChet Haase break; 1314b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1315b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1316ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 13171271e2cc80b01d577e9db339459ef0222bb9320dChet Haase DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, "RestoreToCount", restoreTo); 13181271e2cc80b01d577e9db339459ef0222bb9320dChet Haase renderer.restoreToCount(restoreTo); 131913631f3da855f200a151e7837ed9f6b079622b58Romain Guy renderer.endMark(); 132013631f3da855f200a151e7837ed9f6b079622b58Romain Guy 1321a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase DISPLAY_LIST_LOGD("%sDone (%p, %s), returning %d", (char*) indent + 2, this, mName.string(), 13226554943a1dd6854c0f4976900956e556767b49e1Romain Guy drawGlStatus); 13236554943a1dd6854c0f4976900956e556767b49e1Romain Guy return drawGlStatus; 1324b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 1325b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1326b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/////////////////////////////////////////////////////////////////////////////// 13274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Base structure 13284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 13294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 133058ecc204fbcacef34806290492384677a330d4d4Romain GuyDisplayListRenderer::DisplayListRenderer(): 133158ecc204fbcacef34806290492384677a330d4d4Romain Guy mCaches(Caches::getInstance()), mWriter(MIN_WRITER_SIZE), 133233f6beb10f98e8ba96250e284876d607055d278dRomain Guy mTranslateX(0.0f), mTranslateY(0.0f), mHasTranslate(false), mHasDrawOps(false) { 13334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 13344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 13354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain GuyDisplayListRenderer::~DisplayListRenderer() { 13364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy reset(); 13374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 13384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 13394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::reset() { 13404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.reset(); 13415c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 134258ecc204fbcacef34806290492384677a330d4d4Romain Guy mCaches.resourceCache.lock(); 134358ecc204fbcacef34806290492384677a330d4d4Romain Guy 13445c13d89c1332fcc499379b9064b891187b75ca32Chet Haase for (size_t i = 0; i < mBitmapResources.size(); i++) { 134558ecc204fbcacef34806290492384677a330d4d4Romain Guy mCaches.resourceCache.decrementRefcountLocked(mBitmapResources.itemAt(i)); 13465c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 1347d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 134849c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy for (size_t i = 0; i < mOwnedBitmapResources.size(); i++) { 134958ecc204fbcacef34806290492384677a330d4d4Romain Guy mCaches.resourceCache.decrementRefcountLocked(mOwnedBitmapResources.itemAt(i)); 135049c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy } 135149c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy 1352d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy for (size_t i = 0; i < mFilterResources.size(); i++) { 135358ecc204fbcacef34806290492384677a330d4d4Romain Guy mCaches.resourceCache.decrementRefcountLocked(mFilterResources.itemAt(i)); 1354d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy } 1355d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 135643ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy for (size_t i = 0; i < mShaders.size(); i++) { 135758ecc204fbcacef34806290492384677a330d4d4Romain Guy mCaches.resourceCache.decrementRefcountLocked(mShaders.itemAt(i)); 135843ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy } 135943ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy 1360d34dd71800d9a1077e58c3b7f2511c46848da417Chet Haase for (size_t i = 0; i < mSourcePaths.size(); i++) { 136158ecc204fbcacef34806290492384677a330d4d4Romain Guy mCaches.resourceCache.decrementRefcountLocked(mSourcePaths.itemAt(i)); 1362d34dd71800d9a1077e58c3b7f2511c46848da417Chet Haase } 136358ecc204fbcacef34806290492384677a330d4d4Romain Guy 136458ecc204fbcacef34806290492384677a330d4d4Romain Guy mCaches.resourceCache.unlock(); 136558ecc204fbcacef34806290492384677a330d4d4Romain Guy 136658ecc204fbcacef34806290492384677a330d4d4Romain Guy mBitmapResources.clear(); 136758ecc204fbcacef34806290492384677a330d4d4Romain Guy mOwnedBitmapResources.clear(); 136858ecc204fbcacef34806290492384677a330d4d4Romain Guy mFilterResources.clear(); 1369d34dd71800d9a1077e58c3b7f2511c46848da417Chet Haase mSourcePaths.clear(); 1370d34dd71800d9a1077e58c3b7f2511c46848da417Chet Haase 137158ecc204fbcacef34806290492384677a330d4d4Romain Guy mShaders.clear(); 137258ecc204fbcacef34806290492384677a330d4d4Romain Guy mShaderMap.clear(); 137358ecc204fbcacef34806290492384677a330d4d4Romain Guy 137443ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy mPaints.clear(); 137543ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy mPaintMap.clear(); 1376d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 13772fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPaths.clear(); 13782fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPathMap.clear(); 1379d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 1380d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mMatrices.clear(); 138104c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy 138204c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy mHasDrawOps = false; 13834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 13844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 13854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 13864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Operations 13874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 13884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1389162a0217563f4665da6eb183dfce0fef740f641fJeff BrownDisplayList* DisplayListRenderer::getDisplayList(DisplayList* displayList) { 1390162a0217563f4665da6eb183dfce0fef740f641fJeff Brown if (!displayList) { 1391162a0217563f4665da6eb183dfce0fef740f641fJeff Brown displayList = new DisplayList(*this); 13925977baa1fa24125c148a72699b53e62abaf08960Chet Haase } else { 1393162a0217563f4665da6eb183dfce0fef740f641fJeff Brown displayList->initFromDisplayListRenderer(*this, true); 13945977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 139504c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy displayList->setRenderable(mHasDrawOps); 1396162a0217563f4665da6eb183dfce0fef740f641fJeff Brown return displayList; 13975977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 13985977baa1fa24125c148a72699b53e62abaf08960Chet Haase 139949c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guybool DisplayListRenderer::isDeferred() { 140049c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy return true; 140149c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy} 140249c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy 1403b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyvoid DisplayListRenderer::setViewport(int width, int height) { 1404b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mOrthoMatrix.loadOrtho(0, width, height, 0, -1, 1); 1405b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1406b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mWidth = width; 1407b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mHeight = height; 1408b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 1409b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 141044b2fe3fc114ee5f7273c6b0fee2cc999bf244a2Chet Haaseint DisplayListRenderer::prepareDirty(float left, float top, 14117d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy float right, float bottom, bool opaque) { 1412b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSnapshot = new Snapshot(mFirstSnapshot, 1413b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); 1414b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSaveCount = 1; 141545e4c3df6c00ac98ff6144de9af574877d4fff19Romain Guy 1416b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSnapshot->setClip(0.0f, 0.0f, mWidth, mHeight); 141745e4c3df6c00ac98ff6144de9af574877d4fff19Romain Guy mDirtyClip = opaque; 141845e4c3df6c00ac98ff6144de9af574877d4fff19Romain Guy 141927454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mRestoreSaveCount = -1; 142045e4c3df6c00ac98ff6144de9af574877d4fff19Romain Guy 142144b2fe3fc114ee5f7273c6b0fee2cc999bf244a2Chet Haase return DrawGlInfo::kStatusDone; // No invalidate needed at record-time 142227454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy} 142327454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy 142427454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guyvoid DisplayListRenderer::finish() { 142527454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy insertRestoreToCount(); 142633f6beb10f98e8ba96250e284876d607055d278dRomain Guy insertTranlate(); 1427b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 1428b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1429daf98e941e140e8739458126640183b9f296a2abChet Haasevoid DisplayListRenderer::interrupt() { 1430daf98e941e140e8739458126640183b9f296a2abChet Haase} 1431daf98e941e140e8739458126640183b9f296a2abChet Haase 14322b1847ea60650a9f68372abe860415f18b55081dRomain Guyvoid DisplayListRenderer::resume() { 14334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14356554943a1dd6854c0f4976900956e556767b49e1Romain Guystatus_t DisplayListRenderer::callDrawGLFunction(Functor *functor, Rect& dirty) { 1436cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy // Ignore dirty during recording, it matters only when we replay 1437daf98e941e140e8739458126640183b9f296a2abChet Haase addOp(DisplayList::DrawGLFunction); 1438daf98e941e140e8739458126640183b9f296a2abChet Haase addInt((int) functor); 14396554943a1dd6854c0f4976900956e556767b49e1Romain Guy return DrawGlInfo::kStatusDone; // No invalidate needed at record-time 1440daf98e941e140e8739458126640183b9f296a2abChet Haase} 1441daf98e941e140e8739458126640183b9f296a2abChet Haase 14424aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::save(int flags) { 1443b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Save); 14444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(flags); 14454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return OpenGLRenderer::save(flags); 14464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restore() { 144904c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy if (mRestoreSaveCount < 0) { 145033f6beb10f98e8ba96250e284876d607055d278dRomain Guy restoreToCount(getSaveCount() - 1); 145133f6beb10f98e8ba96250e284876d607055d278dRomain Guy return; 145204c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy } 145333f6beb10f98e8ba96250e284876d607055d278dRomain Guy 145433f6beb10f98e8ba96250e284876d607055d278dRomain Guy mRestoreSaveCount--; 145533f6beb10f98e8ba96250e284876d607055d278dRomain Guy insertTranlate(); 14564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::restore(); 14574aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restoreToCount(int saveCount) { 146027454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mRestoreSaveCount = saveCount; 146133f6beb10f98e8ba96250e284876d607055d278dRomain Guy insertTranlate(); 14624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::restoreToCount(saveCount); 14634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::saveLayer(float left, float top, float right, float bottom, 14665c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* p, int flags) { 1467b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SaveLayer); 14684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 14694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(p); 14704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(flags); 1471b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return OpenGLRenderer::save(flags); 14724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14745b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guyint DisplayListRenderer::saveLayerAlpha(float left, float top, float right, float bottom, 14755b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int alpha, int flags) { 14765b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addOp(DisplayList::SaveLayerAlpha); 14775b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addBounds(left, top, right, bottom); 14785b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addInt(alpha); 14795b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addInt(flags); 14805b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy return OpenGLRenderer::save(flags); 14815b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy} 14825b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy 14834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::translate(float dx, float dy) { 148433f6beb10f98e8ba96250e284876d607055d278dRomain Guy mHasTranslate = true; 148533f6beb10f98e8ba96250e284876d607055d278dRomain Guy mTranslateX += dx; 148633f6beb10f98e8ba96250e284876d607055d278dRomain Guy mTranslateY += dy; 148733f6beb10f98e8ba96250e284876d607055d278dRomain Guy insertRestoreToCount(); 14884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::translate(dx, dy); 14894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::rotate(float degrees) { 1492b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Rotate); 14934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloat(degrees); 14944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::rotate(degrees); 14954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::scale(float sx, float sy) { 1498b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Scale); 14994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(sx, sy); 15004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::scale(sx, sy); 15014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 15024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1503807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guyvoid DisplayListRenderer::skew(float sx, float sy) { 1504807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy addOp(DisplayList::Skew); 1505807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy addPoint(sx, sy); 1506807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy OpenGLRenderer::skew(sx, sy); 1507807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy} 1508807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy 15094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setMatrix(SkMatrix* matrix) { 1510b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SetMatrix); 15114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 15124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::setMatrix(matrix); 15134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 15144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 15154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::concatMatrix(SkMatrix* matrix) { 1516b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ConcatMatrix); 15174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 15184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::concatMatrix(matrix); 15194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 15204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 15214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guybool DisplayListRenderer::clipRect(float left, float top, float right, float bottom, 15224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkRegion::Op op) { 1523b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ClipRect); 15244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 15254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(op); 15264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return OpenGLRenderer::clipRect(left, top, right, bottom, op); 15274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 15284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 15296554943a1dd6854c0f4976900956e556767b49e1Romain Guystatus_t DisplayListRenderer::drawDisplayList(DisplayList* displayList, 15301271e2cc80b01d577e9db339459ef0222bb9320dChet Haase Rect& dirty, int32_t flags, uint32_t level) { 1531cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy // dirty is an out parameter and should not be recorded, 1532cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy // it matters only when replaying the display list 1533b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase 1534b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase addOp(DisplayList::DrawDisplayList); 15350fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addDisplayList(displayList); 153633f6beb10f98e8ba96250e284876d607055d278dRomain Guy addInt(flags); 15376554943a1dd6854c0f4976900956e556767b49e1Romain Guy return DrawGlInfo::kStatusDone; 15380fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy} 15390fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy 1540486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* paint) { 15416c319ca1275c8db892c39b48fc54864c949f9171Romain Guy addOp(DisplayList::DrawLayer); 1542ada830f639591b99c3e40de22b07296c7932a33fRomain Guy addInt((int) layer); 1543ada830f639591b99c3e40de22b07296c7932a33fRomain Guy addPoint(x, y); 15446c319ca1275c8db892c39b48fc54864c949f9171Romain Guy addPaint(paint); 1545486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 15466c319ca1275c8db892c39b48fc54864c949f9171Romain Guy} 15476c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 1548486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float left, float top, SkPaint* paint) { 154933f6beb10f98e8ba96250e284876d607055d278dRomain Guy const bool reject = quickReject(left, top, left + bitmap->width(), top + bitmap->height()); 155033f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawBitmap, reject); 15514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 15524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(left, top); 15534aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 155433f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 1555486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 15564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 15574aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1558486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, SkPaint* paint) { 155933f6beb10f98e8ba96250e284876d607055d278dRomain Guy Rect r(0.0f, 0.0f, bitmap->width(), bitmap->height()); 156033f6beb10f98e8ba96250e284876d607055d278dRomain Guy const mat4 transform(*matrix); 156133f6beb10f98e8ba96250e284876d607055d278dRomain Guy transform.mapRect(r); 156233f6beb10f98e8ba96250e284876d607055d278dRomain Guy 156333f6beb10f98e8ba96250e284876d607055d278dRomain Guy const bool reject = quickReject(r.left, r.top, r.right, r.bottom); 156433f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawBitmapMatrix, reject); 15654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 15664aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 15674aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 156833f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 1569486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 15704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 15714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1572486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop, 15734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float srcRight, float srcBottom, float dstLeft, float dstTop, 15745c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float dstRight, float dstBottom, SkPaint* paint) { 157533f6beb10f98e8ba96250e284876d607055d278dRomain Guy const bool reject = quickReject(dstLeft, dstTop, dstRight, dstBottom); 157633f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawBitmapRect, reject); 15774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 15784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(srcLeft, srcTop, srcRight, srcBottom); 15794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(dstLeft, dstTop, dstRight, dstBottom); 15804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 158133f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 1582486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 15834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 15844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1585486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawBitmapData(SkBitmap* bitmap, float left, float top, 1586486590963e2207d68eebd6944fec70d50d41116aChet Haase SkPaint* paint) { 158795c21d0546e36ade3e0601394f5b625541836545Romain Guy const bool reject = quickReject(left, top, left + bitmap->width(), top + bitmap->height()); 1588e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy uint32_t* location = addOp(DisplayList::DrawBitmapData, reject); 1589e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy addBitmapData(bitmap); 1590e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy addPoint(left, top); 1591e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy addPaint(paint); 1592e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy addSkip(location); 1593486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 1594e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy} 1595e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy 1596486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight, 15975a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy float* vertices, int* colors, SkPaint* paint) { 15985a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addOp(DisplayList::DrawBitmapMesh); 15995a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addBitmap(bitmap); 16005a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(meshWidth); 16015a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(meshHeight); 16025a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addFloats(vertices, (meshWidth + 1) * (meshHeight + 1) * 2); 16035a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy if (colors) { 16045a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(1); 16055a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInts(colors, (meshWidth + 1) * (meshHeight + 1)); 16065a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } else { 16075a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(0); 16085a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } 16095a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addPaint(paint); 1610486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 16115a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy} 16125a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 1613486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawPatch(SkBitmap* bitmap, const int32_t* xDivs, 1614486590963e2207d68eebd6944fec70d50d41116aChet Haase const int32_t* yDivs, const uint32_t* colors, uint32_t width, uint32_t height, 1615486590963e2207d68eebd6944fec70d50d41116aChet Haase int8_t numColors, float left, float top, float right, float bottom, SkPaint* paint) { 1616be6f9dc1e71b425b7ac1c40c0a2c72d03eb9fbeeRomain Guy int alpha; 1617be6f9dc1e71b425b7ac1c40c0a2c72d03eb9fbeeRomain Guy SkXfermode::Mode mode; 1618be6f9dc1e71b425b7ac1c40c0a2c72d03eb9fbeeRomain Guy OpenGLRenderer::getAlphaAndModeDirect(paint, &alpha, &mode); 1619be6f9dc1e71b425b7ac1c40c0a2c72d03eb9fbeeRomain Guy 162033f6beb10f98e8ba96250e284876d607055d278dRomain Guy const bool reject = quickReject(left, top, right, bottom); 162133f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawPatch, reject); 16224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 16234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInts(xDivs, width); 16244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInts(yDivs, height); 16254bb942083a0d4db746adf95349108dd8ef842e32Romain Guy addUInts(colors, numColors); 16264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 1627be6f9dc1e71b425b7ac1c40c0a2c72d03eb9fbeeRomain Guy addInt(alpha); 1628be6f9dc1e71b425b7ac1c40c0a2c72d03eb9fbeeRomain Guy addInt(mode); 162933f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 1630486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 16314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 16324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1633486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawColor(int color, SkXfermode::Mode mode) { 1634b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawColor); 16354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(color); 16364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(mode); 1637486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 16384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 16394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1640486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawRect(float left, float top, float right, float bottom, 16415c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 164233f6beb10f98e8ba96250e284876d607055d278dRomain Guy const bool reject = paint->getStyle() == SkPaint::kFill_Style && 164333f6beb10f98e8ba96250e284876d607055d278dRomain Guy quickReject(left, top, right, bottom); 164433f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawRect, reject); 16454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 16464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 164733f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 1648486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 16494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 16504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1651486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawRoundRect(float left, float top, float right, float bottom, 1652a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase float rx, float ry, SkPaint* paint) { 165333f6beb10f98e8ba96250e284876d607055d278dRomain Guy const bool reject = paint->getStyle() == SkPaint::kFill_Style && 165433f6beb10f98e8ba96250e284876d607055d278dRomain Guy quickReject(left, top, right, bottom); 165533f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawRoundRect, reject); 165601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addBounds(left, top, right, bottom); 165701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPoint(rx, ry); 165801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPaint(paint); 165933f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 1660486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 166101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy} 166201d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy 1663486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawCircle(float x, float y, float radius, SkPaint* paint) { 166401d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addOp(DisplayList::DrawCircle); 166501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPoint(x, y); 166601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addFloat(radius); 166701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPaint(paint); 1668486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 166901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy} 167001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy 1671486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawOval(float left, float top, float right, float bottom, 1672c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy SkPaint* paint) { 1673c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addOp(DisplayList::DrawOval); 1674c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addBounds(left, top, right, bottom); 1675c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addPaint(paint); 1676486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 1677c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy} 1678c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy 1679486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawArc(float left, float top, float right, float bottom, 16808b2f5267f16c295f12faab810527cd6311997e34Romain Guy float startAngle, float sweepAngle, bool useCenter, SkPaint* paint) { 168182d41a515368236e56454bd84023bebd6306f6b7Romain Guy addOp(DisplayList::DrawArc); 16828b2f5267f16c295f12faab810527cd6311997e34Romain Guy addBounds(left, top, right, bottom); 16838b2f5267f16c295f12faab810527cd6311997e34Romain Guy addPoint(startAngle, sweepAngle); 16848b2f5267f16c295f12faab810527cd6311997e34Romain Guy addInt(useCenter ? 1 : 0); 16858b2f5267f16c295f12faab810527cd6311997e34Romain Guy addPaint(paint); 1686486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 16878b2f5267f16c295f12faab810527cd6311997e34Romain Guy} 16888b2f5267f16c295f12faab810527cd6311997e34Romain Guy 1689486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawPath(SkPath* path, SkPaint* paint) { 169033f6beb10f98e8ba96250e284876d607055d278dRomain Guy float left, top, offset; 169133f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t width, height; 169233f6beb10f98e8ba96250e284876d607055d278dRomain Guy computePathBounds(path, paint, left, top, offset, width, height); 169333f6beb10f98e8ba96250e284876d607055d278dRomain Guy 169495c21d0546e36ade3e0601394f5b625541836545Romain Guy left -= offset; 169595c21d0546e36ade3e0601394f5b625541836545Romain Guy top -= offset; 169695c21d0546e36ade3e0601394f5b625541836545Romain Guy 169795c21d0546e36ade3e0601394f5b625541836545Romain Guy const bool reject = quickReject(left, top, left + width, top + height); 169833f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawPath, reject); 16994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPath(path); 17004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 170133f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 1702486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 17034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 17044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1705486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawLines(float* points, int count, SkPaint* paint) { 1706b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawLines); 17074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloats(points, count); 17084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 1709486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 1710ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy} 1711ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy 1712486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawPoints(float* points, int count, SkPaint* paint) { 1713ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy addOp(DisplayList::DrawPoints); 1714ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy addFloats(points, count); 1715ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy addPaint(paint); 1716486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 17174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 17184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1719996e57c84368058be793897ebc355b917a59abc2Raph Levienstatus_t DisplayListRenderer::drawTextOnPath(const char* text, int bytesCount, int count, 1720996e57c84368058be793897ebc355b917a59abc2Raph Levien SkPath* path, float hOffset, float vOffset, SkPaint* paint) { 1721996e57c84368058be793897ebc355b917a59abc2Raph Levien if (!text || count <= 0) return DrawGlInfo::kStatusDone; 1722996e57c84368058be793897ebc355b917a59abc2Raph Levien addOp(DisplayList::DrawTextOnPath); 1723996e57c84368058be793897ebc355b917a59abc2Raph Levien addText(text, bytesCount); 1724996e57c84368058be793897ebc355b917a59abc2Raph Levien addInt(count); 1725996e57c84368058be793897ebc355b917a59abc2Raph Levien addPath(path); 1726996e57c84368058be793897ebc355b917a59abc2Raph Levien addFloat(hOffset); 1727996e57c84368058be793897ebc355b917a59abc2Raph Levien addFloat(vOffset); 1728996e57c84368058be793897ebc355b917a59abc2Raph Levien paint->setAntiAlias(true); 1729e816baea651476aca4407200d4a5e629b9ab8dfaChet Haase SkPaint* addedPaint = addPaint(paint); 1730e816baea651476aca4407200d4a5e629b9ab8dfaChet Haase FontRenderer& fontRenderer = mCaches.fontRenderer->getFontRenderer(addedPaint); 1731e816baea651476aca4407200d4a5e629b9ab8dfaChet Haase fontRenderer.precache(addedPaint, text, count); 1732996e57c84368058be793897ebc355b917a59abc2Raph Levien return DrawGlInfo::kStatusDone; 1733996e57c84368058be793897ebc355b917a59abc2Raph Levien} 1734996e57c84368058be793897ebc355b917a59abc2Raph Levien 1735996e57c84368058be793897ebc355b917a59abc2Raph Levienstatus_t DisplayListRenderer::drawPosText(const char* text, int bytesCount, int count, 1736996e57c84368058be793897ebc355b917a59abc2Raph Levien const float* positions, SkPaint* paint) { 1737996e57c84368058be793897ebc355b917a59abc2Raph Levien if (!text || count <= 0) return DrawGlInfo::kStatusDone; 1738996e57c84368058be793897ebc355b917a59abc2Raph Levien addOp(DisplayList::DrawPosText); 1739996e57c84368058be793897ebc355b917a59abc2Raph Levien addText(text, bytesCount); 1740996e57c84368058be793897ebc355b917a59abc2Raph Levien addInt(count); 1741996e57c84368058be793897ebc355b917a59abc2Raph Levien addFloats(positions, count * 2); 1742996e57c84368058be793897ebc355b917a59abc2Raph Levien paint->setAntiAlias(true); 1743e816baea651476aca4407200d4a5e629b9ab8dfaChet Haase SkPaint* addedPaint = addPaint(paint); 1744e816baea651476aca4407200d4a5e629b9ab8dfaChet Haase FontRenderer& fontRenderer = mCaches.fontRenderer->getFontRenderer(addedPaint); 1745e816baea651476aca4407200d4a5e629b9ab8dfaChet Haase fontRenderer.precache(addedPaint, text, count); 1746996e57c84368058be793897ebc355b917a59abc2Raph Levien return DrawGlInfo::kStatusDone; 1747996e57c84368058be793897ebc355b917a59abc2Raph Levien} 1748996e57c84368058be793897ebc355b917a59abc2Raph Levien 1749c25259519f1b74bb62a2b051b74537f073436b5cRomain Guystatus_t DisplayListRenderer::drawText(const char* text, int bytesCount, int count, 1750996e57c84368058be793897ebc355b917a59abc2Raph Levien float x, float y, const float* positions, SkPaint* paint, float length) { 1751486590963e2207d68eebd6944fec70d50d41116aChet Haase if (!text || count <= 0) return DrawGlInfo::kStatusDone; 175233f6beb10f98e8ba96250e284876d607055d278dRomain Guy 17538f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // TODO: We should probably make a copy of the paint instead of modifying 17548f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // it; modifying the paint will change its generationID the first 17558f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // time, which might impact caches. More investigation needed to 17568f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // see if it matters. 17578f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // If we make a copy, then drawTextDecorations() should *not* make 17588f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // its own copy as it does right now. 1759c511bee87cda99a252d1a62487f47c8f05aee78cFabrice Di Meglio // Beware: this needs Glyph encoding (already done on the Paint constructor) 17608f9a9f61ab793d9387a5942b307e74324704893bRomain Guy paint->setAntiAlias(true); 176133f6beb10f98e8ba96250e284876d607055d278dRomain Guy if (length < 0.0f) length = paint->measureText(text, bytesCount); 176233f6beb10f98e8ba96250e284876d607055d278dRomain Guy 176333f6beb10f98e8ba96250e284876d607055d278dRomain Guy bool reject = false; 176433f6beb10f98e8ba96250e284876d607055d278dRomain Guy if (CC_LIKELY(paint->getTextAlign() == SkPaint::kLeft_Align)) { 176533f6beb10f98e8ba96250e284876d607055d278dRomain Guy SkPaint::FontMetrics metrics; 176633f6beb10f98e8ba96250e284876d607055d278dRomain Guy paint->getFontMetrics(&metrics, 0.0f); 176733f6beb10f98e8ba96250e284876d607055d278dRomain Guy reject = quickReject(x, y + metrics.fTop, x + length, y + metrics.fBottom); 176833f6beb10f98e8ba96250e284876d607055d278dRomain Guy } 176933f6beb10f98e8ba96250e284876d607055d278dRomain Guy 1770c25259519f1b74bb62a2b051b74537f073436b5cRomain Guy uint32_t* location = addOp(DisplayList::DrawText, reject); 177133f6beb10f98e8ba96250e284876d607055d278dRomain Guy addText(text, bytesCount); 177233f6beb10f98e8ba96250e284876d607055d278dRomain Guy addInt(count); 1773996e57c84368058be793897ebc355b917a59abc2Raph Levien addFloat(x); 1774996e57c84368058be793897ebc355b917a59abc2Raph Levien addFloat(y); 1775996e57c84368058be793897ebc355b917a59abc2Raph Levien addFloats(positions, count * 2); 1776e816baea651476aca4407200d4a5e629b9ab8dfaChet Haase SkPaint* addedPaint = addPaint(paint); 1777e816baea651476aca4407200d4a5e629b9ab8dfaChet Haase if (!reject) { 1778e816baea651476aca4407200d4a5e629b9ab8dfaChet Haase FontRenderer& fontRenderer = mCaches.fontRenderer->getFontRenderer(addedPaint); 1779e816baea651476aca4407200d4a5e629b9ab8dfaChet Haase fontRenderer.precache(addedPaint, text, count); 1780e816baea651476aca4407200d4a5e629b9ab8dfaChet Haase } 178133f6beb10f98e8ba96250e284876d607055d278dRomain Guy addFloat(length); 178233f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 1783486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 1784eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy} 1785eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy 17864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShader() { 1787b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetShader); 17884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 17894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 17904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShader(SkiaShader* shader) { 17915c13d89c1332fcc499379b9064b891187b75ca32Chet Haase addOp(DisplayList::SetupShader); 17925c13d89c1332fcc499379b9064b891187b75ca32Chet Haase addShader(shader); 17934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 17944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 17954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetColorFilter() { 1796b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetColorFilter); 17974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 17984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 17994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupColorFilter(SkiaColorFilter* filter) { 1800ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase addOp(DisplayList::SetupColorFilter); 1801ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase addColorFilter(filter); 18024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 18034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 18044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShadow() { 1805b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetShadow); 18064aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 18074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 18084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShadow(float radius, float dx, float dy, int color) { 1809b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SetupShadow); 18104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloat(radius); 18114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(dx, dy); 18124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(color); 18134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 18144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 18155ff9df658230d49e42c43586997a02d8e4dd417eRomain Guyvoid DisplayListRenderer::resetPaintFilter() { 18165ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy addOp(DisplayList::ResetPaintFilter); 18175ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy} 18185ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy 18195ff9df658230d49e42c43586997a02d8e4dd417eRomain Guyvoid DisplayListRenderer::setupPaintFilter(int clearBits, int setBits) { 18205ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy addOp(DisplayList::SetupPaintFilter); 18215ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy addInt(clearBits); 18225ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy addInt(setBits); 18235ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy} 18245ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy 18254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace uirenderer 18264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace android 1827