DisplayListRenderer.cpp revision be6f9dc1e71b425b7ac1c40c0a2c72d03eb9fbee
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(); 489be6f9dc1e71b425b7ac1c40c0a2c72d03eb9fbeeRomain Guy int alpha = getInt(); 490be6f9dc1e71b425b7ac1c40c0a2c72d03eb9fbeeRomain Guy SkXfermode::Mode mode = (SkXfermode::Mode) getInt(); 4915baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f", (char*) indent, OP_NAMES[op], 492a62f172215727a1e00af0cb934904e00926a86c9Romain Guy left, top, right, bottom); 493ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 494ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 495ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawColor: { 496ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int color = getInt(); 497ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int xferMode = getInt(); 4985baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s 0x%x %d", (char*) indent, OP_NAMES[op], color, xferMode); 499ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 500ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 501ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawRect: { 502ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 503ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 504ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 505ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 5065ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5075baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 508a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase f1, f2, f3, f4, paint); 509ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 510ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 511ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawRoundRect: { 512ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 513ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 514ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 515ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 516ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f5 = getFloat(); 517ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f6 = getFloat(); 5185ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5195baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 520a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, paint); 521ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 522ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 523ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawCircle: { 524ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 525ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 526ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 5275ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5285baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %p", 529a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, paint); 530ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 531ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 532ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawOval: { 533ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 534ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 535ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 536ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 5375ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5385baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", 539a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, paint); 540ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 541ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 542ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawArc: { 543ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 544ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 545ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 546ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 547ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f5 = getFloat(); 548ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f6 = getFloat(); 549ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int i1 = getInt(); 5505ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5515baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %d, %p", 552a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, i1, paint); 553ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 554ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 555ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawPath: { 556ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPath* path = getPath(); 5575ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5585baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p, %p", (char*) indent, OP_NAMES[op], path, paint); 559ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 560ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 561ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawLines: { 562ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int count = 0; 563ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float* points = getFloats(count); 5645ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5655baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 566ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 567ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 568ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawPoints: { 569ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int count = 0; 570ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float* points = getFloats(count); 5715ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 5725baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 573ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 574ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 575ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawText: { 576ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase getText(&text); 577325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy int32_t count = getInt(); 578ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float x = getFloat(); 579ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float y = getFloat(); 5805ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 581cac5fd3e09e9dc918753d4aff624bf29a367ade3Romain Guy float length = getFloat(); 5825baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %s, %d, %d, %.2f, %.2f, %p, %.2f", (char*) indent, OP_NAMES[op], 583a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase text.text(), text.length(), count, x, y, paint, length); 584ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 585ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 586325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy case DrawTextOnPath: { 587325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy getText(&text); 588325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy int32_t count = getInt(); 589325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy SkPath* path = getPath(); 590325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy float hOffset = getFloat(); 591325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy float vOffset = getFloat(); 592325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy SkPaint* paint = getPaint(renderer); 593325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy ALOGD("%s%s %s, %d, %d, %p", (char*) indent, OP_NAMES[op], 594325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy text.text(), text.length(), count, paint); 595325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy } 596325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy break; 597eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy case DrawPosText: { 598eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy getText(&text); 599eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy int count = getInt(); 600eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy int positionsCount = 0; 601eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy float* positions = getFloats(positionsCount); 6025ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 603eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy ALOGD("%s%s %s, %d, %d, %p", (char*) indent, OP_NAMES[op], 604a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase text.text(), text.length(), count, paint); 605eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy } 606ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ResetShader: { 6075baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 608ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 609ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 610ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SetupShader: { 611ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkiaShader* shader = getShader(); 6125baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p", (char*) indent, OP_NAMES[op], shader); 613ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 614ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 615ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ResetColorFilter: { 6165baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 617ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 618ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 619ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SetupColorFilter: { 620ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkiaColorFilter *colorFilter = getColorFilter(); 6215baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p", (char*) indent, OP_NAMES[op], colorFilter); 622ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 623ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 624ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ResetShadow: { 6255baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 626ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 627ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 628ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SetupShadow: { 629ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float radius = getFloat(); 630ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float dx = getFloat(); 631ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float dy = getFloat(); 632ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int color = getInt(); 6335baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, 0x%x", (char*) indent, OP_NAMES[op], 634a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase radius, dx, dy, color); 635ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 636ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 6375ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy case ResetPaintFilter: { 6385ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 6395ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy } 6405ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy break; 6415ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy case SetupPaintFilter: { 6425ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy int clearBits = getInt(); 6435ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy int setBits = getInt(); 6445ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy ALOGD("%s%s 0x%x, 0x%x", (char*) indent, OP_NAMES[op], clearBits, setBits); 6455ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy } 6465ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy break; 647ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase default: 6485baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("Display List error: op not handled: %s%s", 649a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op]); 650ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 651ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 652ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 653a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase ALOGD("%sDone (%p, %s)", (char*) indent + 2, this, mName.string()); 654a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 655a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 656a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haasevoid DisplayList::updateMatrix() { 657a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (mMatrixDirty) { 658a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (!mTransformMatrix) { 659a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix = new SkMatrix(); 660a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 661a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (mMatrixFlags == 0 || mMatrixFlags == TRANSLATION) { 662a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->reset(); 663a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } else { 664a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (!mPivotExplicitlySet) { 665a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (mWidth != mPrevWidth || mHeight != mPrevHeight) { 666a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPrevWidth = mWidth; 667a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPrevHeight = mHeight; 668a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPivotX = mPrevWidth / 2; 669a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPivotY = mPrevHeight / 2; 670a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 671a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 672a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if ((mMatrixFlags & ROTATION_3D) == 0) { 673a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->setTranslate(mTranslationX, mTranslationY); 674a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->preRotate(mRotation, mPivotX, mPivotY); 675a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->preScale(mScaleX, mScaleY, mPivotX, mPivotY); 676a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } else { 677a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (!mTransformCamera) { 678a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera = new Sk3DView(); 679a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix3D = new SkMatrix(); 680a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 681a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->reset(); 682a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera->save(); 683a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->preScale(mScaleX, mScaleY, mPivotX, mPivotY); 684a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera->rotateX(mRotationX); 685a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera->rotateY(mRotationY); 686a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera->rotateZ(-mRotation); 687a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera->getMatrix(mTransformMatrix3D); 688a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix3D->preTranslate(-mPivotX, -mPivotY); 689a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix3D->postTranslate(mPivotX + mTranslationX, 690a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mPivotY + mTranslationY); 691a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformMatrix->postConcat(*mTransformMatrix3D); 692a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mTransformCamera->restore(); 693a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 694a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 695a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase mMatrixDirty = false; 696a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 697a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 698a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 699a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haasevoid DisplayList::outputViewProperties(OpenGLRenderer& renderer, char* indent) { 7001271e2cc80b01d577e9db339459ef0222bb9320dChet Haase updateMatrix(); 7011271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mLeft != 0 || mTop != 0) { 7021271e2cc80b01d577e9db339459ef0222bb9320dChet Haase ALOGD("%s%s %d, %d", indent, "Translate (left, top)", mLeft, mTop); 7031271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } 7041271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mStaticMatrix) { 7051271e2cc80b01d577e9db339459ef0222bb9320dChet Haase ALOGD("%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 7061271e2cc80b01d577e9db339459ef0222bb9320dChet Haase indent, "ConcatMatrix (static)", mStaticMatrix, 7071271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(0), mStaticMatrix->get(1), 7081271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(2), mStaticMatrix->get(3), 7091271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(4), mStaticMatrix->get(5), 7101271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(6), mStaticMatrix->get(7), 7111271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(8)); 7121271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } 7131271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mAnimationMatrix) { 7141271e2cc80b01d577e9db339459ef0222bb9320dChet Haase ALOGD("%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 7151271e2cc80b01d577e9db339459ef0222bb9320dChet Haase indent, "ConcatMatrix (animation)", mAnimationMatrix, 7161271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(0), mAnimationMatrix->get(1), 7171271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(2), mAnimationMatrix->get(3), 7181271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(4), mAnimationMatrix->get(5), 7191271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(6), mAnimationMatrix->get(7), 7201271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(8)); 7211271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } 7221271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mMatrixFlags != 0) { 7231271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mMatrixFlags == TRANSLATION) { 7241271e2cc80b01d577e9db339459ef0222bb9320dChet Haase ALOGD("%s%s %f, %f", indent, "Translate", mTranslationX, mTranslationY); 7251271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } else { 7269420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase ALOGD("%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 7271271e2cc80b01d577e9db339459ef0222bb9320dChet Haase indent, "ConcatMatrix", mTransformMatrix, 7281271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(0), mTransformMatrix->get(1), 7291271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(2), mTransformMatrix->get(3), 7301271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(4), mTransformMatrix->get(5), 7311271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(6), mTransformMatrix->get(7), 7321271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(8)); 7339d1992deaeb3d60d5928f05b649a2cc654ba98a3Chet Haase } 7341271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } 7351271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mAlpha < 1 && !mCaching) { 7361271e2cc80b01d577e9db339459ef0222bb9320dChet Haase // TODO: should be able to store the size of a DL at record time and not 7371271e2cc80b01d577e9db339459ef0222bb9320dChet Haase // have to pass it into this call. In fact, this information might be in the 7381271e2cc80b01d577e9db339459ef0222bb9320dChet Haase // location/size info that we store with the new native transform data. 7391271e2cc80b01d577e9db339459ef0222bb9320dChet Haase int flags = SkCanvas::kHasAlphaLayer_SaveFlag; 740a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase if (mClipChildren) { 7411271e2cc80b01d577e9db339459ef0222bb9320dChet Haase flags |= SkCanvas::kClipToLayer_SaveFlag; 742a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 7431271e2cc80b01d577e9db339459ef0222bb9320dChet Haase ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", indent, "SaveLayerAlpha", 7441271e2cc80b01d577e9db339459ef0222bb9320dChet Haase (float) 0, (float) 0, (float) mRight - mLeft, (float) mBottom - mTop, 7451271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mMultipliedAlpha, flags); 7461271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } 7471271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mClipChildren) { 7481271e2cc80b01d577e9db339459ef0222bb9320dChet Haase ALOGD("%s%s %.2f, %.2f, %.2f, %.2f", indent, "ClipRect", 0.0f, 0.0f, 7491271e2cc80b01d577e9db339459ef0222bb9320dChet Haase (float) mRight - mLeft, (float) mBottom - mTop); 750a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 751a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 752ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 7531271e2cc80b01d577e9db339459ef0222bb9320dChet Haasevoid DisplayList::setViewProperties(OpenGLRenderer& renderer, uint32_t level) { 754a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase#if DEBUG_DISPLAY_LIST 755a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase uint32_t count = (level + 1) * 2; 756a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase char indent[count + 1]; 757a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase for (uint32_t i = 0; i < count; i++) { 758a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase indent[i] = ' '; 759a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 760a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase indent[count] = '\0'; 761a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase#endif 7621271e2cc80b01d577e9db339459ef0222bb9320dChet Haase updateMatrix(); 7631271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mLeft != 0 || mTop != 0) { 7641271e2cc80b01d577e9db339459ef0222bb9320dChet Haase DISPLAY_LIST_LOGD("%s%s %d, %d", indent, "Translate (left, top)", mLeft, mTop); 7651271e2cc80b01d577e9db339459ef0222bb9320dChet Haase renderer.translate(mLeft, mTop); 7661271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } 7671271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mStaticMatrix) { 7681271e2cc80b01d577e9db339459ef0222bb9320dChet Haase DISPLAY_LIST_LOGD( 7691271e2cc80b01d577e9db339459ef0222bb9320dChet Haase "%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 7701271e2cc80b01d577e9db339459ef0222bb9320dChet Haase indent, "ConcatMatrix (static)", mStaticMatrix, 7711271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(0), mStaticMatrix->get(1), 7721271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(2), mStaticMatrix->get(3), 7731271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(4), mStaticMatrix->get(5), 7741271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(6), mStaticMatrix->get(7), 7751271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mStaticMatrix->get(8)); 7761271e2cc80b01d577e9db339459ef0222bb9320dChet Haase renderer.concatMatrix(mStaticMatrix); 7771271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } else if (mAnimationMatrix) { 7781271e2cc80b01d577e9db339459ef0222bb9320dChet Haase DISPLAY_LIST_LOGD( 7791271e2cc80b01d577e9db339459ef0222bb9320dChet Haase "%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 7801271e2cc80b01d577e9db339459ef0222bb9320dChet Haase indent, "ConcatMatrix (animation)", mAnimationMatrix, 7811271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(0), mAnimationMatrix->get(1), 7821271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(2), mAnimationMatrix->get(3), 7831271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(4), mAnimationMatrix->get(5), 7841271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(6), mAnimationMatrix->get(7), 7851271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mAnimationMatrix->get(8)); 7861271e2cc80b01d577e9db339459ef0222bb9320dChet Haase renderer.concatMatrix(mAnimationMatrix); 7871271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } 7881271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mMatrixFlags != 0) { 7891271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mMatrixFlags == TRANSLATION) { 7901271e2cc80b01d577e9db339459ef0222bb9320dChet Haase DISPLAY_LIST_LOGD("%s%s %f, %f", indent, "Translate", mTranslationX, mTranslationY); 7911271e2cc80b01d577e9db339459ef0222bb9320dChet Haase renderer.translate(mTranslationX, mTranslationY); 7921271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } else { 7939420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase DISPLAY_LIST_LOGD( 7949420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase "%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 7951271e2cc80b01d577e9db339459ef0222bb9320dChet Haase indent, "ConcatMatrix", mTransformMatrix, 7961271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(0), mTransformMatrix->get(1), 7971271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(2), mTransformMatrix->get(3), 7981271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(4), mTransformMatrix->get(5), 7991271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(6), mTransformMatrix->get(7), 8001271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mTransformMatrix->get(8)); 8011271e2cc80b01d577e9db339459ef0222bb9320dChet Haase renderer.concatMatrix(mTransformMatrix); 802a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 8031271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } 8041271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mAlpha < 1 && !mCaching) { 8051271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (!mHasOverlappingRendering) { 8061271e2cc80b01d577e9db339459ef0222bb9320dChet Haase DISPLAY_LIST_LOGD("%s%s %.2f", indent, "SetAlpha", mAlpha); 8071271e2cc80b01d577e9db339459ef0222bb9320dChet Haase renderer.setAlpha(mAlpha); 8081271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } else { 8091271e2cc80b01d577e9db339459ef0222bb9320dChet Haase // TODO: should be able to store the size of a DL at record time and not 8101271e2cc80b01d577e9db339459ef0222bb9320dChet Haase // have to pass it into this call. In fact, this information might be in the 8111271e2cc80b01d577e9db339459ef0222bb9320dChet Haase // location/size info that we store with the new native transform data. 8121271e2cc80b01d577e9db339459ef0222bb9320dChet Haase int flags = SkCanvas::kHasAlphaLayer_SaveFlag; 8131271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mClipChildren) { 8141271e2cc80b01d577e9db339459ef0222bb9320dChet Haase flags |= SkCanvas::kClipToLayer_SaveFlag; 8159d1992deaeb3d60d5928f05b649a2cc654ba98a3Chet Haase } 8161271e2cc80b01d577e9db339459ef0222bb9320dChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", indent, "SaveLayerAlpha", 8171271e2cc80b01d577e9db339459ef0222bb9320dChet Haase (float) 0, (float) 0, (float) mRight - mLeft, (float) mBottom - mTop, 8181271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mMultipliedAlpha, flags); 8191271e2cc80b01d577e9db339459ef0222bb9320dChet Haase renderer.saveLayerAlpha(0, 0, mRight - mLeft, mBottom - mTop, 8201271e2cc80b01d577e9db339459ef0222bb9320dChet Haase mMultipliedAlpha, flags); 8219d1992deaeb3d60d5928f05b649a2cc654ba98a3Chet Haase } 8221271e2cc80b01d577e9db339459ef0222bb9320dChet Haase } 8231271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (mClipChildren) { 8241271e2cc80b01d577e9db339459ef0222bb9320dChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f", indent, "ClipRect", 0.0f, 0.0f, 8251271e2cc80b01d577e9db339459ef0222bb9320dChet Haase (float) mRight - mLeft, (float) mBottom - mTop); 8261271e2cc80b01d577e9db339459ef0222bb9320dChet Haase renderer.clipRect(0, 0, mRight - mLeft, mBottom - mTop, 8271271e2cc80b01d577e9db339459ef0222bb9320dChet Haase SkRegion::kIntersect_Op); 828a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 829a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 830a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 831ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase/** 832ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * Changes to replay(), specifically those involving opcode or parameter changes, should be mimicked 833ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * in the output() function, since that function processes the same list of opcodes for the 834ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * purposes of logging display list info for a given view. 835ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase */ 8361271e2cc80b01d577e9db339459ef0222bb9320dChet Haasestatus_t DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flags, uint32_t level) { 837486590963e2207d68eebd6944fec70d50d41116aChet Haase status_t drawGlStatus = DrawGlInfo::kStatusDone; 838b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy TextContainer text; 839b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mReader.rewind(); 840b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 841ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#if DEBUG_DISPLAY_LIST 842ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy uint32_t count = (level + 1) * 2; 843ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy char indent[count + 1]; 844ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy for (uint32_t i = 0; i < count; i++) { 845ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy indent[i] = ' '; 846ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy } 847ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy indent[count] = '\0'; 848a23eed808a1ae4ec0d818c0a9238385e797fd056Chet Haase Rect* clipRect = renderer.getClipRect(); 849a23eed808a1ae4ec0d818c0a9238385e797fd056Chet Haase DISPLAY_LIST_LOGD("%sStart display list (%p, %s), clipRect: %.0f, %.f, %.0f, %.0f", 850a23eed808a1ae4ec0d818c0a9238385e797fd056Chet Haase (char*) indent + 2, this, mName.string(), clipRect->left, clipRect->top, 851a23eed808a1ae4ec0d818c0a9238385e797fd056Chet Haase clipRect->right, clipRect->bottom); 852ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#endif 853b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 85413631f3da855f200a151e7837ed9f6b079622b58Romain Guy renderer.startMark(mName.string()); 8551271e2cc80b01d577e9db339459ef0222bb9320dChet Haase int restoreTo = renderer.save(SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); 8561271e2cc80b01d577e9db339459ef0222bb9320dChet Haase DISPLAY_LIST_LOGD("%s%s %d %d", indent, "Save", 8571271e2cc80b01d577e9db339459ef0222bb9320dChet Haase SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag, restoreTo); 8581271e2cc80b01d577e9db339459ef0222bb9320dChet Haase setViewProperties(renderer, level); 8591271e2cc80b01d577e9db339459ef0222bb9320dChet Haase if (renderer.quickReject(0, 0, mWidth, mHeight)) { 860b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, "RestoreToCount", restoreTo); 861b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase renderer.restoreToCount(restoreTo); 862b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase renderer.endMark(); 863486590963e2207d68eebd6944fec70d50d41116aChet Haase return drawGlStatus; 864b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase } 86513631f3da855f200a151e7837ed9f6b079622b58Romain Guy 8669c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase DisplayListLogBuffer& logBuffer = DisplayListLogBuffer::getInstance(); 867ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy int saveCount = renderer.getSaveCount() - 1; 868b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy while (!mReader.eof()) { 8695b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int op = mReader.readInt(); 87033f6beb10f98e8ba96250e284876d607055d278dRomain Guy if (op & OP_MAY_BE_SKIPPED_MASK) { 871390f882f8905e8d1ac0d4b7f2e01aa04dccc3c16Romain Guy int32_t skip = mReader.readInt(); 87233f6beb10f98e8ba96250e284876d607055d278dRomain Guy if (CC_LIKELY(flags & kReplayFlag_ClipChildren)) { 87333f6beb10f98e8ba96250e284876d607055d278dRomain Guy mReader.skip(skip); 87433f6beb10f98e8ba96250e284876d607055d278dRomain Guy DISPLAY_LIST_LOGD("%s%s skipping %d bytes", (char*) indent, 87533f6beb10f98e8ba96250e284876d607055d278dRomain Guy OP_NAMES[op & ~OP_MAY_BE_SKIPPED_MASK], skip); 87633f6beb10f98e8ba96250e284876d607055d278dRomain Guy continue; 87733f6beb10f98e8ba96250e284876d607055d278dRomain Guy } else { 87833f6beb10f98e8ba96250e284876d607055d278dRomain Guy op &= ~OP_MAY_BE_SKIPPED_MASK; 87933f6beb10f98e8ba96250e284876d607055d278dRomain Guy } 88033f6beb10f98e8ba96250e284876d607055d278dRomain Guy } 8819c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase logBuffer.writeCommand(level, op); 882ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 8835b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy switch (op) { 884daf98e941e140e8739458126640183b9f296a2abChet Haase case DrawGLFunction: { 885daf98e941e140e8739458126640183b9f296a2abChet Haase Functor *functor = (Functor *) getInt(); 886daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], functor); 88713631f3da855f200a151e7837ed9f6b079622b58Romain Guy renderer.startMark("GL functor"); 8886554943a1dd6854c0f4976900956e556767b49e1Romain Guy drawGlStatus |= renderer.callDrawGLFunction(functor, dirty); 88913631f3da855f200a151e7837ed9f6b079622b58Romain Guy renderer.endMark(); 890daf98e941e140e8739458126640183b9f296a2abChet Haase } 891daf98e941e140e8739458126640183b9f296a2abChet Haase break; 892b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Save: { 89333f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t rendererNum = getInt(); 894daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, OP_NAMES[op], rendererNum); 895daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.save(rendererNum); 896b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 897b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 898b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Restore: { 899daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 900b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.restore(); 901b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 902b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 903b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case RestoreToCount: { 90433f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t restoreCount = saveCount + getInt(); 905daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, OP_NAMES[op], restoreCount); 906daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.restoreToCount(restoreCount); 907b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 908b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 909b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SaveLayer: { 910daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 911daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 912daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 913daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 9145ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 91533f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t flags = getInt(); 916daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p, 0x%x", (char*) indent, 917a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase OP_NAMES[op], f1, f2, f3, f4, paint, flags); 918daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.saveLayer(f1, f2, f3, f4, paint, flags); 919b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 920b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 9215b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy case SaveLayerAlpha: { 922daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 923daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 924daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 925daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 92633f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t alpha = getInt(); 92733f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t flags = getInt(); 928daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", (char*) indent, 929a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase OP_NAMES[op], f1, f2, f3, f4, alpha, flags); 930daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.saveLayerAlpha(f1, f2, f3, f4, alpha, flags); 9315b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy } 9325b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy break; 933b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Translate: { 934daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 935daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 936daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], f1, f2); 937daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.translate(f1, f2); 938b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 939b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 940b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Rotate: { 941daf98e941e140e8739458126640183b9f296a2abChet Haase float rotation = getFloat(); 942daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f", (char*) indent, OP_NAMES[op], rotation); 943daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.rotate(rotation); 944b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 945b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 946b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Scale: { 947daf98e941e140e8739458126640183b9f296a2abChet Haase float sx = getFloat(); 948daf98e941e140e8739458126640183b9f296a2abChet Haase float sy = getFloat(); 949daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 950daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.scale(sx, sy); 951b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 952b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 953807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy case Skew: { 954daf98e941e140e8739458126640183b9f296a2abChet Haase float sx = getFloat(); 955daf98e941e140e8739458126640183b9f296a2abChet Haase float sy = getFloat(); 956daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 957daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.skew(sx, sy); 958807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy } 959807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy break; 960b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetMatrix: { 961daf98e941e140e8739458126640183b9f296a2abChet Haase SkMatrix* matrix = getMatrix(); 962daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], matrix); 963daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setMatrix(matrix); 964b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 965b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 966b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ConcatMatrix: { 967daf98e941e140e8739458126640183b9f296a2abChet Haase SkMatrix* matrix = getMatrix(); 968a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase DISPLAY_LIST_LOGD( 969a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase "%s%s %p: [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f] [%.2f, %.2f, %.2f]", 970a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], matrix, 971a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase matrix->get(0), matrix->get(1), matrix->get(2), 972a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase matrix->get(3), matrix->get(4), matrix->get(5), 973a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase matrix->get(6), matrix->get(7), matrix->get(8)); 974daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.concatMatrix(matrix); 975b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 976b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 977b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ClipRect: { 978daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 979daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 980daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 981daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 98233f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t regionOp = getInt(); 983daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d", (char*) indent, OP_NAMES[op], 984a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase f1, f2, f3, f4, regionOp); 985daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.clipRect(f1, f2, f3, f4, (SkRegion::Op) regionOp); 986b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 987b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 9880fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy case DrawDisplayList: { 989daf98e941e140e8739458126640183b9f296a2abChet Haase DisplayList* displayList = getDisplayList(); 99033f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t flags = getInt(); 99133f6beb10f98e8ba96250e284876d607055d278dRomain Guy DISPLAY_LIST_LOGD("%s%s %p, %dx%d, 0x%x %d", (char*) indent, OP_NAMES[op], 9921271e2cc80b01d577e9db339459ef0222bb9320dChet Haase displayList, mWidth, mHeight, flags, level + 1); 9931271e2cc80b01d577e9db339459ef0222bb9320dChet Haase drawGlStatus |= renderer.drawDisplayList(displayList, dirty, flags, level + 1); 9940fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy } 9950fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy break; 9966c319ca1275c8db892c39b48fc54864c949f9171Romain Guy case DrawLayer: { 997daf98e941e140e8739458126640183b9f296a2abChet Haase Layer* layer = (Layer*) getInt(); 998daf98e941e140e8739458126640183b9f296a2abChet Haase float x = getFloat(); 999daf98e941e140e8739458126640183b9f296a2abChet Haase float y = getFloat(); 10005ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 10016f9ad204cc529babeb3aa7c9a57cf00ed7188471Chet Haase if (mCaching) { 1002a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase paint->setAlpha(mMultipliedAlpha); 1003a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase } 1004daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 1005a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase layer, x, y, paint); 1006486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawLayer(layer, x, y, paint); 10076c319ca1275c8db892c39b48fc54864c949f9171Romain Guy } 10086c319ca1275c8db892c39b48fc54864c949f9171Romain Guy break; 1009b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmap: { 1010daf98e941e140e8739458126640183b9f296a2abChet Haase SkBitmap* bitmap = getBitmap(); 1011daf98e941e140e8739458126640183b9f296a2abChet Haase float x = getFloat(); 1012daf98e941e140e8739458126640183b9f296a2abChet Haase float y = getFloat(); 10135ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 10146f9ad204cc529babeb3aa7c9a57cf00ed7188471Chet Haase if (mCaching) { 1015b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase paint->setAlpha(mMultipliedAlpha); 1016b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase } 1017daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 1018a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase bitmap, x, y, paint); 1019486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawBitmap(bitmap, x, y, paint); 1020b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1021b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1022b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmapMatrix: { 1023daf98e941e140e8739458126640183b9f296a2abChet Haase SkBitmap* bitmap = getBitmap(); 1024daf98e941e140e8739458126640183b9f296a2abChet Haase SkMatrix* matrix = getMatrix(); 10255ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1026daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %p, %p", (char*) indent, OP_NAMES[op], 1027a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase bitmap, matrix, paint); 1028486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawBitmap(bitmap, matrix, paint); 1029b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1030b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1031b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmapRect: { 1032daf98e941e140e8739458126640183b9f296a2abChet Haase SkBitmap* bitmap = getBitmap(); 1033daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 1034daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 1035daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 1036daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 1037daf98e941e140e8739458126640183b9f296a2abChet Haase float f5 = getFloat(); 1038daf98e941e140e8739458126640183b9f296a2abChet Haase float f6 = getFloat(); 1039daf98e941e140e8739458126640183b9f296a2abChet Haase float f7 = getFloat(); 1040daf98e941e140e8739458126640183b9f296a2abChet Haase float f8 = getFloat(); 10415ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1042daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 1043a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], bitmap, 1044a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase f1, f2, f3, f4, f5, f6, f7, f8,paint); 1045486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawBitmap(bitmap, f1, f2, f3, f4, f5, f6, f7, f8, paint); 1046b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1047b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1048e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy case DrawBitmapData: { 1049e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy SkBitmap* bitmap = getBitmapData(); 1050e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy float x = getFloat(); 1051e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy float y = getFloat(); 1052e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy SkPaint* paint = getPaint(renderer); 1053e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 1054e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy bitmap, x, y, paint); 1055486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawBitmap(bitmap, x, y, paint); 1056e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy } 1057e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy break; 10585a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy case DrawBitmapMesh: { 105933f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t verticesCount = 0; 10605a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t colorsCount = 0; 10615a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 10625a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy SkBitmap* bitmap = getBitmap(); 10635a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t meshWidth = getInt(); 10645a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t meshHeight = getInt(); 10655a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy float* vertices = getFloats(verticesCount); 10665a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy bool hasColors = getInt(); 106733f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t* colors = hasColors ? getInts(colorsCount) : NULL; 10685ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 10695a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 1070daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 1071486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawBitmapMesh(bitmap, meshWidth, meshHeight, vertices, 1072486590963e2207d68eebd6944fec70d50d41116aChet Haase colors, paint); 10735a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } 1074a566b7c3aada08d37cf08096c972e3e641bed773Romain Guy break; 1075b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawPatch: { 1076b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int32_t* xDivs = NULL; 1077b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int32_t* yDivs = NULL; 10784bb942083a0d4db746adf95349108dd8ef842e32Romain Guy uint32_t* colors = NULL; 1079b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy uint32_t xDivsCount = 0; 1080b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy uint32_t yDivsCount = 0; 10814bb942083a0d4db746adf95349108dd8ef842e32Romain Guy int8_t numColors = 0; 1082b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1083b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkBitmap* bitmap = getBitmap(); 1084b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1085b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy xDivs = getInts(xDivsCount); 1086b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy yDivs = getInts(yDivsCount); 10874bb942083a0d4db746adf95349108dd8ef842e32Romain Guy colors = getUInts(numColors); 1088b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 10899ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float left = getFloat(); 10909ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float top = getFloat(); 10919ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float right = getFloat(); 10929ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float bottom = getFloat(); 1093be6f9dc1e71b425b7ac1c40c0a2c72d03eb9fbeeRomain Guy 1094be6f9dc1e71b425b7ac1c40c0a2c72d03eb9fbeeRomain Guy int alpha = getInt(); 1095be6f9dc1e71b425b7ac1c40c0a2c72d03eb9fbeeRomain Guy SkXfermode::Mode mode = (SkXfermode::Mode) getInt(); 10969ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy 1097daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 1098486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawPatch(bitmap, xDivs, yDivs, colors, 1099be6f9dc1e71b425b7ac1c40c0a2c72d03eb9fbeeRomain Guy xDivsCount, yDivsCount, numColors, left, top, right, bottom, 1100be6f9dc1e71b425b7ac1c40c0a2c72d03eb9fbeeRomain Guy alpha, mode); 1101b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1102b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1103b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawColor: { 110433f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t color = getInt(); 110533f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t xferMode = getInt(); 1106daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s 0x%x %d", (char*) indent, OP_NAMES[op], color, xferMode); 1107486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawColor(color, (SkXfermode::Mode) xferMode); 1108b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1109b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1110b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawRect: { 1111daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 1112daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 1113daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 1114daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 11155ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1116daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 1117a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase f1, f2, f3, f4, paint); 1118486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawRect(f1, f2, f3, f4, paint); 1119b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1120b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 112101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy case DrawRoundRect: { 1122daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 1123daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 1124daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 1125daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 1126daf98e941e140e8739458126640183b9f296a2abChet Haase float f5 = getFloat(); 1127daf98e941e140e8739458126640183b9f296a2abChet Haase float f6 = getFloat(); 11285ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1129daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 1130a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, paint); 1131486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawRoundRect(f1, f2, f3, f4, f5, f6, paint); 113201d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy } 113301d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy break; 113401d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy case DrawCircle: { 1135daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 1136daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 1137daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 11385ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1139daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %p", 1140a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, paint); 1141486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawCircle(f1, f2, f3, paint); 114201d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy } 114301d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy break; 1144c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy case DrawOval: { 1145daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 1146daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 1147daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 1148daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 11495ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1150daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", 1151a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, paint); 1152486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawOval(f1, f2, f3, f4, paint); 1153c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy } 1154c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy break; 11558b2f5267f16c295f12faab810527cd6311997e34Romain Guy case DrawArc: { 1156daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 1157daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 1158daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 1159daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 1160daf98e941e140e8739458126640183b9f296a2abChet Haase float f5 = getFloat(); 1161daf98e941e140e8739458126640183b9f296a2abChet Haase float f6 = getFloat(); 116233f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t i1 = getInt(); 11635ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1164daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %d, %p", 1165a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, i1, paint); 1166486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawArc(f1, f2, f3, f4, f5, f6, i1 == 1, paint); 11678b2f5267f16c295f12faab810527cd6311997e34Romain Guy } 11688b2f5267f16c295f12faab810527cd6311997e34Romain Guy break; 1169b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawPath: { 1170daf98e941e140e8739458126640183b9f296a2abChet Haase SkPath* path = getPath(); 11715ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1172daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %p", (char*) indent, OP_NAMES[op], path, paint); 1173486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawPath(path, paint); 1174b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1175b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1176b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawLines: { 117733f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t count = 0; 1178b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy float* points = getFloats(count); 11795ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1180daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 1181486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawLines(points, count, paint); 1182b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1183b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1184ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy case DrawPoints: { 118533f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t count = 0; 1186ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy float* points = getFloats(count); 11875ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1188ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 1189486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawPoints(points, count, paint); 1190ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy } 1191ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy break; 1192b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawText: { 1193b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy getText(&text); 119433f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t count = getInt(); 1195daf98e941e140e8739458126640183b9f296a2abChet Haase float x = getFloat(); 1196daf98e941e140e8739458126640183b9f296a2abChet Haase float y = getFloat(); 11975ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1198cac5fd3e09e9dc918753d4aff624bf29a367ade3Romain Guy float length = getFloat(); 1199cac5fd3e09e9dc918753d4aff624bf29a367ade3Romain Guy DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %.2f, %.2f, %p, %.2f", (char*) indent, 1200cac5fd3e09e9dc918753d4aff624bf29a367ade3Romain Guy OP_NAMES[op], text.text(), text.length(), count, x, y, paint, length); 1201486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawText(text.text(), text.length(), count, x, y, 1202486590963e2207d68eebd6944fec70d50d41116aChet Haase paint, length); 1203b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1204b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1205325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy case DrawTextOnPath: { 1206325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy getText(&text); 1207325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy int32_t count = getInt(); 1208325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy SkPath* path = getPath(); 1209325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy float hOffset = getFloat(); 1210325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy float vOffset = getFloat(); 1211325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy SkPaint* paint = getPaint(renderer); 1212325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %p", (char*) indent, OP_NAMES[op], 1213325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy text.text(), text.length(), count, paint); 1214486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawTextOnPath(text.text(), text.length(), count, path, 1215325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy hOffset, vOffset, paint); 1216325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy } 1217325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy break; 1218eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy case DrawPosText: { 1219eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy getText(&text); 122033f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t count = getInt(); 122133f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t positionsCount = 0; 1222eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy float* positions = getFloats(positionsCount); 12235ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 1224eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %p", (char*) indent, 1225eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy OP_NAMES[op], text.text(), text.length(), count, paint); 1226486590963e2207d68eebd6944fec70d50d41116aChet Haase drawGlStatus |= renderer.drawPosText(text.text(), text.length(), count, 1227486590963e2207d68eebd6944fec70d50d41116aChet Haase positions, paint); 1228eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy } 1229eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy break; 1230b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetShader: { 1231daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 1232b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetShader(); 1233b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1234b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1235b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupShader: { 1236daf98e941e140e8739458126640183b9f296a2abChet Haase SkiaShader* shader = getShader(); 1237daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], shader); 1238daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setupShader(shader); 1239b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1240b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1241b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetColorFilter: { 1242daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 1243b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetColorFilter(); 1244b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1245b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1246b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupColorFilter: { 1247daf98e941e140e8739458126640183b9f296a2abChet Haase SkiaColorFilter *colorFilter = getColorFilter(); 1248daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], colorFilter); 1249daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setupColorFilter(colorFilter); 1250b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1251b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1252b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetShadow: { 1253daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 1254b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetShadow(); 1255b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1256b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 1257b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupShadow: { 1258daf98e941e140e8739458126640183b9f296a2abChet Haase float radius = getFloat(); 1259daf98e941e140e8739458126640183b9f296a2abChet Haase float dx = getFloat(); 1260daf98e941e140e8739458126640183b9f296a2abChet Haase float dy = getFloat(); 126133f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t color = getInt(); 1262daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, 0x%x", (char*) indent, OP_NAMES[op], 1263a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase radius, dx, dy, color); 1264daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setupShadow(radius, dx, dy, color); 1265daf98e941e140e8739458126640183b9f296a2abChet Haase } 1266daf98e941e140e8739458126640183b9f296a2abChet Haase break; 12675ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy case ResetPaintFilter: { 12685ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 12695ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy renderer.resetPaintFilter(); 12705ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy } 12715ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy break; 12725ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy case SetupPaintFilter: { 127333f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t clearBits = getInt(); 127433f6beb10f98e8ba96250e284876d607055d278dRomain Guy int32_t setBits = getInt(); 12755ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy DISPLAY_LIST_LOGD("%s%s 0x%x, 0x%x", (char*) indent, OP_NAMES[op], 12765ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy clearBits, setBits); 12775ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy renderer.setupPaintFilter(clearBits, setBits); 12785ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy } 12795ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy break; 1280daf98e941e140e8739458126640183b9f296a2abChet Haase default: 1281daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("Display List error: op not handled: %s%s", 1282a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase (char*) indent, OP_NAMES[op]); 1283daf98e941e140e8739458126640183b9f296a2abChet Haase break; 1284b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1285b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 1286ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 12871271e2cc80b01d577e9db339459ef0222bb9320dChet Haase DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, "RestoreToCount", restoreTo); 12881271e2cc80b01d577e9db339459ef0222bb9320dChet Haase renderer.restoreToCount(restoreTo); 128913631f3da855f200a151e7837ed9f6b079622b58Romain Guy renderer.endMark(); 129013631f3da855f200a151e7837ed9f6b079622b58Romain Guy 1291a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase DISPLAY_LIST_LOGD("%sDone (%p, %s), returning %d", (char*) indent + 2, this, mName.string(), 12926554943a1dd6854c0f4976900956e556767b49e1Romain Guy drawGlStatus); 12936554943a1dd6854c0f4976900956e556767b49e1Romain Guy return drawGlStatus; 1294b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 1295b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1296b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/////////////////////////////////////////////////////////////////////////////// 12974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Base structure 12984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 12994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1300a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet HaaseDisplayListRenderer::DisplayListRenderer() : mWriter(MIN_WRITER_SIZE), 130133f6beb10f98e8ba96250e284876d607055d278dRomain Guy mTranslateX(0.0f), mTranslateY(0.0f), mHasTranslate(false), mHasDrawOps(false) { 13024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 13034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 13044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain GuyDisplayListRenderer::~DisplayListRenderer() { 13054aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy reset(); 13064aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 13074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 13084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::reset() { 13094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.reset(); 13105c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 13115c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Caches& caches = Caches::getInstance(); 13125c13d89c1332fcc499379b9064b891187b75ca32Chet Haase for (size_t i = 0; i < mBitmapResources.size(); i++) { 1313d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.decrementRefcount(mBitmapResources.itemAt(i)); 13145c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 13155c13d89c1332fcc499379b9064b891187b75ca32Chet Haase mBitmapResources.clear(); 1316d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 131749c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy for (size_t i = 0; i < mOwnedBitmapResources.size(); i++) { 131849c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy SkBitmap* bitmap = mOwnedBitmapResources.itemAt(i); 131949c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy caches.resourceCache.decrementRefcount(bitmap); 132049c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy } 132149c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy mOwnedBitmapResources.clear(); 132249c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy 1323d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy for (size_t i = 0; i < mFilterResources.size(); i++) { 1324d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.decrementRefcount(mFilterResources.itemAt(i)); 1325d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy } 1326d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy mFilterResources.clear(); 1327d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 132843ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy for (size_t i = 0; i < mShaders.size(); i++) { 1329d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.decrementRefcount(mShaders.itemAt(i)); 133043ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy } 133124c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaders.clear(); 133224c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaderMap.clear(); 133343ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy 1334d34dd71800d9a1077e58c3b7f2511c46848da417Chet Haase for (size_t i = 0; i < mSourcePaths.size(); i++) { 1335d34dd71800d9a1077e58c3b7f2511c46848da417Chet Haase caches.resourceCache.decrementRefcount(mSourcePaths.itemAt(i)); 1336d34dd71800d9a1077e58c3b7f2511c46848da417Chet Haase } 1337d34dd71800d9a1077e58c3b7f2511c46848da417Chet Haase mSourcePaths.clear(); 1338d34dd71800d9a1077e58c3b7f2511c46848da417Chet Haase 133943ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy mPaints.clear(); 134043ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy mPaintMap.clear(); 1341d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 13422fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPaths.clear(); 13432fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPathMap.clear(); 1344d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 1345d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mMatrices.clear(); 134604c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy 134704c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy mHasDrawOps = false; 13484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 13494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 13504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 13514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Operations 13524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 13534aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1354162a0217563f4665da6eb183dfce0fef740f641fJeff BrownDisplayList* DisplayListRenderer::getDisplayList(DisplayList* displayList) { 1355162a0217563f4665da6eb183dfce0fef740f641fJeff Brown if (!displayList) { 1356162a0217563f4665da6eb183dfce0fef740f641fJeff Brown displayList = new DisplayList(*this); 13575977baa1fa24125c148a72699b53e62abaf08960Chet Haase } else { 1358162a0217563f4665da6eb183dfce0fef740f641fJeff Brown displayList->initFromDisplayListRenderer(*this, true); 13595977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 136004c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy displayList->setRenderable(mHasDrawOps); 1361162a0217563f4665da6eb183dfce0fef740f641fJeff Brown return displayList; 13625977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 13635977baa1fa24125c148a72699b53e62abaf08960Chet Haase 136449c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guybool DisplayListRenderer::isDeferred() { 136549c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy return true; 136649c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy} 136749c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy 1368b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyvoid DisplayListRenderer::setViewport(int width, int height) { 1369b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mOrthoMatrix.loadOrtho(0, width, height, 0, -1, 1); 1370b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1371b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mWidth = width; 1372b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mHeight = height; 1373b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 1374b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 137544b2fe3fc114ee5f7273c6b0fee2cc999bf244a2Chet Haaseint DisplayListRenderer::prepareDirty(float left, float top, 13767d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy float right, float bottom, bool opaque) { 1377b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSnapshot = new Snapshot(mFirstSnapshot, 1378b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); 1379b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSaveCount = 1; 1380b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSnapshot->setClip(0.0f, 0.0f, mWidth, mHeight); 138127454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mRestoreSaveCount = -1; 138244b2fe3fc114ee5f7273c6b0fee2cc999bf244a2Chet Haase return DrawGlInfo::kStatusDone; // No invalidate needed at record-time 138327454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy} 138427454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy 138527454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guyvoid DisplayListRenderer::finish() { 138627454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy insertRestoreToCount(); 138733f6beb10f98e8ba96250e284876d607055d278dRomain Guy insertTranlate(); 1388b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 1389b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1390daf98e941e140e8739458126640183b9f296a2abChet Haasevoid DisplayListRenderer::interrupt() { 1391daf98e941e140e8739458126640183b9f296a2abChet Haase} 1392daf98e941e140e8739458126640183b9f296a2abChet Haase 13932b1847ea60650a9f68372abe860415f18b55081dRomain Guyvoid DisplayListRenderer::resume() { 13944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 13954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 13966554943a1dd6854c0f4976900956e556767b49e1Romain Guystatus_t DisplayListRenderer::callDrawGLFunction(Functor *functor, Rect& dirty) { 1397cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy // Ignore dirty during recording, it matters only when we replay 1398daf98e941e140e8739458126640183b9f296a2abChet Haase addOp(DisplayList::DrawGLFunction); 1399daf98e941e140e8739458126640183b9f296a2abChet Haase addInt((int) functor); 14006554943a1dd6854c0f4976900956e556767b49e1Romain Guy return DrawGlInfo::kStatusDone; // No invalidate needed at record-time 1401daf98e941e140e8739458126640183b9f296a2abChet Haase} 1402daf98e941e140e8739458126640183b9f296a2abChet Haase 14034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::save(int flags) { 1404b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Save); 14054aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(flags); 14064aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return OpenGLRenderer::save(flags); 14074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restore() { 141004c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy if (mRestoreSaveCount < 0) { 141133f6beb10f98e8ba96250e284876d607055d278dRomain Guy restoreToCount(getSaveCount() - 1); 141233f6beb10f98e8ba96250e284876d607055d278dRomain Guy return; 141304c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy } 141433f6beb10f98e8ba96250e284876d607055d278dRomain Guy 141533f6beb10f98e8ba96250e284876d607055d278dRomain Guy mRestoreSaveCount--; 141633f6beb10f98e8ba96250e284876d607055d278dRomain Guy insertTranlate(); 14174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::restore(); 14184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restoreToCount(int saveCount) { 142127454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mRestoreSaveCount = saveCount; 142233f6beb10f98e8ba96250e284876d607055d278dRomain Guy insertTranlate(); 14234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::restoreToCount(saveCount); 14244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::saveLayer(float left, float top, float right, float bottom, 14275c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* p, int flags) { 1428b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SaveLayer); 14294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 14304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(p); 14314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(flags); 1432b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return OpenGLRenderer::save(flags); 14334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14355b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guyint DisplayListRenderer::saveLayerAlpha(float left, float top, float right, float bottom, 14365b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int alpha, int flags) { 14375b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addOp(DisplayList::SaveLayerAlpha); 14385b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addBounds(left, top, right, bottom); 14395b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addInt(alpha); 14405b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addInt(flags); 14415b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy return OpenGLRenderer::save(flags); 14425b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy} 14435b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy 14444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::translate(float dx, float dy) { 144533f6beb10f98e8ba96250e284876d607055d278dRomain Guy mHasTranslate = true; 144633f6beb10f98e8ba96250e284876d607055d278dRomain Guy mTranslateX += dx; 144733f6beb10f98e8ba96250e284876d607055d278dRomain Guy mTranslateY += dy; 144833f6beb10f98e8ba96250e284876d607055d278dRomain Guy insertRestoreToCount(); 14494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::translate(dx, dy); 14504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::rotate(float degrees) { 1453b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Rotate); 14544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloat(degrees); 14554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::rotate(degrees); 14564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14574aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::scale(float sx, float sy) { 1459b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Scale); 14604aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(sx, sy); 14614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::scale(sx, sy); 14624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1464807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guyvoid DisplayListRenderer::skew(float sx, float sy) { 1465807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy addOp(DisplayList::Skew); 1466807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy addPoint(sx, sy); 1467807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy OpenGLRenderer::skew(sx, sy); 1468807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy} 1469807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy 14704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setMatrix(SkMatrix* matrix) { 1471b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SetMatrix); 14724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 14734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::setMatrix(matrix); 14744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::concatMatrix(SkMatrix* matrix) { 1477b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ConcatMatrix); 14784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 14794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::concatMatrix(matrix); 14804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guybool DisplayListRenderer::clipRect(float left, float top, float right, float bottom, 14834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkRegion::Op op) { 1484b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ClipRect); 14854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 14864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(op); 14874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return OpenGLRenderer::clipRect(left, top, right, bottom, op); 14884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 14894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 14906554943a1dd6854c0f4976900956e556767b49e1Romain Guystatus_t DisplayListRenderer::drawDisplayList(DisplayList* displayList, 14911271e2cc80b01d577e9db339459ef0222bb9320dChet Haase Rect& dirty, int32_t flags, uint32_t level) { 1492cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy // dirty is an out parameter and should not be recorded, 1493cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy // it matters only when replaying the display list 1494b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase 1495b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase addOp(DisplayList::DrawDisplayList); 14960fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addDisplayList(displayList); 149733f6beb10f98e8ba96250e284876d607055d278dRomain Guy addInt(flags); 14986554943a1dd6854c0f4976900956e556767b49e1Romain Guy return DrawGlInfo::kStatusDone; 14990fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy} 15000fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy 1501486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* paint) { 15026c319ca1275c8db892c39b48fc54864c949f9171Romain Guy addOp(DisplayList::DrawLayer); 1503ada830f639591b99c3e40de22b07296c7932a33fRomain Guy addInt((int) layer); 1504ada830f639591b99c3e40de22b07296c7932a33fRomain Guy addPoint(x, y); 15056c319ca1275c8db892c39b48fc54864c949f9171Romain Guy addPaint(paint); 1506486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 15076c319ca1275c8db892c39b48fc54864c949f9171Romain Guy} 15086c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 1509486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float left, float top, SkPaint* paint) { 151033f6beb10f98e8ba96250e284876d607055d278dRomain Guy const bool reject = quickReject(left, top, left + bitmap->width(), top + bitmap->height()); 151133f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawBitmap, reject); 15124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 15134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(left, top); 15144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 151533f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 1516486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 15174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 15184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1519486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, SkPaint* paint) { 152033f6beb10f98e8ba96250e284876d607055d278dRomain Guy Rect r(0.0f, 0.0f, bitmap->width(), bitmap->height()); 152133f6beb10f98e8ba96250e284876d607055d278dRomain Guy const mat4 transform(*matrix); 152233f6beb10f98e8ba96250e284876d607055d278dRomain Guy transform.mapRect(r); 152333f6beb10f98e8ba96250e284876d607055d278dRomain Guy 152433f6beb10f98e8ba96250e284876d607055d278dRomain Guy const bool reject = quickReject(r.left, r.top, r.right, r.bottom); 152533f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawBitmapMatrix, reject); 15264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 15274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 15284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 152933f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 1530486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 15314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 15324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1533486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop, 15344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float srcRight, float srcBottom, float dstLeft, float dstTop, 15355c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float dstRight, float dstBottom, SkPaint* paint) { 153633f6beb10f98e8ba96250e284876d607055d278dRomain Guy const bool reject = quickReject(dstLeft, dstTop, dstRight, dstBottom); 153733f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawBitmapRect, reject); 15384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 15394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(srcLeft, srcTop, srcRight, srcBottom); 15404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(dstLeft, dstTop, dstRight, dstBottom); 15414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 154233f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 1543486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 15444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 15454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1546486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawBitmapData(SkBitmap* bitmap, float left, float top, 1547486590963e2207d68eebd6944fec70d50d41116aChet Haase SkPaint* paint) { 1548e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy const bool reject = quickReject(left, top, left + bitmap->width(), bitmap->height()); 1549e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy uint32_t* location = addOp(DisplayList::DrawBitmapData, reject); 1550e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy addBitmapData(bitmap); 1551e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy addPoint(left, top); 1552e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy addPaint(paint); 1553e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy addSkip(location); 1554486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 1555e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy} 1556e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy 1557486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight, 15585a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy float* vertices, int* colors, SkPaint* paint) { 15595a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addOp(DisplayList::DrawBitmapMesh); 15605a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addBitmap(bitmap); 15615a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(meshWidth); 15625a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(meshHeight); 15635a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addFloats(vertices, (meshWidth + 1) * (meshHeight + 1) * 2); 15645a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy if (colors) { 15655a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(1); 15665a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInts(colors, (meshWidth + 1) * (meshHeight + 1)); 15675a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } else { 15685a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(0); 15695a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } 15705a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addPaint(paint); 1571486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 15725a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy} 15735a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 1574486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawPatch(SkBitmap* bitmap, const int32_t* xDivs, 1575486590963e2207d68eebd6944fec70d50d41116aChet Haase const int32_t* yDivs, const uint32_t* colors, uint32_t width, uint32_t height, 1576486590963e2207d68eebd6944fec70d50d41116aChet Haase int8_t numColors, float left, float top, float right, float bottom, SkPaint* paint) { 1577be6f9dc1e71b425b7ac1c40c0a2c72d03eb9fbeeRomain Guy int alpha; 1578be6f9dc1e71b425b7ac1c40c0a2c72d03eb9fbeeRomain Guy SkXfermode::Mode mode; 1579be6f9dc1e71b425b7ac1c40c0a2c72d03eb9fbeeRomain Guy OpenGLRenderer::getAlphaAndModeDirect(paint, &alpha, &mode); 1580be6f9dc1e71b425b7ac1c40c0a2c72d03eb9fbeeRomain Guy 158133f6beb10f98e8ba96250e284876d607055d278dRomain Guy const bool reject = quickReject(left, top, right, bottom); 158233f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawPatch, reject); 15834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 15844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInts(xDivs, width); 15854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInts(yDivs, height); 15864bb942083a0d4db746adf95349108dd8ef842e32Romain Guy addUInts(colors, numColors); 15874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 1588be6f9dc1e71b425b7ac1c40c0a2c72d03eb9fbeeRomain Guy addInt(alpha); 1589be6f9dc1e71b425b7ac1c40c0a2c72d03eb9fbeeRomain Guy addInt(mode); 159033f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 1591486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 15924aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 15934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1594486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawColor(int color, SkXfermode::Mode mode) { 1595b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawColor); 15964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(color); 15974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(mode); 1598486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 15994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 16004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1601486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawRect(float left, float top, float right, float bottom, 16025c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 160333f6beb10f98e8ba96250e284876d607055d278dRomain Guy const bool reject = paint->getStyle() == SkPaint::kFill_Style && 160433f6beb10f98e8ba96250e284876d607055d278dRomain Guy quickReject(left, top, right, bottom); 160533f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawRect, reject); 16064aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 16074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 160833f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 1609486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 16104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 16114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1612486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawRoundRect(float left, float top, float right, float bottom, 1613a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase float rx, float ry, SkPaint* paint) { 161433f6beb10f98e8ba96250e284876d607055d278dRomain Guy const bool reject = paint->getStyle() == SkPaint::kFill_Style && 161533f6beb10f98e8ba96250e284876d607055d278dRomain Guy quickReject(left, top, right, bottom); 161633f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawRoundRect, reject); 161701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addBounds(left, top, right, bottom); 161801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPoint(rx, ry); 161901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPaint(paint); 162033f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 1621486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 162201d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy} 162301d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy 1624486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawCircle(float x, float y, float radius, SkPaint* paint) { 162501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addOp(DisplayList::DrawCircle); 162601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPoint(x, y); 162701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addFloat(radius); 162801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPaint(paint); 1629486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 163001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy} 163101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy 1632486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawOval(float left, float top, float right, float bottom, 1633c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy SkPaint* paint) { 1634c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addOp(DisplayList::DrawOval); 1635c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addBounds(left, top, right, bottom); 1636c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addPaint(paint); 1637486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 1638c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy} 1639c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy 1640486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawArc(float left, float top, float right, float bottom, 16418b2f5267f16c295f12faab810527cd6311997e34Romain Guy float startAngle, float sweepAngle, bool useCenter, SkPaint* paint) { 164282d41a515368236e56454bd84023bebd6306f6b7Romain Guy addOp(DisplayList::DrawArc); 16438b2f5267f16c295f12faab810527cd6311997e34Romain Guy addBounds(left, top, right, bottom); 16448b2f5267f16c295f12faab810527cd6311997e34Romain Guy addPoint(startAngle, sweepAngle); 16458b2f5267f16c295f12faab810527cd6311997e34Romain Guy addInt(useCenter ? 1 : 0); 16468b2f5267f16c295f12faab810527cd6311997e34Romain Guy addPaint(paint); 1647486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 16488b2f5267f16c295f12faab810527cd6311997e34Romain Guy} 16498b2f5267f16c295f12faab810527cd6311997e34Romain Guy 1650486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawPath(SkPath* path, SkPaint* paint) { 165133f6beb10f98e8ba96250e284876d607055d278dRomain Guy float left, top, offset; 165233f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t width, height; 165333f6beb10f98e8ba96250e284876d607055d278dRomain Guy computePathBounds(path, paint, left, top, offset, width, height); 165433f6beb10f98e8ba96250e284876d607055d278dRomain Guy 165533f6beb10f98e8ba96250e284876d607055d278dRomain Guy const bool reject = quickReject(left - offset, top - offset, width, height); 165633f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawPath, reject); 16574aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPath(path); 16584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 165933f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 1660486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 16614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 16624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1663486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawLines(float* points, int count, SkPaint* paint) { 1664b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawLines); 16654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloats(points, count); 16664aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 1667486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 1668ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy} 1669ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy 1670486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawPoints(float* points, int count, SkPaint* paint) { 1671ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy addOp(DisplayList::DrawPoints); 1672ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy addFloats(points, count); 1673ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy addPaint(paint); 1674486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 16754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 16764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1677486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawText(const char* text, int bytesCount, int count, 1678cac5fd3e09e9dc918753d4aff624bf29a367ade3Romain Guy float x, float y, SkPaint* paint, float length) { 1679486590963e2207d68eebd6944fec70d50d41116aChet Haase if (!text || count <= 0) return DrawGlInfo::kStatusDone; 168033f6beb10f98e8ba96250e284876d607055d278dRomain Guy 16818f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // TODO: We should probably make a copy of the paint instead of modifying 16828f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // it; modifying the paint will change its generationID the first 16838f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // time, which might impact caches. More investigation needed to 16848f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // see if it matters. 16858f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // If we make a copy, then drawTextDecorations() should *not* make 16868f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // its own copy as it does right now. 1687c511bee87cda99a252d1a62487f47c8f05aee78cFabrice Di Meglio // Beware: this needs Glyph encoding (already done on the Paint constructor) 16888f9a9f61ab793d9387a5942b307e74324704893bRomain Guy paint->setAntiAlias(true); 168933f6beb10f98e8ba96250e284876d607055d278dRomain Guy if (length < 0.0f) length = paint->measureText(text, bytesCount); 169033f6beb10f98e8ba96250e284876d607055d278dRomain Guy 169133f6beb10f98e8ba96250e284876d607055d278dRomain Guy bool reject = false; 169233f6beb10f98e8ba96250e284876d607055d278dRomain Guy if (CC_LIKELY(paint->getTextAlign() == SkPaint::kLeft_Align)) { 169333f6beb10f98e8ba96250e284876d607055d278dRomain Guy SkPaint::FontMetrics metrics; 169433f6beb10f98e8ba96250e284876d607055d278dRomain Guy paint->getFontMetrics(&metrics, 0.0f); 169533f6beb10f98e8ba96250e284876d607055d278dRomain Guy reject = quickReject(x, y + metrics.fTop, x + length, y + metrics.fBottom); 169633f6beb10f98e8ba96250e284876d607055d278dRomain Guy } 169733f6beb10f98e8ba96250e284876d607055d278dRomain Guy 169833f6beb10f98e8ba96250e284876d607055d278dRomain Guy uint32_t* location = addOp(DisplayList::DrawText, reject); 169933f6beb10f98e8ba96250e284876d607055d278dRomain Guy addText(text, bytesCount); 170033f6beb10f98e8ba96250e284876d607055d278dRomain Guy addInt(count); 170133f6beb10f98e8ba96250e284876d607055d278dRomain Guy addPoint(x, y); 17024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 170333f6beb10f98e8ba96250e284876d607055d278dRomain Guy addFloat(length); 170433f6beb10f98e8ba96250e284876d607055d278dRomain Guy addSkip(location); 1705486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 17064aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 17074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1708486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawTextOnPath(const char* text, int bytesCount, int count, 1709325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy SkPath* path, float hOffset, float vOffset, SkPaint* paint) { 1710486590963e2207d68eebd6944fec70d50d41116aChet Haase if (!text || count <= 0) return DrawGlInfo::kStatusDone; 1711325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy addOp(DisplayList::DrawTextOnPath); 1712325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy addText(text, bytesCount); 1713325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy addInt(count); 1714325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy addPath(path); 1715325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy addFloat(hOffset); 1716325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy addFloat(vOffset); 1717325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy paint->setAntiAlias(true); 1718325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy addPaint(paint); 1719486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 1720325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy} 1721325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy 1722486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawPosText(const char* text, int bytesCount, int count, 1723eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy const float* positions, SkPaint* paint) { 1724486590963e2207d68eebd6944fec70d50d41116aChet Haase if (!text || count <= 0) return DrawGlInfo::kStatusDone; 1725eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy addOp(DisplayList::DrawPosText); 1726eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy addText(text, bytesCount); 1727eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy addInt(count); 1728eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy addFloats(positions, count * 2); 1729eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy paint->setAntiAlias(true); 1730eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy addPaint(paint); 1731486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 1732eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy} 1733eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy 17344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShader() { 1735b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetShader); 17364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 17374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 17384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShader(SkiaShader* shader) { 17395c13d89c1332fcc499379b9064b891187b75ca32Chet Haase addOp(DisplayList::SetupShader); 17405c13d89c1332fcc499379b9064b891187b75ca32Chet Haase addShader(shader); 17414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 17424aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 17434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetColorFilter() { 1744b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetColorFilter); 17454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 17464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 17474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupColorFilter(SkiaColorFilter* filter) { 1748ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase addOp(DisplayList::SetupColorFilter); 1749ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase addColorFilter(filter); 17504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 17514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 17524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShadow() { 1753b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetShadow); 17544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 17554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 17564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShadow(float radius, float dx, float dy, int color) { 1757b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SetupShadow); 17584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloat(radius); 17594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(dx, dy); 17604aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(color); 17614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 17624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 17635ff9df658230d49e42c43586997a02d8e4dd417eRomain Guyvoid DisplayListRenderer::resetPaintFilter() { 17645ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy addOp(DisplayList::ResetPaintFilter); 17655ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy} 17665ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy 17675ff9df658230d49e42c43586997a02d8e4dd417eRomain Guyvoid DisplayListRenderer::setupPaintFilter(int clearBits, int setBits) { 17685ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy addOp(DisplayList::SetupPaintFilter); 17695ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy addInt(clearBits); 17705ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy addInt(setBits); 17715ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy} 17725ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy 17734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace uirenderer 17744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace android 1775