DisplayListRenderer.cpp revision ddf74373616c89e0880a28a2185fd7ce3db91de6
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", 64ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawText", 65325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy "DrawTextOnPath", 66eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy "DrawPosText", 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; 1521271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix = NULL; 1531271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformCamera = NULL; 1541271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix3D = NULL; 1551271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix = NULL; 1561271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix = NULL; 157a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 1585977baa1fa24125c148a72699b53e62abaf08960Chet Haase Caches& caches = Caches::getInstance(); 1595977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1605977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mBitmapResources.size(); i++) { 1615977baa1fa24125c148a72699b53e62abaf08960Chet Haase caches.resourceCache.decrementRefcount(mBitmapResources.itemAt(i)); 1625977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1635977baa1fa24125c148a72699b53e62abaf08960Chet Haase mBitmapResources.clear(); 1645977baa1fa24125c148a72699b53e62abaf08960Chet Haase 16549c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy for (size_t i = 0; i < mOwnedBitmapResources.size(); i++) { 16649c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy SkBitmap* bitmap = mOwnedBitmapResources.itemAt(i); 16749c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy caches.resourceCache.decrementRefcount(bitmap); 16849c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy caches.resourceCache.destructor(bitmap); 16949c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy } 17049c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy mOwnedBitmapResources.clear(); 17149c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy 172d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy for (size_t i = 0; i < mFilterResources.size(); i++) { 173d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.decrementRefcount(mFilterResources.itemAt(i)); 174d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy } 175d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy mFilterResources.clear(); 176d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 17724c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy for (size_t i = 0; i < mShaders.size(); i++) { 17843ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy caches.resourceCache.decrementRefcount(mShaders.itemAt(i)); 179d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.destructor(mShaders.itemAt(i)); 1805977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 18124c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaders.clear(); 1825977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1835977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mPaints.size(); i++) { 1845977baa1fa24125c148a72699b53e62abaf08960Chet Haase delete mPaints.itemAt(i); 1855977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1865977baa1fa24125c148a72699b53e62abaf08960Chet Haase mPaints.clear(); 1875977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1882fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy for (size_t i = 0; i < mPaths.size(); i++) { 1891af23a32d879db330eb5a08b21090ec60b604a32Romain Guy SkPath* path = mPaths.itemAt(i); 1901af23a32d879db330eb5a08b21090ec60b604a32Romain Guy caches.pathCache.remove(path); 1911af23a32d879db330eb5a08b21090ec60b604a32Romain Guy delete path; 1922fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy } 1932fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPaths.clear(); 1942fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy 195d34dd71800d9a1077e58c3b7f2511c46848da417Chet Haase for (size_t i = 0; i < mSourcePaths.size(); i++) { 196d34dd71800d9a1077e58c3b7f2511c46848da417Chet Haase caches.resourceCache.decrementRefcount(mSourcePaths.itemAt(i)); 197d34dd71800d9a1077e58c3b7f2511c46848da417Chet Haase } 198d34dd71800d9a1077e58c3b7f2511c46848da417Chet Haase mSourcePaths.clear(); 199d34dd71800d9a1077e58c3b7f2511c46848da417Chet Haase 2005977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mMatrices.size(); i++) { 2015977baa1fa24125c148a72699b53e62abaf08960Chet Haase delete mMatrices.itemAt(i); 2025977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 2035977baa1fa24125c148a72699b53e62abaf08960Chet Haase mMatrices.clear(); 2045977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 2055977baa1fa24125c148a72699b53e62abaf08960Chet Haase 206d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haasevoid DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorder, bool reusing) { 207b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy const SkWriter32& writer = recorder.writeStream(); 208b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy init(); 209b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 210b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy if (writer.size() == 0) { 211b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return; 212b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 213b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 214d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase if (reusing) { 215d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase // re-using display list - clear out previous allocations 216d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase clearResources(); 217d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase } 218a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase initProperties(); 219d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase 22065b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy mSize = writer.size(); 22165b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy void* buffer = sk_malloc_throw(mSize); 222b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy writer.flatten(buffer); 22365b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy mReader.setMemory(buffer, mSize); 224b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 2255c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Caches& caches = Caches::getInstance(); 226b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 22749c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy const Vector<SkBitmap*>& bitmapResources = recorder.getBitmapResources(); 2285c13d89c1332fcc499379b9064b891187b75ca32Chet Haase for (size_t i = 0; i < bitmapResources.size(); i++) { 2295c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkBitmap* resource = bitmapResources.itemAt(i); 2305c13d89c1332fcc499379b9064b891187b75ca32Chet Haase mBitmapResources.add(resource); 2315c13d89c1332fcc499379b9064b891187b75ca32Chet Haase caches.resourceCache.incrementRefcount(resource); 232b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 233d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 23449c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy const Vector<SkBitmap*> &ownedBitmapResources = recorder.getOwnedBitmapResources(); 23549c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy for (size_t i = 0; i < ownedBitmapResources.size(); i++) { 23649c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy SkBitmap* resource = ownedBitmapResources.itemAt(i); 23749c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy mOwnedBitmapResources.add(resource); 23849c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy caches.resourceCache.incrementRefcount(resource); 23949c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy } 24049c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy 24149c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy const Vector<SkiaColorFilter*>& filterResources = recorder.getFilterResources(); 242d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy for (size_t i = 0; i < filterResources.size(); i++) { 243d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy SkiaColorFilter* resource = filterResources.itemAt(i); 244d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy mFilterResources.add(resource); 245d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.incrementRefcount(resource); 246d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy } 247d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 24849c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy const Vector<SkiaShader*>& shaders = recorder.getShaders(); 24924c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy for (size_t i = 0; i < shaders.size(); i++) { 250d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy SkiaShader* resource = shaders.itemAt(i); 251d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy mShaders.add(resource); 252d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.incrementRefcount(resource); 253b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 254b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 25549c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy const Vector<SkPaint*>& paints = recorder.getPaints(); 256d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase for (size_t i = 0; i < paints.size(); i++) { 257d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mPaints.add(paints.itemAt(i)); 258d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase } 259d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 26049c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy const Vector<SkPath*>& paths = recorder.getPaths(); 2612fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy for (size_t i = 0; i < paths.size(); i++) { 2622fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPaths.add(paths.itemAt(i)); 2632fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy } 2642fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy 26549c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy const SortedVector<SkPath*>& sourcePaths = recorder.getSourcePaths(); 266d34dd71800d9a1077e58c3b7f2511c46848da417Chet Haase for (size_t i = 0; i < sourcePaths.size(); i++) { 267d34dd71800d9a1077e58c3b7f2511c46848da417Chet Haase mSourcePaths.add(sourcePaths.itemAt(i)); 268d34dd71800d9a1077e58c3b7f2511c46848da417Chet Haase caches.resourceCache.incrementRefcount(sourcePaths.itemAt(i)); 269d34dd71800d9a1077e58c3b7f2511c46848da417Chet Haase } 270d34dd71800d9a1077e58c3b7f2511c46848da417Chet Haase 27149c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy const Vector<SkMatrix*>& matrices = recorder.getMatrices(); 272d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase for (size_t i = 0; i < matrices.size(); i++) { 273d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mMatrices.add(matrices.itemAt(i)); 274d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase } 275b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 276b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 277b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyvoid DisplayList::init() { 27865b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy mSize = 0; 27904c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy mIsRenderable = true; 28065b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy} 28165b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy 28265b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guysize_t DisplayList::getSize() { 28365b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy return mSize; 284b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 285b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 286ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase/** 287ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * This function is a simplified version of replay(), where we simply retrieve and log the 288ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * display list. This function should remain in sync with the replay() function. 289ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase */ 290ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haasevoid DisplayList::output(OpenGLRenderer& renderer, uint32_t level) { 291ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase TextContainer text; 292ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 293ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t count = (level + 1) * 2; 294ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase char indent[count + 1]; 295ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase for (uint32_t i = 0; i < count; i++) { 296ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase indent[i] = ' '; 297ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 298ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase indent[count] = '\0'; 299ddf74373616c89e0880a28a2185fd7ce3db91de6Romain Guy ALOGD("%sStart display list (%p, %s, render=%d)", (char*) indent + 2, this, 300ddf74373616c89e0880a28a2185fd7ce3db91de6Romain Guy mName.string(), isRenderable()); 301ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 3021271e2cc80b01d577e9db339459ef0222bb9320dChet Haase ALOGD("%s%s %d", indent, "Save", SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); 303ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int saveCount = renderer.getSaveCount() - 1; 304ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 305a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase outputViewProperties(renderer, (char*) indent); 306ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase mReader.rewind(); 307ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 308ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase while (!mReader.eof()) { 309ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int op = mReader.readInt(); 31033f6beb10f98e8ba96250e284876d607055d278dRomain Guy if (op & OP_MAY_BE_SKIPPED_MASK) { 31133f6beb10f98e8ba96250e284876d607055d278dRomain Guy int skip = mReader.readInt(); 31233f6beb10f98e8ba96250e284876d607055d278dRomain Guy ALOGD("%sSkip %d", (char*) indent, skip); 31333f6beb10f98e8ba96250e284876d607055d278dRomain Guy op &= ~OP_MAY_BE_SKIPPED_MASK; 314a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 315ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 316ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase switch (op) { 317ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawGLFunction: { 318ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase Functor *functor = (Functor *) getInt(); 3195baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p", (char*) indent, OP_NAMES[op], functor); 320ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 321ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 322ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Save: { 323ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int rendererNum = getInt(); 3245baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %d", (char*) indent, OP_NAMES[op], rendererNum); 325ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 326ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 327ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Restore: { 3285baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 329ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 330ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 331ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case RestoreToCount: { 332ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int restoreCount = saveCount + getInt(); 3335baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %d", (char*) indent, OP_NAMES[op], restoreCount); 334ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 335ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 336ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SaveLayer: { 337ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 338ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 339ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 340ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 3415ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 342ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int flags = getInt(); 3435baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p, 0x%x", (char*) indent, 344a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase OP_NAMES[op], f1, f2, f3, f4, paint, flags); 345ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 346ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 347ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SaveLayerAlpha: { 348ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 349ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 350ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 351ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 352ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int alpha = getInt(); 353ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int flags = getInt(); 3545baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", (char*) indent, 355a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase OP_NAMES[op], f1, f2, f3, f4, alpha, flags); 356ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 357ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 358ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Translate: { 359ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 360ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 3615baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], f1, f2); 362ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 363ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 364ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Rotate: { 365ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float rotation = getFloat(); 3665baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f", (char*) indent, OP_NAMES[op], rotation); 367ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 368ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 369ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Scale: { 370ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float sx = getFloat(); 371ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float sy = getFloat(); 3725baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 373ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 374ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 375ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Skew: { 376ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float sx = getFloat(); 377ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float sy = getFloat(); 3785baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 379ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 380ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 381ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SetMatrix: { 382ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkMatrix* matrix = getMatrix(); 3835baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p", (char*) indent, OP_NAMES[op], matrix); 384ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 385ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 386ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ConcatMatrix: { 387ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkMatrix* matrix = getMatrix(); 388a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase ALOGD("%s%s new concat %p: [%f, %f, %f] [%f, %f, %f] [%f, %f, %f]", 389a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], matrix, matrix->get(0), matrix->get(1), 390a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase matrix->get(2), matrix->get(3), matrix->get(4), matrix->get(5), 391a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase matrix->get(6), matrix->get(7), matrix->get(8)); 392ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 393ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 394ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ClipRect: { 395ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 396ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 397ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 398ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 399ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int regionOp = getInt(); 4005baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d", (char*) indent, OP_NAMES[op], 401a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase f1, f2, f3, f4, regionOp); 402ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 403ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 404ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawDisplayList: { 405ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase DisplayList* displayList = getDisplayList(); 40633f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t flags = getInt(); 40733f6beb10f98e8ba96250e284876d607055d278dRomain Guy ALOGD("%s%s %p, %dx%d, 0x%x %d", (char*) indent, OP_NAMES[op], 4081271e2cc80b01d577e9db339459ef0222bb9320dChet Haase displayList, mWidth, mHeight, flags, level + 1); 409ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase renderer.outputDisplayList(displayList, level + 1); 410ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 411ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 412ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawLayer: { 413ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase Layer* layer = (Layer*) getInt(); 414ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float x = getFloat(); 415ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float y = getFloat(); 4165ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 4175baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 418a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase layer, x, y, paint); 419ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 420ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 421ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawBitmap: { 422ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkBitmap* bitmap = getBitmap(); 423ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float x = getFloat(); 424ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float y = getFloat(); 4255ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 4265baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 427a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase bitmap, x, y, paint); 428ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 429ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 430ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawBitmapMatrix: { 431ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkBitmap* bitmap = getBitmap(); 432ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkMatrix* matrix = getMatrix(); 4335ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 4345baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p, %p, %p", (char*) indent, OP_NAMES[op], 435a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase bitmap, matrix, paint); 436ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 437ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 438ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawBitmapRect: { 439ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkBitmap* bitmap = getBitmap(); 440ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 441ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 442ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 443ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 444ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f5 = getFloat(); 445ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f6 = getFloat(); 446ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f7 = getFloat(); 447ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f8 = getFloat(); 4485ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 4495baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 450a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], bitmap, f1, f2, f3, f4, f5, f6, f7, f8, paint); 451ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 452ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 453e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy case DrawBitmapData: { 454e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy SkBitmap* bitmap = getBitmapData(); 455e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy float x = getFloat(); 456e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy float y = getFloat(); 457e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy SkPaint* paint = getPaint(renderer); 458e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy ALOGD("%s%s %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], x, y, paint); 459e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy } 460e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy break; 461ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawBitmapMesh: { 462ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int verticesCount = 0; 463ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t colorsCount = 0; 464ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkBitmap* bitmap = getBitmap(); 465ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t meshWidth = getInt(); 466ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t meshHeight = getInt(); 467ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float* vertices = getFloats(verticesCount); 468ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase bool hasColors = getInt(); 469ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int* colors = hasColors ? getInts(colorsCount) : NULL; 4705ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 4715baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 472ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 473ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 474ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawPatch: { 475ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int32_t* xDivs = NULL; 476ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int32_t* yDivs = NULL; 477ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t* colors = NULL; 478ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t xDivsCount = 0; 479ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t yDivsCount = 0; 480ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int8_t numColors = 0; 481ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkBitmap* bitmap = getBitmap(); 482ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase xDivs = getInts(xDivsCount); 483ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase yDivs = getInts(yDivsCount); 484ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase colors = getUInts(numColors); 485a62f172215727a1e00af0cb934904e00926a86c9Romain Guy float left = getFloat(); 486a62f172215727a1e00af0cb934904e00926a86c9Romain Guy float top = getFloat(); 487a62f172215727a1e00af0cb934904e00926a86c9Romain Guy float right = getFloat(); 488a62f172215727a1e00af0cb934904e00926a86c9Romain Guy float bottom = getFloat(); 4895ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 4905baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f", (char*) indent, OP_NAMES[op], 491a62f172215727a1e00af0cb934904e00926a86c9Romain Guy left, top, right, bottom); 492ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 493ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 494ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawColor: { 495ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int color = getInt(); 496ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int xferMode = getInt(); 4975baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s 0x%x %d", (char*) indent, OP_NAMES[op], color, xferMode); 498ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 499ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 500ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawRect: { 501ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 502ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 503ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 504ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 5055ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5065baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 507a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase f1, f2, f3, f4, paint); 508ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 509ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 510ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawRoundRect: { 511ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 512ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 513ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 514ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 515ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f5 = getFloat(); 516ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f6 = getFloat(); 5175ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5185baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 519a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, paint); 520ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 521ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 522ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawCircle: { 523ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 524ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 525ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 5265ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5275baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %p", 528a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, paint); 529ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 530ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 531ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawOval: { 532ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 533ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 534ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 535ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 5365ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5375baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", 538a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, paint); 539ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 540ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 541ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawArc: { 542ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 543ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 544ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 545ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 546ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f5 = getFloat(); 547ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f6 = getFloat(); 548ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int i1 = getInt(); 5495ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5505baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %d, %p", 551a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, i1, paint); 552ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 553ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 554ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawPath: { 555ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPath* path = getPath(); 5565ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5575baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p, %p", (char*) indent, OP_NAMES[op], path, paint); 558ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 559ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 560ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawLines: { 561ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int count = 0; 562ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float* points = getFloats(count); 5635ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5645baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 565ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 566ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 567ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawPoints: { 568ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int count = 0; 569ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float* points = getFloats(count); 5705ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5715baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 572ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 573ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 574ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawText: { 575ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase getText(&text); 576325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy int32_t count = getInt(); 577ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float x = getFloat(); 578ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float y = getFloat(); 5795ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 580cac5fd3e09e9dc918753d4aff624bf29a367ade3Romain Guy float length = getFloat(); 5815baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %s, %d, %d, %.2f, %.2f, %p, %.2f", (char*) indent, OP_NAMES[op], 582a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase text.text(), text.length(), count, x, y, paint, length); 583ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 584ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 585325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy case DrawTextOnPath: { 586325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy getText(&text); 587325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy int32_t count = getInt(); 588325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy SkPath* path = getPath(); 589325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy float hOffset = getFloat(); 590325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy float vOffset = getFloat(); 591325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy SkPaint* paint = getPaint(renderer); 592325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy ALOGD("%s%s %s, %d, %d, %p", (char*) indent, OP_NAMES[op], 593325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy text.text(), text.length(), count, paint); 594325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy } 595325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy break; 596eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy case DrawPosText: { 597eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy getText(&text); 598eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy int count = getInt(); 599eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy int positionsCount = 0; 600eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy float* positions = getFloats(positionsCount); 6015ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 602eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy ALOGD("%s%s %s, %d, %d, %p", (char*) indent, OP_NAMES[op], 603a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase text.text(), text.length(), count, paint); 604eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy } 605ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ResetShader: { 6065baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 607ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 608ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 609ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SetupShader: { 610ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkiaShader* shader = getShader(); 6115baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p", (char*) indent, OP_NAMES[op], shader); 612ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 613ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 614ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ResetColorFilter: { 6155baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 616ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 617ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 618ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SetupColorFilter: { 619ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkiaColorFilter *colorFilter = getColorFilter(); 6205baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p", (char*) indent, OP_NAMES[op], colorFilter); 621ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 622ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 623ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ResetShadow: { 6245baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 625ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 626ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 627ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SetupShadow: { 628ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float radius = getFloat(); 629ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float dx = getFloat(); 630ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float dy = getFloat(); 631ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int color = getInt(); 6325baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, 0x%x", (char*) indent, OP_NAMES[op], 633a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase radius, dx, dy, color); 634ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 635ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 6365ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy case ResetPaintFilter: { 6375ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 6385ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy } 6395ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy break; 6405ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy case SetupPaintFilter: { 6415ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy int clearBits = getInt(); 6425ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy int setBits = getInt(); 6435ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy ALOGD("%s%s 0x%x, 0x%x", (char*) indent, OP_NAMES[op], clearBits, setBits); 6445ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy } 6455ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy break; 646ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase default: 6475baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("Display List error: op not handled: %s%s", 648a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op]); 649ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 650ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 651ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 652a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase ALOGD("%sDone (%p, %s)", (char*) indent + 2, this, mName.string()); 653a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 654a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 655a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haasevoid DisplayList::updateMatrix() { 656a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (mMatrixDirty) { 657a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (!mTransformMatrix) { 658a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix = new SkMatrix(); 659a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 660a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (mMatrixFlags == 0 || mMatrixFlags == TRANSLATION) { 661a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->reset(); 662a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } else { 663a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (!mPivotExplicitlySet) { 664a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (mWidth != mPrevWidth || mHeight != mPrevHeight) { 665a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPrevWidth = mWidth; 666a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPrevHeight = mHeight; 667a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPivotX = mPrevWidth / 2; 668a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPivotY = mPrevHeight / 2; 669a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 670a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 671a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if ((mMatrixFlags & ROTATION_3D) == 0) { 672a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->setTranslate(mTranslationX, mTranslationY); 673a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->preRotate(mRotation, mPivotX, mPivotY); 674a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->preScale(mScaleX, mScaleY, mPivotX, mPivotY); 675a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } else { 676a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (!mTransformCamera) { 677a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera = new Sk3DView(); 678a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix3D = new SkMatrix(); 679a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 680a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->reset(); 681a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera->save(); 682a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->preScale(mScaleX, mScaleY, mPivotX, mPivotY); 683a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera->rotateX(mRotationX); 684a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera->rotateY(mRotationY); 685a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera->rotateZ(-mRotation); 686a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera->getMatrix(mTransformMatrix3D); 687a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix3D->preTranslate(-mPivotX, -mPivotY); 688a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix3D->postTranslate(mPivotX + mTranslationX, 689a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPivotY + mTranslationY); 690a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->postConcat(*mTransformMatrix3D); 691a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera->restore(); 692a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 693a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 694a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mMatrixDirty = false; 695a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 696a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 697a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 698a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haasevoid DisplayList::outputViewProperties(OpenGLRenderer& renderer, char* indent) { 6991271e2cc80b01d577e9db339459ef0222bb9320dChet Haase updateMatrix(); 7001271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mLeft != 0 || mTop != 0) { 7011271e2cc80b01d577e9db339459ef0222bb9320dChet Haase ALOGD("%s%s %d, %d", indent, "Translate (left, top)", mLeft, mTop); 7021271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } 7031271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mStaticMatrix) { 7041271e2cc80b01d577e9db339459ef0222bb9320dChet Haase ALOGD("%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 7051271e2cc80b01d577e9db339459ef0222bb9320dChet Haase indent, "ConcatMatrix (static)", mStaticMatrix, 7061271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(0), mStaticMatrix->get(1), 7071271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(2), mStaticMatrix->get(3), 7081271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(4), mStaticMatrix->get(5), 7091271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(6), mStaticMatrix->get(7), 7101271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(8)); 7111271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } 7121271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mAnimationMatrix) { 7131271e2cc80b01d577e9db339459ef0222bb9320dChet Haase ALOGD("%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 7141271e2cc80b01d577e9db339459ef0222bb9320dChet Haase indent, "ConcatMatrix (animation)", mAnimationMatrix, 7151271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(0), mAnimationMatrix->get(1), 7161271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(2), mAnimationMatrix->get(3), 7171271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(4), mAnimationMatrix->get(5), 7181271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(6), mAnimationMatrix->get(7), 7191271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(8)); 7201271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } 7211271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mMatrixFlags != 0) { 7221271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mMatrixFlags == TRANSLATION) { 7231271e2cc80b01d577e9db339459ef0222bb9320dChet Haase ALOGD("%s%s %f, %f", indent, "Translate", mTranslationX, mTranslationY); 7241271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } else { 7259420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase ALOGD("%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 7261271e2cc80b01d577e9db339459ef0222bb9320dChet Haase indent, "ConcatMatrix", mTransformMatrix, 7271271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(0), mTransformMatrix->get(1), 7281271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(2), mTransformMatrix->get(3), 7291271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(4), mTransformMatrix->get(5), 7301271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(6), mTransformMatrix->get(7), 7311271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(8)); 7329d1992deaeb3d60d5928f05b649a2cc654ba98a3Chet Haase } 7331271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } 7341271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mAlpha < 1 && !mCaching) { 7351271e2cc80b01d577e9db339459ef0222bb9320dChet Haase // TODO: should be able to store the size of a DL at record time and not 7361271e2cc80b01d577e9db339459ef0222bb9320dChet Haase // have to pass it into this call. In fact, this information might be in the 7371271e2cc80b01d577e9db339459ef0222bb9320dChet Haase // location/size info that we store with the new native transform data. 7381271e2cc80b01d577e9db339459ef0222bb9320dChet Haase int flags = SkCanvas::kHasAlphaLayer_SaveFlag; 739a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (mClipChildren) { 7401271e2cc80b01d577e9db339459ef0222bb9320dChet Haase flags |= SkCanvas::kClipToLayer_SaveFlag; 741a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 7421271e2cc80b01d577e9db339459ef0222bb9320dChet Haase ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", indent, "SaveLayerAlpha", 7431271e2cc80b01d577e9db339459ef0222bb9320dChet Haase (float) 0, (float) 0, (float) mRight - mLeft, (float) mBottom - mTop, 7441271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mMultipliedAlpha, flags); 7451271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } 7461271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mClipChildren) { 7471271e2cc80b01d577e9db339459ef0222bb9320dChet Haase ALOGD("%s%s %.2f, %.2f, %.2f, %.2f", indent, "ClipRect", 0.0f, 0.0f, 7481271e2cc80b01d577e9db339459ef0222bb9320dChet Haase (float) mRight - mLeft, (float) mBottom - mTop); 749a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 750a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 751ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 7521271e2cc80b01d577e9db339459ef0222bb9320dChet Haasevoid DisplayList::setViewProperties(OpenGLRenderer& renderer, uint32_t level) { 753a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase#if DEBUG_DISPLAY_LIST 754a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase uint32_t count = (level + 1) * 2; 755a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase char indent[count + 1]; 756a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase for (uint32_t i = 0; i < count; i++) { 757a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase indent[i] = ' '; 758a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 759a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase indent[count] = '\0'; 760a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase#endif 7611271e2cc80b01d577e9db339459ef0222bb9320dChet Haase updateMatrix(); 7621271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mLeft != 0 || mTop != 0) { 7631271e2cc80b01d577e9db339459ef0222bb9320dChet Haase DISPLAY_LIST_LOGD("%s%s %d, %d", indent, "Translate (left, top)", mLeft, mTop); 7641271e2cc80b01d577e9db339459ef0222bb9320dChet Haase renderer.translate(mLeft, mTop); 7651271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } 7661271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mStaticMatrix) { 7671271e2cc80b01d577e9db339459ef0222bb9320dChet Haase DISPLAY_LIST_LOGD( 7681271e2cc80b01d577e9db339459ef0222bb9320dChet Haase "%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 7691271e2cc80b01d577e9db339459ef0222bb9320dChet Haase indent, "ConcatMatrix (static)", mStaticMatrix, 7701271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(0), mStaticMatrix->get(1), 7711271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(2), mStaticMatrix->get(3), 7721271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(4), mStaticMatrix->get(5), 7731271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(6), mStaticMatrix->get(7), 7741271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(8)); 7751271e2cc80b01d577e9db339459ef0222bb9320dChet Haase renderer.concatMatrix(mStaticMatrix); 7761271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } else if (mAnimationMatrix) { 7771271e2cc80b01d577e9db339459ef0222bb9320dChet Haase DISPLAY_LIST_LOGD( 7781271e2cc80b01d577e9db339459ef0222bb9320dChet Haase "%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 7791271e2cc80b01d577e9db339459ef0222bb9320dChet Haase indent, "ConcatMatrix (animation)", mAnimationMatrix, 7801271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(0), mAnimationMatrix->get(1), 7811271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(2), mAnimationMatrix->get(3), 7821271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(4), mAnimationMatrix->get(5), 7831271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(6), mAnimationMatrix->get(7), 7841271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(8)); 7851271e2cc80b01d577e9db339459ef0222bb9320dChet Haase renderer.concatMatrix(mAnimationMatrix); 7861271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } 7871271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mMatrixFlags != 0) { 7881271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mMatrixFlags == TRANSLATION) { 7891271e2cc80b01d577e9db339459ef0222bb9320dChet Haase DISPLAY_LIST_LOGD("%s%s %f, %f", indent, "Translate", mTranslationX, mTranslationY); 7901271e2cc80b01d577e9db339459ef0222bb9320dChet Haase renderer.translate(mTranslationX, mTranslationY); 7911271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } else { 7929420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase DISPLAY_LIST_LOGD( 7939420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase "%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 7941271e2cc80b01d577e9db339459ef0222bb9320dChet Haase indent, "ConcatMatrix", mTransformMatrix, 7951271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(0), mTransformMatrix->get(1), 7961271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(2), mTransformMatrix->get(3), 7971271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(4), mTransformMatrix->get(5), 7981271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(6), mTransformMatrix->get(7), 7991271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(8)); 8001271e2cc80b01d577e9db339459ef0222bb9320dChet Haase renderer.concatMatrix(mTransformMatrix); 801a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 8021271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } 8031271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mAlpha < 1 && !mCaching) { 8041271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (!mHasOverlappingRendering) { 8051271e2cc80b01d577e9db339459ef0222bb9320dChet Haase DISPLAY_LIST_LOGD("%s%s %.2f", indent, "SetAlpha", mAlpha); 8061271e2cc80b01d577e9db339459ef0222bb9320dChet Haase renderer.setAlpha(mAlpha); 8071271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } else { 8081271e2cc80b01d577e9db339459ef0222bb9320dChet Haase // TODO: should be able to store the size of a DL at record time and not 8091271e2cc80b01d577e9db339459ef0222bb9320dChet Haase // have to pass it into this call. In fact, this information might be in the 8101271e2cc80b01d577e9db339459ef0222bb9320dChet Haase // location/size info that we store with the new native transform data. 8111271e2cc80b01d577e9db339459ef0222bb9320dChet Haase int flags = SkCanvas::kHasAlphaLayer_SaveFlag; 8121271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mClipChildren) { 8131271e2cc80b01d577e9db339459ef0222bb9320dChet Haase flags |= SkCanvas::kClipToLayer_SaveFlag; 8149d1992deaeb3d60d5928f05b649a2cc654ba98a3Chet Haase } 8151271e2cc80b01d577e9db339459ef0222bb9320dChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", indent, "SaveLayerAlpha", 8161271e2cc80b01d577e9db339459ef0222bb9320dChet Haase (float) 0, (float) 0, (float) mRight - mLeft, (float) mBottom - mTop, 8171271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mMultipliedAlpha, flags); 8181271e2cc80b01d577e9db339459ef0222bb9320dChet Haase renderer.saveLayerAlpha(0, 0, mRight - mLeft, mBottom - mTop, 8191271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mMultipliedAlpha, flags); 8209d1992deaeb3d60d5928f05b649a2cc654ba98a3Chet Haase } 8211271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } 8221271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mClipChildren) { 8231271e2cc80b01d577e9db339459ef0222bb9320dChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f", indent, "ClipRect", 0.0f, 0.0f, 8241271e2cc80b01d577e9db339459ef0222bb9320dChet Haase (float) mRight - mLeft, (float) mBottom - mTop); 8251271e2cc80b01d577e9db339459ef0222bb9320dChet Haase renderer.clipRect(0, 0, mRight - mLeft, mBottom - mTop, 8261271e2cc80b01d577e9db339459ef0222bb9320dChet Haase SkRegion::kIntersect_Op); 827a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 828a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 829a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 830ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase/** 831ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * Changes to replay(), specifically those involving opcode or parameter changes, should be mimicked 832ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * in the output() function, since that function processes the same list of opcodes for the 833ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * purposes of logging display list info for a given view. 834ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase */ 8351271e2cc80b01d577e9db339459ef0222bb9320dChet Haasestatus_t DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flags, uint32_t level) { 8366554943a1dd6854c0f4976900956e556767b49e1Romain Guy status_t drawGlStatus = 0; 837b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy TextContainer text; 838b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mReader.rewind(); 839b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 840ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#if DEBUG_DISPLAY_LIST 841ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy uint32_t count = (level + 1) * 2; 842ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy char indent[count + 1]; 843ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy for (uint32_t i = 0; i < count; i++) { 844ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy indent[i] = ' '; 845ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy } 846ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy indent[count] = '\0'; 847a23eed808a1ae4ec0d818c0a9238385e797fd056Chet Haase Rect* clipRect = renderer.getClipRect(); 848a23eed808a1ae4ec0d818c0a9238385e797fd056Chet Haase DISPLAY_LIST_LOGD("%sStart display list (%p, %s), clipRect: %.0f, %.f, %.0f, %.0f", 849a23eed808a1ae4ec0d818c0a9238385e797fd056Chet Haase (char*) indent + 2, this, mName.string(), clipRect->left, clipRect->top, 850a23eed808a1ae4ec0d818c0a9238385e797fd056Chet Haase clipRect->right, clipRect->bottom); 851ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#endif 852b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 85313631f3da855f200a151e7837ed9f6b079622b58Romain Guy renderer.startMark(mName.string()); 8541271e2cc80b01d577e9db339459ef0222bb9320dChet Haase int restoreTo = renderer.save(SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); 8551271e2cc80b01d577e9db339459ef0222bb9320dChet Haase DISPLAY_LIST_LOGD("%s%s %d %d", indent, "Save", 8561271e2cc80b01d577e9db339459ef0222bb9320dChet Haase SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag, restoreTo); 8571271e2cc80b01d577e9db339459ef0222bb9320dChet Haase setViewProperties(renderer, level); 8581271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (renderer.quickReject(0, 0, mWidth, mHeight)) { 859b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, "RestoreToCount", restoreTo); 860b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase renderer.restoreToCount(restoreTo); 861b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase renderer.endMark(); 862b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase return false; 863b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase } 86413631f3da855f200a151e7837ed9f6b079622b58Romain Guy 8659c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase DisplayListLogBuffer& logBuffer = DisplayListLogBuffer::getInstance(); 866ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy int saveCount = renderer.getSaveCount() - 1; 867b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy while (!mReader.eof()) { 8685b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int op = mReader.readInt(); 86933f6beb10f98e8ba96250e284876d607055d278dRomain Guy if (op & OP_MAY_BE_SKIPPED_MASK) { 870390f882f8905e8d1ac0d4b7f2e01aa04dccc3c16Romain Guy int32_t skip = mReader.readInt(); 87133f6beb10f98e8ba96250e284876d607055d278dRomain Guy if (CC_LIKELY(flags & kReplayFlag_ClipChildren)) { 87233f6beb10f98e8ba96250e284876d607055d278dRomain Guy mReader.skip(skip); 87333f6beb10f98e8ba96250e284876d607055d278dRomain Guy DISPLAY_LIST_LOGD("%s%s skipping %d bytes", (char*) indent, 87433f6beb10f98e8ba96250e284876d607055d278dRomain Guy OP_NAMES[op & ~OP_MAY_BE_SKIPPED_MASK], skip); 87533f6beb10f98e8ba96250e284876d607055d278dRomain Guy continue; 87633f6beb10f98e8ba96250e284876d607055d278dRomain Guy } else { 87733f6beb10f98e8ba96250e284876d607055d278dRomain Guy op &= ~OP_MAY_BE_SKIPPED_MASK; 87833f6beb10f98e8ba96250e284876d607055d278dRomain Guy } 87933f6beb10f98e8ba96250e284876d607055d278dRomain Guy } 8809c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase logBuffer.writeCommand(level, op); 881ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 8825b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy switch (op) { 883daf98e941e140e8739458126640183b9f296a2abChet Haase case DrawGLFunction: { 884daf98e941e140e8739458126640183b9f296a2abChet Haase Functor *functor = (Functor *) getInt(); 885daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], functor); 88613631f3da855f200a151e7837ed9f6b079622b58Romain Guy renderer.startMark("GL functor"); 8876554943a1dd6854c0f4976900956e556767b49e1Romain Guy drawGlStatus |= renderer.callDrawGLFunction(functor, dirty); 88813631f3da855f200a151e7837ed9f6b079622b58Romain Guy renderer.endMark(); 889daf98e941e140e8739458126640183b9f296a2abChet Haase } 890daf98e941e140e8739458126640183b9f296a2abChet Haase break; 891b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Save: { 89233f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t rendererNum = getInt(); 893daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, OP_NAMES[op], rendererNum); 894daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.save(rendererNum); 895b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 896b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 897b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Restore: { 898daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 899b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.restore(); 900b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 901b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 902b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case RestoreToCount: { 90333f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t restoreCount = saveCount + getInt(); 904daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, OP_NAMES[op], restoreCount); 905daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.restoreToCount(restoreCount); 906b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 907b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 908b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SaveLayer: { 909daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 910daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 911daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 912daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 9135ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 91433f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t flags = getInt(); 915daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p, 0x%x", (char*) indent, 916a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase OP_NAMES[op], f1, f2, f3, f4, paint, flags); 917daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.saveLayer(f1, f2, f3, f4, paint, flags); 918b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 919b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 9205b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy case SaveLayerAlpha: { 921daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 922daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 923daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 924daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 92533f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t alpha = getInt(); 92633f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t flags = getInt(); 927daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", (char*) indent, 928a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase OP_NAMES[op], f1, f2, f3, f4, alpha, flags); 929daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.saveLayerAlpha(f1, f2, f3, f4, alpha, flags); 9305b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy } 9315b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy break; 932b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Translate: { 933daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 934daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 935daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], f1, f2); 936daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.translate(f1, f2); 937b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 938b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 939b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Rotate: { 940daf98e941e140e8739458126640183b9f296a2abChet Haase float rotation = getFloat(); 941daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f", (char*) indent, OP_NAMES[op], rotation); 942daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.rotate(rotation); 943b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 944b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 945b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Scale: { 946daf98e941e140e8739458126640183b9f296a2abChet Haase float sx = getFloat(); 947daf98e941e140e8739458126640183b9f296a2abChet Haase float sy = getFloat(); 948daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 949daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.scale(sx, sy); 950b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 951b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 952807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy case Skew: { 953daf98e941e140e8739458126640183b9f296a2abChet Haase float sx = getFloat(); 954daf98e941e140e8739458126640183b9f296a2abChet Haase float sy = getFloat(); 955daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 956daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.skew(sx, sy); 957807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy } 958807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy break; 959b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetMatrix: { 960daf98e941e140e8739458126640183b9f296a2abChet Haase SkMatrix* matrix = getMatrix(); 961daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], matrix); 962daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setMatrix(matrix); 963b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 964b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 965b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ConcatMatrix: { 966daf98e941e140e8739458126640183b9f296a2abChet Haase SkMatrix* matrix = getMatrix(); 967a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase DISPLAY_LIST_LOGD( 968a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase "%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 969a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], matrix, 970a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase matrix->get(0), matrix->get(1), matrix->get(2), 971a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase matrix->get(3), matrix->get(4), matrix->get(5), 972a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase matrix->get(6), matrix->get(7), matrix->get(8)); 973daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.concatMatrix(matrix); 974b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 975b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 976b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ClipRect: { 977daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 978daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 979daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 980daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 98133f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t regionOp = getInt(); 982daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d", (char*) indent, OP_NAMES[op], 983a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase f1, f2, f3, f4, regionOp); 984daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.clipRect(f1, f2, f3, f4, (SkRegion::Op) regionOp); 985b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 986b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 9870fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy case DrawDisplayList: { 988daf98e941e140e8739458126640183b9f296a2abChet Haase DisplayList* displayList = getDisplayList(); 98933f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t flags = getInt(); 99033f6beb10f98e8ba96250e284876d607055d278dRomain Guy DISPLAY_LIST_LOGD("%s%s %p, %dx%d, 0x%x %d", (char*) indent, OP_NAMES[op], 9911271e2cc80b01d577e9db339459ef0222bb9320dChet Haase displayList, mWidth, mHeight, flags, level + 1); 9921271e2cc80b01d577e9db339459ef0222bb9320dChet Haase drawGlStatus |= renderer.drawDisplayList(displayList, dirty, flags, level + 1); 9930fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy } 9940fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy break; 9956c319ca1275c8db892c39b48fc54864c949f9171Romain Guy case DrawLayer: { 996daf98e941e140e8739458126640183b9f296a2abChet Haase Layer* layer = (Layer*) getInt(); 997daf98e941e140e8739458126640183b9f296a2abChet Haase float x = getFloat(); 998daf98e941e140e8739458126640183b9f296a2abChet Haase float y = getFloat(); 9995ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 10006f9ad204cc529babeb3aa7c9a57cf00ed7188471Chet Haase if (mCaching) { 1001a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase paint->setAlpha(mMultipliedAlpha); 1002a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 1003daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 1004a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase layer, x, y, paint); 1005daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawLayer(layer, x, y, paint); 10066c319ca1275c8db892c39b48fc54864c949f9171Romain Guy } 10076c319ca1275c8db892c39b48fc54864c949f9171Romain Guy break; 1008b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmap: { 1009daf98e941e140e8739458126640183b9f296a2abChet Haase SkBitmap* bitmap = getBitmap(); 1010daf98e941e140e8739458126640183b9f296a2abChet Haase float x = getFloat(); 1011daf98e941e140e8739458126640183b9f296a2abChet Haase float y = getFloat(); 10125ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 10136f9ad204cc529babeb3aa7c9a57cf00ed7188471Chet Haase if (mCaching) { 1014b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase paint->setAlpha(mMultipliedAlpha); 1015b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase } 1016daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 1017a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase bitmap, x, y, paint); 1018daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawBitmap(bitmap, x, y, paint); 1019b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1020b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1021b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmapMatrix: { 1022daf98e941e140e8739458126640183b9f296a2abChet Haase SkBitmap* bitmap = getBitmap(); 1023daf98e941e140e8739458126640183b9f296a2abChet Haase SkMatrix* matrix = getMatrix(); 10245ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1025daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %p, %p", (char*) indent, OP_NAMES[op], 1026a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase bitmap, matrix, paint); 1027daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawBitmap(bitmap, matrix, paint); 1028b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1029b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1030b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmapRect: { 1031daf98e941e140e8739458126640183b9f296a2abChet Haase SkBitmap* bitmap = getBitmap(); 1032daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 1033daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 1034daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 1035daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 1036daf98e941e140e8739458126640183b9f296a2abChet Haase float f5 = getFloat(); 1037daf98e941e140e8739458126640183b9f296a2abChet Haase float f6 = getFloat(); 1038daf98e941e140e8739458126640183b9f296a2abChet Haase float f7 = getFloat(); 1039daf98e941e140e8739458126640183b9f296a2abChet Haase float f8 = getFloat(); 10405ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1041daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 1042a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], bitmap, 1043a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase f1, f2, f3, f4, f5, f6, f7, f8,paint); 1044daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawBitmap(bitmap, f1, f2, f3, f4, f5, f6, f7, f8, paint); 1045b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1046b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1047e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy case DrawBitmapData: { 1048e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy SkBitmap* bitmap = getBitmapData(); 1049e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy float x = getFloat(); 1050e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy float y = getFloat(); 1051e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy SkPaint* paint = getPaint(renderer); 1052e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 1053e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy bitmap, x, y, paint); 105449c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy renderer.drawBitmap(bitmap, x, y, paint); 1055e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy } 1056e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy break; 10575a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy case DrawBitmapMesh: { 105833f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t verticesCount = 0; 10595a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t colorsCount = 0; 10605a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 10615a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy SkBitmap* bitmap = getBitmap(); 10625a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t meshWidth = getInt(); 10635a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t meshHeight = getInt(); 10645a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy float* vertices = getFloats(verticesCount); 10655a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy bool hasColors = getInt(); 106633f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t* colors = hasColors ? getInts(colorsCount) : NULL; 10675ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 10685a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 1069daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 10709ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy renderer.drawBitmapMesh(bitmap, meshWidth, meshHeight, vertices, colors, paint); 10715a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } 1072a566b7c3aada08d37cf08096c972e3e641bed773Romain Guy break; 1073b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawPatch: { 1074b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int32_t* xDivs = NULL; 1075b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int32_t* yDivs = NULL; 10764bb942083a0d4db746adf95349108dd8ef842e32Romain Guy uint32_t* colors = NULL; 1077b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy uint32_t xDivsCount = 0; 1078b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy uint32_t yDivsCount = 0; 10794bb942083a0d4db746adf95349108dd8ef842e32Romain Guy int8_t numColors = 0; 1080b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1081b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkBitmap* bitmap = getBitmap(); 1082b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1083b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy xDivs = getInts(xDivsCount); 1084b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy yDivs = getInts(yDivsCount); 10854bb942083a0d4db746adf95349108dd8ef842e32Romain Guy colors = getUInts(numColors); 1086b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 10879ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float left = getFloat(); 10889ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float top = getFloat(); 10899ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float right = getFloat(); 10909ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float bottom = getFloat(); 10915ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 10929ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy 1093daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 10944bb942083a0d4db746adf95349108dd8ef842e32Romain Guy renderer.drawPatch(bitmap, xDivs, yDivs, colors, xDivsCount, yDivsCount, 10959ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy numColors, left, top, right, bottom, paint); 1096b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1097b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1098b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawColor: { 109933f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t color = getInt(); 110033f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t xferMode = getInt(); 1101daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s 0x%x %d", (char*) indent, OP_NAMES[op], color, xferMode); 1102daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawColor(color, (SkXfermode::Mode) xferMode); 1103b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1104b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1105b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawRect: { 1106daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 1107daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 1108daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 1109daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 11105ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1111daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 1112a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase f1, f2, f3, f4, paint); 1113daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawRect(f1, f2, f3, f4, paint); 1114b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1115b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 111601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy case DrawRoundRect: { 1117daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 1118daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 1119daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 1120daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 1121daf98e941e140e8739458126640183b9f296a2abChet Haase float f5 = getFloat(); 1122daf98e941e140e8739458126640183b9f296a2abChet Haase float f6 = getFloat(); 11235ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1124daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 1125a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, paint); 1126daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawRoundRect(f1, f2, f3, f4, f5, f6, paint); 112701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy } 112801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy break; 112901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy case DrawCircle: { 1130daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 1131daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 1132daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 11335ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1134daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %p", 1135a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, paint); 1136daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawCircle(f1, f2, f3, paint); 113701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy } 113801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy break; 1139c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy case DrawOval: { 1140daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 1141daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 1142daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 1143daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 11445ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1145daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", 1146a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, paint); 1147daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawOval(f1, f2, f3, f4, paint); 1148c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy } 1149c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy break; 11508b2f5267f16c295f12faab810527cd6311997e34Romain Guy case DrawArc: { 1151daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 1152daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 1153daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 1154daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 1155daf98e941e140e8739458126640183b9f296a2abChet Haase float f5 = getFloat(); 1156daf98e941e140e8739458126640183b9f296a2abChet Haase float f6 = getFloat(); 115733f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t i1 = getInt(); 11585ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1159daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %d, %p", 1160a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, i1, paint); 1161daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawArc(f1, f2, f3, f4, f5, f6, i1 == 1, paint); 11628b2f5267f16c295f12faab810527cd6311997e34Romain Guy } 11638b2f5267f16c295f12faab810527cd6311997e34Romain Guy break; 1164b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawPath: { 1165daf98e941e140e8739458126640183b9f296a2abChet Haase SkPath* path = getPath(); 11665ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1167daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %p", (char*) indent, OP_NAMES[op], path, paint); 1168daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawPath(path, paint); 1169b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1170b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1171b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawLines: { 117233f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t count = 0; 1173b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy float* points = getFloats(count); 11745ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1175daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 11769ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy renderer.drawLines(points, count, paint); 1177b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1178b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1179ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy case DrawPoints: { 118033f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t count = 0; 1181ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy float* points = getFloats(count); 11825ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1183ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 11849ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy renderer.drawPoints(points, count, paint); 1185ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy } 1186ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy break; 1187b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawText: { 1188b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy getText(&text); 118933f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t count = getInt(); 1190daf98e941e140e8739458126640183b9f296a2abChet Haase float x = getFloat(); 1191daf98e941e140e8739458126640183b9f296a2abChet Haase float y = getFloat(); 11925ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1193cac5fd3e09e9dc918753d4aff624bf29a367ade3Romain Guy float length = getFloat(); 1194cac5fd3e09e9dc918753d4aff624bf29a367ade3Romain Guy DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %.2f, %.2f, %p, %.2f", (char*) indent, 1195cac5fd3e09e9dc918753d4aff624bf29a367ade3Romain Guy OP_NAMES[op], text.text(), text.length(), count, x, y, paint, length); 1196cac5fd3e09e9dc918753d4aff624bf29a367ade3Romain Guy renderer.drawText(text.text(), text.length(), count, x, y, paint, length); 1197b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1198b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1199325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy case DrawTextOnPath: { 1200325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy getText(&text); 1201325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy int32_t count = getInt(); 1202325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy SkPath* path = getPath(); 1203325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy float hOffset = getFloat(); 1204325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy float vOffset = getFloat(); 1205325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy SkPaint* paint = getPaint(renderer); 1206325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %p", (char*) indent, OP_NAMES[op], 1207325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy text.text(), text.length(), count, paint); 1208325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy renderer.drawTextOnPath(text.text(), text.length(), count, path, 1209325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy hOffset, vOffset, paint); 1210325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy } 1211325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy break; 1212eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy case DrawPosText: { 1213eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy getText(&text); 121433f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t count = getInt(); 121533f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t positionsCount = 0; 1216eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy float* positions = getFloats(positionsCount); 12175ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1218eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %p", (char*) indent, 1219eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy OP_NAMES[op], text.text(), text.length(), count, paint); 1220eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy renderer.drawPosText(text.text(), text.length(), count, positions, paint); 1221eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy } 1222eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy break; 1223b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetShader: { 1224daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 1225b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetShader(); 1226b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1227b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1228b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupShader: { 1229daf98e941e140e8739458126640183b9f296a2abChet Haase SkiaShader* shader = getShader(); 1230daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], shader); 1231daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setupShader(shader); 1232b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1233b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1234b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetColorFilter: { 1235daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 1236b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetColorFilter(); 1237b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1238b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1239b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupColorFilter: { 1240daf98e941e140e8739458126640183b9f296a2abChet Haase SkiaColorFilter *colorFilter = getColorFilter(); 1241daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], colorFilter); 1242daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setupColorFilter(colorFilter); 1243b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1244b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1245b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetShadow: { 1246daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 1247b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetShadow(); 1248b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1249b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1250b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupShadow: { 1251daf98e941e140e8739458126640183b9f296a2abChet Haase float radius = getFloat(); 1252daf98e941e140e8739458126640183b9f296a2abChet Haase float dx = getFloat(); 1253daf98e941e140e8739458126640183b9f296a2abChet Haase float dy = getFloat(); 125433f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t color = getInt(); 1255daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, 0x%x", (char*) indent, OP_NAMES[op], 1256a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase radius, dx, dy, color); 1257daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setupShadow(radius, dx, dy, color); 1258daf98e941e140e8739458126640183b9f296a2abChet Haase } 1259daf98e941e140e8739458126640183b9f296a2abChet Haase break; 12605ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy case ResetPaintFilter: { 12615ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 12625ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy renderer.resetPaintFilter(); 12635ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy } 12645ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy break; 12655ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy case SetupPaintFilter: { 126633f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t clearBits = getInt(); 126733f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t setBits = getInt(); 12685ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy DISPLAY_LIST_LOGD("%s%s 0x%x, 0x%x", (char*) indent, OP_NAMES[op], 12695ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy clearBits, setBits); 12705ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy renderer.setupPaintFilter(clearBits, setBits); 12715ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy } 12725ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy break; 1273daf98e941e140e8739458126640183b9f296a2abChet Haase default: 1274daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("Display List error: op not handled: %s%s", 1275a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op]); 1276daf98e941e140e8739458126640183b9f296a2abChet Haase break; 1277b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1278b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1279ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 12801271e2cc80b01d577e9db339459ef0222bb9320dChet Haase DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, "RestoreToCount", restoreTo); 12811271e2cc80b01d577e9db339459ef0222bb9320dChet Haase renderer.restoreToCount(restoreTo); 128213631f3da855f200a151e7837ed9f6b079622b58Romain Guy renderer.endMark(); 128313631f3da855f200a151e7837ed9f6b079622b58Romain Guy 1284a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase DISPLAY_LIST_LOGD("%sDone (%p, %s), returning %d", (char*) indent + 2, this, mName.string(), 12856554943a1dd6854c0f4976900956e556767b49e1Romain Guy drawGlStatus); 12866554943a1dd6854c0f4976900956e556767b49e1Romain Guy return drawGlStatus; 1287b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 1288b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1289b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/////////////////////////////////////////////////////////////////////////////// 12904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Base structure 12914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 12924aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1293a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet HaaseDisplayListRenderer::DisplayListRenderer() : mWriter(MIN_WRITER_SIZE), 129433f6beb10f98e8ba96250e284876d607055d278dRomain Guy mTranslateX(0.0f), mTranslateY(0.0f), mHasTranslate(false), mHasDrawOps(false) { 12954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 12964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 12974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain GuyDisplayListRenderer::~DisplayListRenderer() { 12984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy reset(); 12994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 13004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 13014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::reset() { 13024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.reset(); 13035c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 13045c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Caches& caches = Caches::getInstance(); 13055c13d89c1332fcc499379b9064b891187b75ca32Chet Haase for (size_t i = 0; i < mBitmapResources.size(); i++) { 1306d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.decrementRefcount(mBitmapResources.itemAt(i)); 13075c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 13085c13d89c1332fcc499379b9064b891187b75ca32Chet Haase mBitmapResources.clear(); 1309d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 131049c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy for (size_t i = 0; i < mOwnedBitmapResources.size(); i++) { 131149c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy SkBitmap* bitmap = mOwnedBitmapResources.itemAt(i); 131249c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy caches.resourceCache.decrementRefcount(bitmap); 131349c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy } 131449c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy mOwnedBitmapResources.clear(); 131549c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy 1316d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy for (size_t i = 0; i < mFilterResources.size(); i++) { 1317d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.decrementRefcount(mFilterResources.itemAt(i)); 1318d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy } 1319d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy mFilterResources.clear(); 1320d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 132143ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy for (size_t i = 0; i < mShaders.size(); i++) { 1322d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.decrementRefcount(mShaders.itemAt(i)); 132343ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy } 132424c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaders.clear(); 132524c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaderMap.clear(); 132643ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy 1327d34dd71800d9a1077e58c3b7f2511c46848da417Chet Haase for (size_t i = 0; i < mSourcePaths.size(); i++) { 1328d34dd71800d9a1077e58c3b7f2511c46848da417Chet Haase caches.resourceCache.decrementRefcount(mSourcePaths.itemAt(i)); 1329d34dd71800d9a1077e58c3b7f2511c46848da417Chet Haase } 1330d34dd71800d9a1077e58c3b7f2511c46848da417Chet Haase mSourcePaths.clear(); 1331d34dd71800d9a1077e58c3b7f2511c46848da417Chet Haase 133243ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy mPaints.clear(); 133343ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy mPaintMap.clear(); 1334d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 13352fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPaths.clear(); 13362fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPathMap.clear(); 1337d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 1338d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mMatrices.clear(); 133904c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy 134004c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy mHasDrawOps = false; 13414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 13424aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 13434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 13444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Operations 13454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 13464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1347162a0217563f4665da6eb183dfce0fef740f641fJeff BrownDisplayList* DisplayListRenderer::getDisplayList(DisplayList* displayList) { 1348162a0217563f4665da6eb183dfce0fef740f641fJeff Brown if (!displayList) { 1349162a0217563f4665da6eb183dfce0fef740f641fJeff Brown displayList = new DisplayList(*this); 13505977baa1fa24125c148a72699b53e62abaf08960Chet Haase } else { 1351162a0217563f4665da6eb183dfce0fef740f641fJeff Brown displayList->initFromDisplayListRenderer(*this, true); 13525977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 135304c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy displayList->setRenderable(mHasDrawOps); 1354162a0217563f4665da6eb183dfce0fef740f641fJeff Brown return displayList; 13555977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 13565977baa1fa24125c148a72699b53e62abaf08960Chet Haase 135749c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guybool DisplayListRenderer::isDeferred() { 135849c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy return true; 135949c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy} 136049c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy 1361b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyvoid DisplayListRenderer::setViewport(int width, int height) { 1362b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mOrthoMatrix.loadOrtho(0, width, height, 0, -1, 1); 1363b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1364b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mWidth = width; 1365b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mHeight = height; 1366b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 1367b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 13687d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guyvoid DisplayListRenderer::prepareDirty(float left, float top, 13697d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy float right, float bottom, bool opaque) { 1370b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSnapshot = new Snapshot(mFirstSnapshot, 1371b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); 1372b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSaveCount = 1; 1373b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSnapshot->setClip(0.0f, 0.0f, mWidth, mHeight); 137427454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mRestoreSaveCount = -1; 137527454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy} 137627454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy 137727454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guyvoid DisplayListRenderer::finish() { 137827454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy insertRestoreToCount(); 137933f6beb10f98e8ba96250e284876d607055d278dRomain Guy insertTranlate(); 1380b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 1381b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1382daf98e941e140e8739458126640183b9f296a2abChet Haasevoid DisplayListRenderer::interrupt() { 1383daf98e941e140e8739458126640183b9f296a2abChet Haase} 1384daf98e941e140e8739458126640183b9f296a2abChet Haase 13852b1847ea60650a9f68372abe860415f18b55081dRomain Guyvoid DisplayListRenderer::resume() { 13864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 13874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 13886554943a1dd6854c0f4976900956e556767b49e1Romain Guystatus_t DisplayListRenderer::callDrawGLFunction(Functor *functor, Rect& dirty) { 1389cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy // Ignore dirty during recording, it matters only when we replay 1390daf98e941e140e8739458126640183b9f296a2abChet Haase addOp(DisplayList::DrawGLFunction); 1391daf98e941e140e8739458126640183b9f296a2abChet Haase addInt((int) functor); 13926554943a1dd6854c0f4976900956e556767b49e1Romain Guy return DrawGlInfo::kStatusDone; // No invalidate needed at record-time 1393daf98e941e140e8739458126640183b9f296a2abChet Haase} 1394daf98e941e140e8739458126640183b9f296a2abChet Haase 13954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::save(int flags) { 1396b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Save); 13974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(flags); 13984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return OpenGLRenderer::save(flags); 13994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restore() { 140204c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy if (mRestoreSaveCount < 0) { 140333f6beb10f98e8ba96250e284876d607055d278dRomain Guy restoreToCount(getSaveCount() - 1); 140433f6beb10f98e8ba96250e284876d607055d278dRomain Guy return; 140504c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy } 140633f6beb10f98e8ba96250e284876d607055d278dRomain Guy 140733f6beb10f98e8ba96250e284876d607055d278dRomain Guy mRestoreSaveCount--; 140833f6beb10f98e8ba96250e284876d607055d278dRomain Guy insertTranlate(); 14094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::restore(); 14104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restoreToCount(int saveCount) { 141327454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mRestoreSaveCount = saveCount; 141433f6beb10f98e8ba96250e284876d607055d278dRomain Guy insertTranlate(); 14154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::restoreToCount(saveCount); 14164aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::saveLayer(float left, float top, float right, float bottom, 14195c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* p, int flags) { 1420b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SaveLayer); 14214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 14224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(p); 14234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(flags); 1424b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return OpenGLRenderer::save(flags); 14254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14275b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guyint DisplayListRenderer::saveLayerAlpha(float left, float top, float right, float bottom, 14285b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int alpha, int flags) { 14295b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addOp(DisplayList::SaveLayerAlpha); 14305b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addBounds(left, top, right, bottom); 14315b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addInt(alpha); 14325b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addInt(flags); 14335b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy return OpenGLRenderer::save(flags); 14345b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy} 14355b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy 14364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::translate(float dx, float dy) { 143733f6beb10f98e8ba96250e284876d607055d278dRomain Guy mHasTranslate = true; 143833f6beb10f98e8ba96250e284876d607055d278dRomain Guy mTranslateX += dx; 143933f6beb10f98e8ba96250e284876d607055d278dRomain Guy mTranslateY += dy; 144033f6beb10f98e8ba96250e284876d607055d278dRomain Guy insertRestoreToCount(); 14414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::translate(dx, dy); 14424aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::rotate(float degrees) { 1445b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Rotate); 14464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloat(degrees); 14474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::rotate(degrees); 14484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::scale(float sx, float sy) { 1451b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Scale); 14524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(sx, sy); 14534aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::scale(sx, sy); 14544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1456807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guyvoid DisplayListRenderer::skew(float sx, float sy) { 1457807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy addOp(DisplayList::Skew); 1458807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy addPoint(sx, sy); 1459807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy OpenGLRenderer::skew(sx, sy); 1460807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy} 1461807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy 14624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setMatrix(SkMatrix* matrix) { 1463b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SetMatrix); 14644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 14654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::setMatrix(matrix); 14664aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14674aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::concatMatrix(SkMatrix* matrix) { 1469b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ConcatMatrix); 14704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 14714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::concatMatrix(matrix); 14724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guybool DisplayListRenderer::clipRect(float left, float top, float right, float bottom, 14754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkRegion::Op op) { 1476b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ClipRect); 14774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 14784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(op); 14794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return OpenGLRenderer::clipRect(left, top, right, bottom, op); 14804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14826554943a1dd6854c0f4976900956e556767b49e1Romain Guystatus_t DisplayListRenderer::drawDisplayList(DisplayList* displayList, 14831271e2cc80b01d577e9db339459ef0222bb9320dChet Haase Rect& dirty, int32_t flags, uint32_t level) { 1484cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy // dirty is an out parameter and should not be recorded, 1485cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy // it matters only when replaying the display list 1486b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase 1487b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase addOp(DisplayList::DrawDisplayList); 14880fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addDisplayList(displayList); 148933f6beb10f98e8ba96250e284876d607055d278dRomain Guy addInt(flags); 14906554943a1dd6854c0f4976900956e556767b49e1Romain Guy return DrawGlInfo::kStatusDone; 14910fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy} 14920fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy 1493ada830f639591b99c3e40de22b07296c7932a33fRomain Guyvoid DisplayListRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* paint) { 14946c319ca1275c8db892c39b48fc54864c949f9171Romain Guy addOp(DisplayList::DrawLayer); 1495ada830f639591b99c3e40de22b07296c7932a33fRomain Guy addInt((int) layer); 1496ada830f639591b99c3e40de22b07296c7932a33fRomain Guy addPoint(x, y); 14976c319ca1275c8db892c39b48fc54864c949f9171Romain Guy addPaint(paint); 14986c319ca1275c8db892c39b48fc54864c949f9171Romain Guy} 14996c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 150033f6beb10f98e8ba96250e284876d607055d278dRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float left, float top, SkPaint* paint) { 150133f6beb10f98e8ba96250e284876d607055d278dRomain Guy const bool reject = quickReject(left, top, left + bitmap->width(), top + bitmap->height()); 150233f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawBitmap, reject); 15034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 15044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(left, top); 15054aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 150633f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 15074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 15084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 150933f6beb10f98e8ba96250e284876d607055d278dRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, SkPaint* paint) { 151033f6beb10f98e8ba96250e284876d607055d278dRomain Guy Rect r(0.0f, 0.0f, bitmap->width(), bitmap->height()); 151133f6beb10f98e8ba96250e284876d607055d278dRomain Guy const mat4 transform(*matrix); 151233f6beb10f98e8ba96250e284876d607055d278dRomain Guy transform.mapRect(r); 151333f6beb10f98e8ba96250e284876d607055d278dRomain Guy 151433f6beb10f98e8ba96250e284876d607055d278dRomain Guy const bool reject = quickReject(r.left, r.top, r.right, r.bottom); 151533f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawBitmapMatrix, reject); 15164aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 15174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 15184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 151933f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 15204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 15214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 15224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop, 15234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float srcRight, float srcBottom, float dstLeft, float dstTop, 15245c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float dstRight, float dstBottom, SkPaint* paint) { 152533f6beb10f98e8ba96250e284876d607055d278dRomain Guy const bool reject = quickReject(dstLeft, dstTop, dstRight, dstBottom); 152633f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawBitmapRect, reject); 15274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 15284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(srcLeft, srcTop, srcRight, srcBottom); 15294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(dstLeft, dstTop, dstRight, dstBottom); 15304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 153133f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 15324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 15334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1534e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guyvoid DisplayListRenderer::drawBitmapData(SkBitmap* bitmap, float left, float top, SkPaint* paint) { 1535e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy const bool reject = quickReject(left, top, left + bitmap->width(), bitmap->height()); 1536e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy uint32_t* location = addOp(DisplayList::DrawBitmapData, reject); 1537e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy addBitmapData(bitmap); 1538e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy addPoint(left, top); 1539e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy addPaint(paint); 1540e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy addSkip(location); 1541e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy} 1542e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy 15435a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guyvoid DisplayListRenderer::drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight, 15445a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy float* vertices, int* colors, SkPaint* paint) { 15455a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addOp(DisplayList::DrawBitmapMesh); 15465a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addBitmap(bitmap); 15475a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(meshWidth); 15485a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(meshHeight); 15495a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addFloats(vertices, (meshWidth + 1) * (meshHeight + 1) * 2); 15505a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy if (colors) { 15515a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(1); 15525a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInts(colors, (meshWidth + 1) * (meshHeight + 1)); 15535a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } else { 15545a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(0); 15555a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } 15565a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addPaint(paint); 15575a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy} 15585a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 15594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int32_t* yDivs, 15604bb942083a0d4db746adf95349108dd8ef842e32Romain Guy const uint32_t* colors, uint32_t width, uint32_t height, int8_t numColors, 15615c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float left, float top, float right, float bottom, SkPaint* paint) { 156233f6beb10f98e8ba96250e284876d607055d278dRomain Guy const bool reject = quickReject(left, top, right, bottom); 156333f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawPatch, reject); 15644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 15654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInts(xDivs, width); 15664aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInts(yDivs, height); 15674bb942083a0d4db746adf95349108dd8ef842e32Romain Guy addUInts(colors, numColors); 15684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 15694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 157033f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 15714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 15724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 15734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawColor(int color, SkXfermode::Mode mode) { 1574b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawColor); 15754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(color); 15764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(mode); 15774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 15784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 15794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawRect(float left, float top, float right, float bottom, 15805c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 158133f6beb10f98e8ba96250e284876d607055d278dRomain Guy const bool reject = paint->getStyle() == SkPaint::kFill_Style && 158233f6beb10f98e8ba96250e284876d607055d278dRomain Guy quickReject(left, top, right, bottom); 158333f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawRect, reject); 15844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 15854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 158633f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 15874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 15884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 158901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guyvoid DisplayListRenderer::drawRoundRect(float left, float top, float right, float bottom, 1590a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase float rx, float ry, SkPaint* paint) { 159133f6beb10f98e8ba96250e284876d607055d278dRomain Guy const bool reject = paint->getStyle() == SkPaint::kFill_Style && 159233f6beb10f98e8ba96250e284876d607055d278dRomain Guy quickReject(left, top, right, bottom); 159333f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawRoundRect, reject); 159401d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addBounds(left, top, right, bottom); 159501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPoint(rx, ry); 159601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPaint(paint); 159733f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 159801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy} 159901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy 160001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guyvoid DisplayListRenderer::drawCircle(float x, float y, float radius, SkPaint* paint) { 160101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addOp(DisplayList::DrawCircle); 160201d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPoint(x, y); 160301d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addFloat(radius); 160401d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPaint(paint); 160501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy} 160601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy 1607c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guyvoid DisplayListRenderer::drawOval(float left, float top, float right, float bottom, 1608c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy SkPaint* paint) { 1609c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addOp(DisplayList::DrawOval); 1610c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addBounds(left, top, right, bottom); 1611c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addPaint(paint); 1612c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy} 1613c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy 16148b2f5267f16c295f12faab810527cd6311997e34Romain Guyvoid DisplayListRenderer::drawArc(float left, float top, float right, float bottom, 16158b2f5267f16c295f12faab810527cd6311997e34Romain Guy float startAngle, float sweepAngle, bool useCenter, SkPaint* paint) { 161682d41a515368236e56454bd84023bebd6306f6b7Romain Guy addOp(DisplayList::DrawArc); 16178b2f5267f16c295f12faab810527cd6311997e34Romain Guy addBounds(left, top, right, bottom); 16188b2f5267f16c295f12faab810527cd6311997e34Romain Guy addPoint(startAngle, sweepAngle); 16198b2f5267f16c295f12faab810527cd6311997e34Romain Guy addInt(useCenter ? 1 : 0); 16208b2f5267f16c295f12faab810527cd6311997e34Romain Guy addPaint(paint); 16218b2f5267f16c295f12faab810527cd6311997e34Romain Guy} 16228b2f5267f16c295f12faab810527cd6311997e34Romain Guy 16234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawPath(SkPath* path, SkPaint* paint) { 162433f6beb10f98e8ba96250e284876d607055d278dRomain Guy float left, top, offset; 162533f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t width, height; 162633f6beb10f98e8ba96250e284876d607055d278dRomain Guy computePathBounds(path, paint, left, top, offset, width, height); 162733f6beb10f98e8ba96250e284876d607055d278dRomain Guy 162833f6beb10f98e8ba96250e284876d607055d278dRomain Guy const bool reject = quickReject(left - offset, top - offset, width, height); 162933f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawPath, reject); 16304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPath(path); 16314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 163233f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 16334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 16344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 16355c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid DisplayListRenderer::drawLines(float* points, int count, SkPaint* paint) { 1636b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawLines); 16374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloats(points, count); 16384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 1639ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy} 1640ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy 1641ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guyvoid DisplayListRenderer::drawPoints(float* points, int count, SkPaint* paint) { 1642ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy addOp(DisplayList::DrawPoints); 1643ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy addFloats(points, count); 1644ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy addPaint(paint); 16454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 16464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 16474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawText(const char* text, int bytesCount, int count, 1648cac5fd3e09e9dc918753d4aff624bf29a367ade3Romain Guy float x, float y, SkPaint* paint, float length) { 164933f6beb10f98e8ba96250e284876d607055d278dRomain Guy if (!text || count <= 0) return; 165033f6beb10f98e8ba96250e284876d607055d278dRomain Guy 16518f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // TODO: We should probably make a copy of the paint instead of modifying 16528f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // it; modifying the paint will change its generationID the first 16538f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // time, which might impact caches. More investigation needed to 16548f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // see if it matters. 16558f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // If we make a copy, then drawTextDecorations() should *not* make 16568f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // its own copy as it does right now. 1657c511bee87cda99a252d1a62487f47c8f05aee78cFabrice Di Meglio // Beware: this needs Glyph encoding (already done on the Paint constructor) 16588f9a9f61ab793d9387a5942b307e74324704893bRomain Guy paint->setAntiAlias(true); 165933f6beb10f98e8ba96250e284876d607055d278dRomain Guy if (length < 0.0f) length = paint->measureText(text, bytesCount); 166033f6beb10f98e8ba96250e284876d607055d278dRomain Guy 166133f6beb10f98e8ba96250e284876d607055d278dRomain Guy bool reject = false; 166233f6beb10f98e8ba96250e284876d607055d278dRomain Guy if (CC_LIKELY(paint->getTextAlign() == SkPaint::kLeft_Align)) { 166333f6beb10f98e8ba96250e284876d607055d278dRomain Guy SkPaint::FontMetrics metrics; 166433f6beb10f98e8ba96250e284876d607055d278dRomain Guy paint->getFontMetrics(&metrics, 0.0f); 166533f6beb10f98e8ba96250e284876d607055d278dRomain Guy reject = quickReject(x, y + metrics.fTop, x + length, y + metrics.fBottom); 166633f6beb10f98e8ba96250e284876d607055d278dRomain Guy } 166733f6beb10f98e8ba96250e284876d607055d278dRomain Guy 166833f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawText, reject); 166933f6beb10f98e8ba96250e284876d607055d278dRomain Guy addText(text, bytesCount); 167033f6beb10f98e8ba96250e284876d607055d278dRomain Guy addInt(count); 167133f6beb10f98e8ba96250e284876d607055d278dRomain Guy addPoint(x, y); 16724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 167333f6beb10f98e8ba96250e284876d607055d278dRomain Guy addFloat(length); 167433f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 16754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 16764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1677325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guyvoid DisplayListRenderer::drawTextOnPath(const char* text, int bytesCount, int count, 1678325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy SkPath* path, float hOffset, float vOffset, SkPaint* paint) { 1679325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy if (!text || count <= 0) return; 1680325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy addOp(DisplayList::DrawTextOnPath); 1681325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy addText(text, bytesCount); 1682325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy addInt(count); 1683325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy addPath(path); 1684325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy addFloat(hOffset); 1685325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy addFloat(vOffset); 1686325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy paint->setAntiAlias(true); 1687325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy addPaint(paint); 1688325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy} 1689325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy 1690eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guyvoid DisplayListRenderer::drawPosText(const char* text, int bytesCount, int count, 1691eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy const float* positions, SkPaint* paint) { 169233f6beb10f98e8ba96250e284876d607055d278dRomain Guy if (!text || count <= 0) return; 1693eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy addOp(DisplayList::DrawPosText); 1694eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy addText(text, bytesCount); 1695eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy addInt(count); 1696eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy addFloats(positions, count * 2); 1697eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy paint->setAntiAlias(true); 1698eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy addPaint(paint); 1699eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy} 1700eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy 17014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShader() { 1702b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetShader); 17034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 17044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 17054aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShader(SkiaShader* shader) { 17065c13d89c1332fcc499379b9064b891187b75ca32Chet Haase addOp(DisplayList::SetupShader); 17075c13d89c1332fcc499379b9064b891187b75ca32Chet Haase addShader(shader); 17084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 17094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 17104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetColorFilter() { 1711b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetColorFilter); 17124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 17134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 17144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupColorFilter(SkiaColorFilter* filter) { 1715ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase addOp(DisplayList::SetupColorFilter); 1716ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase addColorFilter(filter); 17174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 17184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 17194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShadow() { 1720b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetShadow); 17214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 17224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 17234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShadow(float radius, float dx, float dy, int color) { 1724b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SetupShadow); 17254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloat(radius); 17264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(dx, dy); 17274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(color); 17284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 17294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 17305ff9df658230d49e42c43586997a02d8e4dd417eRomain Guyvoid DisplayListRenderer::resetPaintFilter() { 17315ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy addOp(DisplayList::ResetPaintFilter); 17325ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy} 17335ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy 17345ff9df658230d49e42c43586997a02d8e4dd417eRomain Guyvoid DisplayListRenderer::setupPaintFilter(int clearBits, int setBits) { 17355ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy addOp(DisplayList::SetupPaintFilter); 17365ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy addInt(clearBits); 17375ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy addInt(setBits); 17385ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy} 17395ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy 17404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace uirenderer 17414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace android 1742