DisplayListRenderer.cpp revision 5ff9df658230d49e42c43586997a02d8e4dd417e
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 199c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase 209c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase#include "DisplayListLogBuffer.h" 214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include "DisplayListRenderer.h" 229c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase#include <utils/String8.h> 239c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase#include "Caches.h" 244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guynamespace android { 264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guynamespace uirenderer { 274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 289c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase 294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 30b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy// Display list 31b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/////////////////////////////////////////////////////////////////////////////// 32b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 33ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guyconst char* DisplayList::OP_NAMES[] = { 34ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Save", 35ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Restore", 36ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "RestoreToCount", 37ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SaveLayer", 38ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SaveLayerAlpha", 39ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Translate", 40ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Rotate", 41ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Scale", 424cf6e2f34994f160e1baba205a43c12784dd3e0dRomain Guy "Skew", 43ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetMatrix", 44ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ConcatMatrix", 45ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ClipRect", 46ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawDisplayList", 47ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawLayer", 48ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawBitmap", 49ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawBitmapMatrix", 50ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawBitmapRect", 515a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy "DrawBitmapMesh", 52ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawPatch", 53ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawColor", 54ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawRect", 5501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy "DrawRoundRect", 5601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy "DrawCircle", 57c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy "DrawOval", 588b2f5267f16c295f12faab810527cd6311997e34Romain Guy "DrawArc", 59ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawPath", 60ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawLines", 61ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy "DrawPoints", 62ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawText", 63eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy "DrawPosText", 64ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ResetShader", 65ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetupShader", 66ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ResetColorFilter", 67ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetupColorFilter", 68ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ResetShadow", 69daf98e941e140e8739458126640183b9f296a2abChet Haase "SetupShadow", 705ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy "ResetPaintFilter", 715ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy "SetupPaintFilter", 72daf98e941e140e8739458126640183b9f296a2abChet Haase "DrawGLFunction" 73ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy}; 74ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 759c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haasevoid DisplayList::outputLogBuffer(int fd) { 769c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase DisplayListLogBuffer& logBuffer = DisplayListLogBuffer::getInstance(); 779c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase if (logBuffer.isEmpty()) { 789c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase return; 799c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase } 8065b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy 819c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase FILE *file = fdopen(fd, "a"); 8265b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy 839c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase fprintf(file, "\nRecent DisplayList operations\n"); 849c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase logBuffer.outputCommands(file, OP_NAMES); 8565b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy 8665b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy String8 cachesLog; 8765b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy Caches::getInstance().dumpMemoryUsage(cachesLog); 8865b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy fprintf(file, "\nCaches:\n%s", cachesLog.string()); 8965b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy fprintf(file, "\n"); 9065b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy 919c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase fflush(file); 929c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase} 939c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase 94b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain GuyDisplayList::DisplayList(const DisplayListRenderer& recorder) { 955977baa1fa24125c148a72699b53e62abaf08960Chet Haase initFromDisplayListRenderer(recorder); 965977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 975977baa1fa24125c148a72699b53e62abaf08960Chet Haase 985977baa1fa24125c148a72699b53e62abaf08960Chet HaaseDisplayList::~DisplayList() { 99d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase clearResources(); 100d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase} 101d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase 102d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haasevoid DisplayList::clearResources() { 1035977baa1fa24125c148a72699b53e62abaf08960Chet Haase sk_free((void*) mReader.base()); 1045977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1055977baa1fa24125c148a72699b53e62abaf08960Chet Haase Caches& caches = Caches::getInstance(); 1065977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1075977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mBitmapResources.size(); i++) { 1085977baa1fa24125c148a72699b53e62abaf08960Chet Haase caches.resourceCache.decrementRefcount(mBitmapResources.itemAt(i)); 1095977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1105977baa1fa24125c148a72699b53e62abaf08960Chet Haase mBitmapResources.clear(); 1115977baa1fa24125c148a72699b53e62abaf08960Chet Haase 112d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy for (size_t i = 0; i < mFilterResources.size(); i++) { 113d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.decrementRefcount(mFilterResources.itemAt(i)); 114d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy } 115d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy mFilterResources.clear(); 116d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 11724c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy for (size_t i = 0; i < mShaders.size(); i++) { 11843ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy caches.resourceCache.decrementRefcount(mShaders.itemAt(i)); 119d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.destructor(mShaders.itemAt(i)); 1205977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 12124c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaders.clear(); 1225977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1235977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mPaints.size(); i++) { 1245977baa1fa24125c148a72699b53e62abaf08960Chet Haase delete mPaints.itemAt(i); 1255977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1265977baa1fa24125c148a72699b53e62abaf08960Chet Haase mPaints.clear(); 1275977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1282fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy for (size_t i = 0; i < mPaths.size(); i++) { 1291af23a32d879db330eb5a08b21090ec60b604a32Romain Guy SkPath* path = mPaths.itemAt(i); 1301af23a32d879db330eb5a08b21090ec60b604a32Romain Guy caches.pathCache.remove(path); 1311af23a32d879db330eb5a08b21090ec60b604a32Romain Guy delete path; 1322fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy } 1332fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPaths.clear(); 1342fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy 1355977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mMatrices.size(); i++) { 1365977baa1fa24125c148a72699b53e62abaf08960Chet Haase delete mMatrices.itemAt(i); 1375977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1385977baa1fa24125c148a72699b53e62abaf08960Chet Haase mMatrices.clear(); 1395977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 1405977baa1fa24125c148a72699b53e62abaf08960Chet Haase 141d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haasevoid DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorder, bool reusing) { 142b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy const SkWriter32& writer = recorder.writeStream(); 143b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy init(); 144b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 145b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy if (writer.size() == 0) { 146b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return; 147b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 148b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 149d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase if (reusing) { 150d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase // re-using display list - clear out previous allocations 151d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase clearResources(); 152d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase } 153d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase 15465b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy mSize = writer.size(); 15565b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy void* buffer = sk_malloc_throw(mSize); 156b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy writer.flatten(buffer); 15765b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy mReader.setMemory(buffer, mSize); 158b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1595c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Caches& caches = Caches::getInstance(); 160b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1615c13d89c1332fcc499379b9064b891187b75ca32Chet Haase const Vector<SkBitmap*> &bitmapResources = recorder.getBitmapResources(); 1625c13d89c1332fcc499379b9064b891187b75ca32Chet Haase for (size_t i = 0; i < bitmapResources.size(); i++) { 1635c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkBitmap* resource = bitmapResources.itemAt(i); 1645c13d89c1332fcc499379b9064b891187b75ca32Chet Haase mBitmapResources.add(resource); 1655c13d89c1332fcc499379b9064b891187b75ca32Chet Haase caches.resourceCache.incrementRefcount(resource); 166b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 167d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 168d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy const Vector<SkiaColorFilter*> &filterResources = recorder.getFilterResources(); 169d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy for (size_t i = 0; i < filterResources.size(); i++) { 170d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy SkiaColorFilter* resource = filterResources.itemAt(i); 171d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy mFilterResources.add(resource); 172d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.incrementRefcount(resource); 173d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy } 174d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 17524c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy const Vector<SkiaShader*> &shaders = recorder.getShaders(); 17624c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy for (size_t i = 0; i < shaders.size(); i++) { 177d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy SkiaShader* resource = shaders.itemAt(i); 178d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy mShaders.add(resource); 179d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.incrementRefcount(resource); 180b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 181b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 182d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase const Vector<SkPaint*> &paints = recorder.getPaints(); 183d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase for (size_t i = 0; i < paints.size(); i++) { 184d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mPaints.add(paints.itemAt(i)); 185d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase } 186d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 1872fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy const Vector<SkPath*> &paths = recorder.getPaths(); 1882fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy for (size_t i = 0; i < paths.size(); i++) { 1892fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPaths.add(paths.itemAt(i)); 1902fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy } 1912fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy 192d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase const Vector<SkMatrix*> &matrices = recorder.getMatrices(); 193d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase for (size_t i = 0; i < matrices.size(); i++) { 194d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mMatrices.add(matrices.itemAt(i)); 195d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase } 196b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 197b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 198b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyvoid DisplayList::init() { 19965b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy mSize = 0; 20004c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy mIsRenderable = true; 20165b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy} 20265b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy 20365b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guysize_t DisplayList::getSize() { 20465b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy return mSize; 205b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 206b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 207ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase/** 208ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * This function is a simplified version of replay(), where we simply retrieve and log the 209ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * display list. This function should remain in sync with the replay() function. 210ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase */ 211ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haasevoid DisplayList::output(OpenGLRenderer& renderer, uint32_t level) { 212ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase TextContainer text; 213ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 214ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t count = (level + 1) * 2; 215ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase char indent[count + 1]; 216ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase for (uint32_t i = 0; i < count; i++) { 217ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase indent[i] = ' '; 218ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 219ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase indent[count] = '\0'; 2205baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%sStart display list (%p)", (char*) indent + 2, this); 221ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 222ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int saveCount = renderer.getSaveCount() - 1; 223ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 224ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase mReader.rewind(); 225ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 226ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase while (!mReader.eof()) { 227ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int op = mReader.readInt(); 228ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 229ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase switch (op) { 230ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawGLFunction: { 231ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase Functor *functor = (Functor *) getInt(); 2325baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p", (char*) indent, OP_NAMES[op], functor); 233ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 234ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 235ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Save: { 236ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int rendererNum = getInt(); 2375baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %d", (char*) indent, OP_NAMES[op], rendererNum); 238ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 239ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 240ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Restore: { 2415baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 242ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 243ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 244ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case RestoreToCount: { 245ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int restoreCount = saveCount + getInt(); 2465baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %d", (char*) indent, OP_NAMES[op], restoreCount); 247ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 248ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 249ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SaveLayer: { 250ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 251ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 252ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 253ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 2545ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 255ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int flags = getInt(); 2565baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p, 0x%x", (char*) indent, 257ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase OP_NAMES[op], f1, f2, f3, f4, paint, flags); 258ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 259ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 260ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SaveLayerAlpha: { 261ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 262ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 263ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 264ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 265ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int alpha = getInt(); 266ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int flags = getInt(); 2675baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", (char*) indent, 268ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase OP_NAMES[op], f1, f2, f3, f4, alpha, flags); 269ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 270ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 271ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Translate: { 272ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 273ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 2745baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], f1, f2); 275ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 276ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 277ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Rotate: { 278ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float rotation = getFloat(); 2795baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f", (char*) indent, OP_NAMES[op], rotation); 280ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 281ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 282ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Scale: { 283ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float sx = getFloat(); 284ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float sy = getFloat(); 2855baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 286ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 287ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 288ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Skew: { 289ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float sx = getFloat(); 290ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float sy = getFloat(); 2915baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 292ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 293ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 294ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SetMatrix: { 295ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkMatrix* matrix = getMatrix(); 2965baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p", (char*) indent, OP_NAMES[op], matrix); 297ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 298ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 299ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ConcatMatrix: { 300ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkMatrix* matrix = getMatrix(); 3015baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p", (char*) indent, OP_NAMES[op], matrix); 302ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 303ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 304ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ClipRect: { 305ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 306ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 307ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 308ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 309ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int regionOp = getInt(); 3105baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d", (char*) indent, OP_NAMES[op], 311ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase f1, f2, f3, f4, regionOp); 312ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 313ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 314ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawDisplayList: { 315ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase DisplayList* displayList = getDisplayList(); 316ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t width = getUInt(); 317ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t height = getUInt(); 3185baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p, %dx%d, %d", (char*) indent, OP_NAMES[op], 319ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase displayList, width, height, level + 1); 320ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase renderer.outputDisplayList(displayList, level + 1); 321ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 322ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 323ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawLayer: { 324ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase Layer* layer = (Layer*) getInt(); 325ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float x = getFloat(); 326ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float y = getFloat(); 3275ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 3285baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 329ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase layer, x, y, paint); 330ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 331ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 332ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawBitmap: { 333ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkBitmap* bitmap = getBitmap(); 334ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float x = getFloat(); 335ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float y = getFloat(); 3365ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 3375baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 338ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase bitmap, x, y, paint); 339ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 340ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 341ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawBitmapMatrix: { 342ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkBitmap* bitmap = getBitmap(); 343ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkMatrix* matrix = getMatrix(); 3445ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 3455baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p, %p, %p", (char*) indent, OP_NAMES[op], 346ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase bitmap, matrix, paint); 347ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 348ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 349ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawBitmapRect: { 350ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkBitmap* bitmap = getBitmap(); 351ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 352ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 353ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 354ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 355ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f5 = getFloat(); 356ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f6 = getFloat(); 357ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f7 = getFloat(); 358ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f8 = getFloat(); 3595ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 3605baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 361ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase (char*) indent, OP_NAMES[op], bitmap, f1, f2, f3, f4, f5, f6, f7, f8, paint); 362ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 363ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 364ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawBitmapMesh: { 365ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int verticesCount = 0; 366ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t colorsCount = 0; 367ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkBitmap* bitmap = getBitmap(); 368ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t meshWidth = getInt(); 369ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t meshHeight = getInt(); 370ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float* vertices = getFloats(verticesCount); 371ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase bool hasColors = getInt(); 372ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int* colors = hasColors ? getInts(colorsCount) : NULL; 3735ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 3745baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 375ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 376ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 377ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawPatch: { 378ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int32_t* xDivs = NULL; 379ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int32_t* yDivs = NULL; 380ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t* colors = NULL; 381ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t xDivsCount = 0; 382ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t yDivsCount = 0; 383ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int8_t numColors = 0; 384ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkBitmap* bitmap = getBitmap(); 385ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase xDivs = getInts(xDivsCount); 386ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase yDivs = getInts(yDivsCount); 387ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase colors = getUInts(numColors); 388a62f172215727a1e00af0cb934904e00926a86c9Romain Guy float left = getFloat(); 389a62f172215727a1e00af0cb934904e00926a86c9Romain Guy float top = getFloat(); 390a62f172215727a1e00af0cb934904e00926a86c9Romain Guy float right = getFloat(); 391a62f172215727a1e00af0cb934904e00926a86c9Romain Guy float bottom = getFloat(); 3925ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 3935baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f", (char*) indent, OP_NAMES[op], 394a62f172215727a1e00af0cb934904e00926a86c9Romain Guy left, top, right, bottom); 395ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 396ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 397ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawColor: { 398ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int color = getInt(); 399ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int xferMode = getInt(); 4005baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s 0x%x %d", (char*) indent, OP_NAMES[op], color, xferMode); 401ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 402ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 403ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawRect: { 404ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 405ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 406ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 407ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 4085ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 4095baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 410ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase f1, f2, f3, f4, paint); 411ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 412ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 413ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawRoundRect: { 414ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 415ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 416ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 417ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 418ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f5 = getFloat(); 419ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f6 = getFloat(); 4205ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 4215baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 422ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, paint); 423ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 424ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 425ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawCircle: { 426ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 427ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 428ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 4295ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 4305baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %p", 431ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, paint); 432ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 433ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 434ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawOval: { 435ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 436ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 437ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 438ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 4395ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 4405baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", 441ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, paint); 442ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 443ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 444ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawArc: { 445ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 446ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 447ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 448ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 449ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f5 = getFloat(); 450ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f6 = getFloat(); 451ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int i1 = getInt(); 4525ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 4535baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %d, %p", 454ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, i1, paint); 455ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 456ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 457ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawPath: { 458ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPath* path = getPath(); 4595ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 4605baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p, %p", (char*) indent, OP_NAMES[op], path, paint); 461ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 462ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 463ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawLines: { 464ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int count = 0; 465ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float* points = getFloats(count); 4665ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 4675baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 468ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 469ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 470ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawPoints: { 471ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int count = 0; 472ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float* points = getFloats(count); 4735ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 4745baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 475ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 476ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 477ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawText: { 478ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase getText(&text); 479ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int count = getInt(); 480ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float x = getFloat(); 481ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float y = getFloat(); 4825ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 483cac5fd3e09e9dc918753d4aff624bf29a367ade3Romain Guy float length = getFloat(); 4845baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %s, %d, %d, %.2f, %.2f, %p, %.2f", (char*) indent, OP_NAMES[op], 485cac5fd3e09e9dc918753d4aff624bf29a367ade3Romain Guy text.text(), text.length(), count, x, y, paint, length); 486ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 487ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 488eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy case DrawPosText: { 489eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy getText(&text); 490eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy int count = getInt(); 491eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy int positionsCount = 0; 492eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy float* positions = getFloats(positionsCount); 4935ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 494eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy ALOGD("%s%s %s, %d, %d, %p", (char*) indent, OP_NAMES[op], 495eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy text.text(), text.length(), count, paint); 496eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy } 497ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ResetShader: { 4985baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 499ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 500ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 501ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SetupShader: { 502ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkiaShader* shader = getShader(); 5035baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p", (char*) indent, OP_NAMES[op], shader); 504ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 505ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 506ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ResetColorFilter: { 5075baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 508ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 509ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 510ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SetupColorFilter: { 511ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkiaColorFilter *colorFilter = getColorFilter(); 5125baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %p", (char*) indent, OP_NAMES[op], colorFilter); 513ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 514ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 515ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ResetShadow: { 5165baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 517ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 518ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 519ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SetupShadow: { 520ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float radius = getFloat(); 521ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float dx = getFloat(); 522ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float dy = getFloat(); 523ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int color = getInt(); 5245baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%s%s %.2f, %.2f, %.2f, 0x%x", (char*) indent, OP_NAMES[op], 525ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase radius, dx, dy, color); 526ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 527ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 5285ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy case ResetPaintFilter: { 5295ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy ALOGD("%s%s", (char*) indent, OP_NAMES[op]); 5305ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy } 5315ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy break; 5325ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy case SetupPaintFilter: { 5335ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy int clearBits = getInt(); 5345ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy int setBits = getInt(); 5355ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy ALOGD("%s%s 0x%x, 0x%x", (char*) indent, OP_NAMES[op], clearBits, setBits); 5365ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy } 5375ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy break; 538ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase default: 5395baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("Display List error: op not handled: %s%s", 540ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase (char*) indent, OP_NAMES[op]); 541ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 542ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 543ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 544ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 5455baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("%sDone", (char*) indent + 2); 546ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase} 547ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 548ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase/** 549ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * Changes to replay(), specifically those involving opcode or parameter changes, should be mimicked 550ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * in the output() function, since that function processes the same list of opcodes for the 551ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * purposes of logging display list info for a given view. 552ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase */ 553cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guybool DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, uint32_t level) { 554daf98e941e140e8739458126640183b9f296a2abChet Haase bool needsInvalidate = false; 555b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy TextContainer text; 556b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mReader.rewind(); 557b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 558ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#if DEBUG_DISPLAY_LIST 559ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy uint32_t count = (level + 1) * 2; 560ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy char indent[count + 1]; 561ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy for (uint32_t i = 0; i < count; i++) { 562ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy indent[i] = ' '; 563ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy } 564ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy indent[count] = '\0'; 565ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy DISPLAY_LIST_LOGD("%sStart display list (%p)", (char*) indent + 2, this); 566ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#endif 567b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 5689c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase DisplayListLogBuffer& logBuffer = DisplayListLogBuffer::getInstance(); 569ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy int saveCount = renderer.getSaveCount() - 1; 570b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy while (!mReader.eof()) { 5715b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int op = mReader.readInt(); 5729c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase logBuffer.writeCommand(level, op); 573ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 5745b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy switch (op) { 575daf98e941e140e8739458126640183b9f296a2abChet Haase case DrawGLFunction: { 576daf98e941e140e8739458126640183b9f296a2abChet Haase Functor *functor = (Functor *) getInt(); 577daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], functor); 578cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy needsInvalidate |= renderer.callDrawGLFunction(functor, dirty); 579daf98e941e140e8739458126640183b9f296a2abChet Haase } 580daf98e941e140e8739458126640183b9f296a2abChet Haase break; 581b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Save: { 582daf98e941e140e8739458126640183b9f296a2abChet Haase int rendererNum = getInt(); 583daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, OP_NAMES[op], rendererNum); 584daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.save(rendererNum); 585b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 586b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 587b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Restore: { 588daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 589b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.restore(); 590b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 591b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 592b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case RestoreToCount: { 593daf98e941e140e8739458126640183b9f296a2abChet Haase int restoreCount = saveCount + getInt(); 594daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, OP_NAMES[op], restoreCount); 595daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.restoreToCount(restoreCount); 596b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 597b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 598b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SaveLayer: { 599daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 600daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 601daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 602daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 6035ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 604daf98e941e140e8739458126640183b9f296a2abChet Haase int flags = getInt(); 605daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p, 0x%x", (char*) indent, 606daf98e941e140e8739458126640183b9f296a2abChet Haase OP_NAMES[op], f1, f2, f3, f4, paint, flags); 607daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.saveLayer(f1, f2, f3, f4, paint, flags); 608b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 609b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 6105b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy case SaveLayerAlpha: { 611daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 612daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 613daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 614daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 615daf98e941e140e8739458126640183b9f296a2abChet Haase int alpha = getInt(); 616daf98e941e140e8739458126640183b9f296a2abChet Haase int flags = getInt(); 617daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", (char*) indent, 618daf98e941e140e8739458126640183b9f296a2abChet Haase OP_NAMES[op], f1, f2, f3, f4, alpha, flags); 619daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.saveLayerAlpha(f1, f2, f3, f4, alpha, flags); 6205b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy } 6215b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy break; 622b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Translate: { 623daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 624daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 625daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], f1, f2); 626daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.translate(f1, f2); 627b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 628b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 629b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Rotate: { 630daf98e941e140e8739458126640183b9f296a2abChet Haase float rotation = getFloat(); 631daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f", (char*) indent, OP_NAMES[op], rotation); 632daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.rotate(rotation); 633b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 634b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 635b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Scale: { 636daf98e941e140e8739458126640183b9f296a2abChet Haase float sx = getFloat(); 637daf98e941e140e8739458126640183b9f296a2abChet Haase float sy = getFloat(); 638daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 639daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.scale(sx, sy); 640b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 641b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 642807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy case Skew: { 643daf98e941e140e8739458126640183b9f296a2abChet Haase float sx = getFloat(); 644daf98e941e140e8739458126640183b9f296a2abChet Haase float sy = getFloat(); 645daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 646daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.skew(sx, sy); 647807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy } 648807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy break; 649b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetMatrix: { 650daf98e941e140e8739458126640183b9f296a2abChet Haase SkMatrix* matrix = getMatrix(); 651daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], matrix); 652daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setMatrix(matrix); 653b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 654b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 655b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ConcatMatrix: { 656daf98e941e140e8739458126640183b9f296a2abChet Haase SkMatrix* matrix = getMatrix(); 657daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], matrix); 658daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.concatMatrix(matrix); 659b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 660b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 661b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ClipRect: { 662daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 663daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 664daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 665daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 666daf98e941e140e8739458126640183b9f296a2abChet Haase int regionOp = getInt(); 667daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d", (char*) indent, OP_NAMES[op], 668daf98e941e140e8739458126640183b9f296a2abChet Haase f1, f2, f3, f4, regionOp); 669daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.clipRect(f1, f2, f3, f4, (SkRegion::Op) regionOp); 670b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 671b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 6720fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy case DrawDisplayList: { 673daf98e941e140e8739458126640183b9f296a2abChet Haase DisplayList* displayList = getDisplayList(); 6747b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy uint32_t width = getUInt(); 6757b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy uint32_t height = getUInt(); 6767b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy DISPLAY_LIST_LOGD("%s%s %p, %dx%d, %d", (char*) indent, OP_NAMES[op], 6777b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy displayList, width, height, level + 1); 6787b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy needsInvalidate |= renderer.drawDisplayList(displayList, width, height, 6797b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy dirty, level + 1); 6800fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy } 6810fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy break; 6826c319ca1275c8db892c39b48fc54864c949f9171Romain Guy case DrawLayer: { 683daf98e941e140e8739458126640183b9f296a2abChet Haase Layer* layer = (Layer*) getInt(); 684daf98e941e140e8739458126640183b9f296a2abChet Haase float x = getFloat(); 685daf98e941e140e8739458126640183b9f296a2abChet Haase float y = getFloat(); 6865ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 687daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 688daf98e941e140e8739458126640183b9f296a2abChet Haase layer, x, y, paint); 689daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawLayer(layer, x, y, paint); 6906c319ca1275c8db892c39b48fc54864c949f9171Romain Guy } 6916c319ca1275c8db892c39b48fc54864c949f9171Romain Guy break; 692b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmap: { 693daf98e941e140e8739458126640183b9f296a2abChet Haase SkBitmap* bitmap = getBitmap(); 694daf98e941e140e8739458126640183b9f296a2abChet Haase float x = getFloat(); 695daf98e941e140e8739458126640183b9f296a2abChet Haase float y = getFloat(); 6965ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 697daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 698daf98e941e140e8739458126640183b9f296a2abChet Haase bitmap, x, y, paint); 699daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawBitmap(bitmap, x, y, paint); 700b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 701b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 702b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmapMatrix: { 703daf98e941e140e8739458126640183b9f296a2abChet Haase SkBitmap* bitmap = getBitmap(); 704daf98e941e140e8739458126640183b9f296a2abChet Haase SkMatrix* matrix = getMatrix(); 7055ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 706daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %p, %p", (char*) indent, OP_NAMES[op], 707daf98e941e140e8739458126640183b9f296a2abChet Haase bitmap, matrix, paint); 708daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawBitmap(bitmap, matrix, paint); 709b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 710b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 711b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmapRect: { 712daf98e941e140e8739458126640183b9f296a2abChet Haase SkBitmap* bitmap = getBitmap(); 713daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 714daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 715daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 716daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 717daf98e941e140e8739458126640183b9f296a2abChet Haase float f5 = getFloat(); 718daf98e941e140e8739458126640183b9f296a2abChet Haase float f6 = getFloat(); 719daf98e941e140e8739458126640183b9f296a2abChet Haase float f7 = getFloat(); 720daf98e941e140e8739458126640183b9f296a2abChet Haase float f8 = getFloat(); 7215ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 722daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 723daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op], bitmap, f1, f2, f3, f4, f5, f6, f7, f8, paint); 724daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawBitmap(bitmap, f1, f2, f3, f4, f5, f6, f7, f8, paint); 725b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 726b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 7275a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy case DrawBitmapMesh: { 7285a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy int verticesCount = 0; 7295a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t colorsCount = 0; 7305a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 7315a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy SkBitmap* bitmap = getBitmap(); 7325a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t meshWidth = getInt(); 7335a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t meshHeight = getInt(); 7345a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy float* vertices = getFloats(verticesCount); 7355a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy bool hasColors = getInt(); 7365a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy int* colors = hasColors ? getInts(colorsCount) : NULL; 7375ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 7385a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 739daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 7409ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy renderer.drawBitmapMesh(bitmap, meshWidth, meshHeight, vertices, colors, paint); 7415a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } 742a566b7c3aada08d37cf08096c972e3e641bed773Romain Guy break; 743b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawPatch: { 744b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int32_t* xDivs = NULL; 745b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int32_t* yDivs = NULL; 7464bb942083a0d4db746adf95349108dd8ef842e32Romain Guy uint32_t* colors = NULL; 747b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy uint32_t xDivsCount = 0; 748b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy uint32_t yDivsCount = 0; 7494bb942083a0d4db746adf95349108dd8ef842e32Romain Guy int8_t numColors = 0; 750b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 751b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkBitmap* bitmap = getBitmap(); 752b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 753b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy xDivs = getInts(xDivsCount); 754b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy yDivs = getInts(yDivsCount); 7554bb942083a0d4db746adf95349108dd8ef842e32Romain Guy colors = getUInts(numColors); 756b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 7579ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float left = getFloat(); 7589ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float top = getFloat(); 7599ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float right = getFloat(); 7609ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float bottom = getFloat(); 7615ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 7629ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy 763daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 7644bb942083a0d4db746adf95349108dd8ef842e32Romain Guy renderer.drawPatch(bitmap, xDivs, yDivs, colors, xDivsCount, yDivsCount, 7659ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy numColors, left, top, right, bottom, paint); 766b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 767b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 768b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawColor: { 769daf98e941e140e8739458126640183b9f296a2abChet Haase int color = getInt(); 770daf98e941e140e8739458126640183b9f296a2abChet Haase int xferMode = getInt(); 771daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s 0x%x %d", (char*) indent, OP_NAMES[op], color, xferMode); 772daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawColor(color, (SkXfermode::Mode) xferMode); 773b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 774b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 775b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawRect: { 776daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 777daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 778daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 779daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 7805ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 781daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 782daf98e941e140e8739458126640183b9f296a2abChet Haase f1, f2, f3, f4, paint); 783daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawRect(f1, f2, f3, f4, paint); 784b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 785b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 78601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy case DrawRoundRect: { 787daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 788daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 789daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 790daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 791daf98e941e140e8739458126640183b9f296a2abChet Haase float f5 = getFloat(); 792daf98e941e140e8739458126640183b9f296a2abChet Haase float f6 = getFloat(); 7935ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 794daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 795daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, paint); 796daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawRoundRect(f1, f2, f3, f4, f5, f6, paint); 79701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy } 79801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy break; 79901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy case DrawCircle: { 800daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 801daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 802daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 8035ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 804daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %p", 805daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, paint); 806daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawCircle(f1, f2, f3, paint); 80701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy } 80801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy break; 809c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy case DrawOval: { 810daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 811daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 812daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 813daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 8145ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 815daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", 816daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, paint); 817daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawOval(f1, f2, f3, f4, paint); 818c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy } 819c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy break; 8208b2f5267f16c295f12faab810527cd6311997e34Romain Guy case DrawArc: { 821daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 822daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 823daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 824daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 825daf98e941e140e8739458126640183b9f296a2abChet Haase float f5 = getFloat(); 826daf98e941e140e8739458126640183b9f296a2abChet Haase float f6 = getFloat(); 827daf98e941e140e8739458126640183b9f296a2abChet Haase int i1 = getInt(); 8285ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 829daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %d, %p", 830daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, i1, paint); 831daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawArc(f1, f2, f3, f4, f5, f6, i1 == 1, paint); 8328b2f5267f16c295f12faab810527cd6311997e34Romain Guy } 8338b2f5267f16c295f12faab810527cd6311997e34Romain Guy break; 834b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawPath: { 835daf98e941e140e8739458126640183b9f296a2abChet Haase SkPath* path = getPath(); 8365ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 837daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %p", (char*) indent, OP_NAMES[op], path, paint); 838daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawPath(path, paint); 839b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 840b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 841b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawLines: { 842b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int count = 0; 843b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy float* points = getFloats(count); 8445ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 845daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 8469ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy renderer.drawLines(points, count, paint); 847b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 848b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 849ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy case DrawPoints: { 850ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy int count = 0; 851ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy float* points = getFloats(count); 8525ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 853ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 8549ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy renderer.drawPoints(points, count, paint); 855ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy } 856ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy break; 857b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawText: { 858b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy getText(&text); 859daf98e941e140e8739458126640183b9f296a2abChet Haase int count = getInt(); 860daf98e941e140e8739458126640183b9f296a2abChet Haase float x = getFloat(); 861daf98e941e140e8739458126640183b9f296a2abChet Haase float y = getFloat(); 8625ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 863cac5fd3e09e9dc918753d4aff624bf29a367ade3Romain Guy float length = getFloat(); 864cac5fd3e09e9dc918753d4aff624bf29a367ade3Romain Guy DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %.2f, %.2f, %p, %.2f", (char*) indent, 865cac5fd3e09e9dc918753d4aff624bf29a367ade3Romain Guy OP_NAMES[op], text.text(), text.length(), count, x, y, paint, length); 866cac5fd3e09e9dc918753d4aff624bf29a367ade3Romain Guy renderer.drawText(text.text(), text.length(), count, x, y, paint, length); 867b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 868b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 869eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy case DrawPosText: { 870eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy getText(&text); 871eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy int count = getInt(); 872eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy int positionsCount = 0; 873eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy float* positions = getFloats(positionsCount); 8745ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy SkPaint* paint = getPaint(renderer); 875eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %p", (char*) indent, 876eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy OP_NAMES[op], text.text(), text.length(), count, paint); 877eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy renderer.drawPosText(text.text(), text.length(), count, positions, paint); 878eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy } 879eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy break; 880b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetShader: { 881daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 882b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetShader(); 883b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 884b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 885b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupShader: { 886daf98e941e140e8739458126640183b9f296a2abChet Haase SkiaShader* shader = getShader(); 887daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], shader); 888daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setupShader(shader); 889b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 890b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 891b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetColorFilter: { 892daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 893b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetColorFilter(); 894b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 895b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 896b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupColorFilter: { 897daf98e941e140e8739458126640183b9f296a2abChet Haase SkiaColorFilter *colorFilter = getColorFilter(); 898daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], colorFilter); 899daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setupColorFilter(colorFilter); 900b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 901b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 902b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetShadow: { 903daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 904b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetShadow(); 905b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 906b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 907b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupShadow: { 908daf98e941e140e8739458126640183b9f296a2abChet Haase float radius = getFloat(); 909daf98e941e140e8739458126640183b9f296a2abChet Haase float dx = getFloat(); 910daf98e941e140e8739458126640183b9f296a2abChet Haase float dy = getFloat(); 911daf98e941e140e8739458126640183b9f296a2abChet Haase int color = getInt(); 912daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, 0x%x", (char*) indent, OP_NAMES[op], 913daf98e941e140e8739458126640183b9f296a2abChet Haase radius, dx, dy, color); 914daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setupShadow(radius, dx, dy, color); 915daf98e941e140e8739458126640183b9f296a2abChet Haase } 916daf98e941e140e8739458126640183b9f296a2abChet Haase break; 9175ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy case ResetPaintFilter: { 9185ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 9195ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy renderer.resetPaintFilter(); 9205ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy } 9215ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy break; 9225ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy case SetupPaintFilter: { 9235ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy int clearBits = getInt(); 9245ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy int setBits = getInt(); 9255ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy DISPLAY_LIST_LOGD("%s%s 0x%x, 0x%x", (char*) indent, OP_NAMES[op], 9265ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy clearBits, setBits); 9275ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy renderer.setupPaintFilter(clearBits, setBits); 9285ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy } 9295ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy break; 930daf98e941e140e8739458126640183b9f296a2abChet Haase default: 931daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("Display List error: op not handled: %s%s", 932daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op]); 933daf98e941e140e8739458126640183b9f296a2abChet Haase break; 934b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 935b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 936ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 937daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%sDone, returning %d", (char*) indent + 2, needsInvalidate); 938daf98e941e140e8739458126640183b9f296a2abChet Haase return needsInvalidate; 939b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 940b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 941b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/////////////////////////////////////////////////////////////////////////////// 9424aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Base structure 9434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 9444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 94504c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain GuyDisplayListRenderer::DisplayListRenderer(): mWriter(MIN_WRITER_SIZE), mHasDrawOps(false) { 9464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 9474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 9484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain GuyDisplayListRenderer::~DisplayListRenderer() { 9494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy reset(); 9504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 9514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 9524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::reset() { 9534aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.reset(); 9545c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 9555c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Caches& caches = Caches::getInstance(); 9565c13d89c1332fcc499379b9064b891187b75ca32Chet Haase for (size_t i = 0; i < mBitmapResources.size(); i++) { 957d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.decrementRefcount(mBitmapResources.itemAt(i)); 9585c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 9595c13d89c1332fcc499379b9064b891187b75ca32Chet Haase mBitmapResources.clear(); 960d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 961d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy for (size_t i = 0; i < mFilterResources.size(); i++) { 962d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.decrementRefcount(mFilterResources.itemAt(i)); 963d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy } 964d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy mFilterResources.clear(); 965d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 96643ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy for (size_t i = 0; i < mShaders.size(); i++) { 967d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.decrementRefcount(mShaders.itemAt(i)); 96843ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy } 96924c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaders.clear(); 97024c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaderMap.clear(); 97143ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy 97243ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy mPaints.clear(); 97343ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy mPaintMap.clear(); 974d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 9752fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPaths.clear(); 9762fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPathMap.clear(); 977d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 978d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mMatrices.clear(); 97904c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy 98004c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy mHasDrawOps = false; 9814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 9824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 9834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 9844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Operations 9854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 9864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 987162a0217563f4665da6eb183dfce0fef740f641fJeff BrownDisplayList* DisplayListRenderer::getDisplayList(DisplayList* displayList) { 988162a0217563f4665da6eb183dfce0fef740f641fJeff Brown if (!displayList) { 989162a0217563f4665da6eb183dfce0fef740f641fJeff Brown displayList = new DisplayList(*this); 9905977baa1fa24125c148a72699b53e62abaf08960Chet Haase } else { 991162a0217563f4665da6eb183dfce0fef740f641fJeff Brown displayList->initFromDisplayListRenderer(*this, true); 9925977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 99304c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy displayList->setRenderable(mHasDrawOps); 994162a0217563f4665da6eb183dfce0fef740f641fJeff Brown return displayList; 9955977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 9965977baa1fa24125c148a72699b53e62abaf08960Chet Haase 997b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyvoid DisplayListRenderer::setViewport(int width, int height) { 998b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mOrthoMatrix.loadOrtho(0, width, height, 0, -1, 1); 999b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1000b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mWidth = width; 1001b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mHeight = height; 1002b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 1003b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 10047d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guyvoid DisplayListRenderer::prepareDirty(float left, float top, 10057d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy float right, float bottom, bool opaque) { 1006b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSnapshot = new Snapshot(mFirstSnapshot, 1007b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); 1008b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSaveCount = 1; 1009b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSnapshot->setClip(0.0f, 0.0f, mWidth, mHeight); 101027454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mRestoreSaveCount = -1; 101127454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy} 101227454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy 101327454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guyvoid DisplayListRenderer::finish() { 101427454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy insertRestoreToCount(); 101527454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy OpenGLRenderer::finish(); 1016b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 1017b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1018daf98e941e140e8739458126640183b9f296a2abChet Haasevoid DisplayListRenderer::interrupt() { 1019daf98e941e140e8739458126640183b9f296a2abChet Haase} 1020daf98e941e140e8739458126640183b9f296a2abChet Haase 10212b1847ea60650a9f68372abe860415f18b55081dRomain Guyvoid DisplayListRenderer::resume() { 10224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1024cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guybool DisplayListRenderer::callDrawGLFunction(Functor *functor, Rect& dirty) { 1025cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy // Ignore dirty during recording, it matters only when we replay 1026daf98e941e140e8739458126640183b9f296a2abChet Haase addOp(DisplayList::DrawGLFunction); 1027daf98e941e140e8739458126640183b9f296a2abChet Haase addInt((int) functor); 1028daf98e941e140e8739458126640183b9f296a2abChet Haase return false; // No invalidate needed at record-time 1029daf98e941e140e8739458126640183b9f296a2abChet Haase} 1030daf98e941e140e8739458126640183b9f296a2abChet Haase 10314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::save(int flags) { 1032b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Save); 10334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(flags); 10344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return OpenGLRenderer::save(flags); 10354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 10374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restore() { 103804c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy if (mRestoreSaveCount < 0) { 103904c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy addOp(DisplayList::Restore); 104004c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy } else { 104104c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy mRestoreSaveCount--; 104204c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy } 10434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::restore(); 10444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 10464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restoreToCount(int saveCount) { 104727454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mRestoreSaveCount = saveCount; 10484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::restoreToCount(saveCount); 10494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 10514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::saveLayer(float left, float top, float right, float bottom, 10525c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* p, int flags) { 1053b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SaveLayer); 10544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 10554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(p); 10564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(flags); 1057b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return OpenGLRenderer::save(flags); 10584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 10605b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guyint DisplayListRenderer::saveLayerAlpha(float left, float top, float right, float bottom, 10615b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int alpha, int flags) { 10625b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addOp(DisplayList::SaveLayerAlpha); 10635b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addBounds(left, top, right, bottom); 10645b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addInt(alpha); 10655b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addInt(flags); 10665b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy return OpenGLRenderer::save(flags); 10675b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy} 10685b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy 10694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::translate(float dx, float dy) { 1070b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Translate); 10714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(dx, dy); 10724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::translate(dx, dy); 10734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 10754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::rotate(float degrees) { 1076b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Rotate); 10774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloat(degrees); 10784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::rotate(degrees); 10794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 10814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::scale(float sx, float sy) { 1082b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Scale); 10834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(sx, sy); 10844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::scale(sx, sy); 10854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1087807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guyvoid DisplayListRenderer::skew(float sx, float sy) { 1088807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy addOp(DisplayList::Skew); 1089807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy addPoint(sx, sy); 1090807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy OpenGLRenderer::skew(sx, sy); 1091807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy} 1092807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy 10934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setMatrix(SkMatrix* matrix) { 1094b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SetMatrix); 10954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 10964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::setMatrix(matrix); 10974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 10994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::concatMatrix(SkMatrix* matrix) { 1100b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ConcatMatrix); 11014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 11024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::concatMatrix(matrix); 11034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 11044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 11054aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guybool DisplayListRenderer::clipRect(float left, float top, float right, float bottom, 11064aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkRegion::Op op) { 1107b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ClipRect); 11084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 11094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(op); 11104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return OpenGLRenderer::clipRect(left, top, right, bottom, op); 11114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 11124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 11137b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guybool DisplayListRenderer::drawDisplayList(DisplayList* displayList, 11147b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy uint32_t width, uint32_t height, Rect& dirty, uint32_t level) { 1115cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy // dirty is an out parameter and should not be recorded, 1116cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy // it matters only when replaying the display list 11170fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addOp(DisplayList::DrawDisplayList); 11180fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addDisplayList(displayList); 11197b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy addSize(width, height); 1120daf98e941e140e8739458126640183b9f296a2abChet Haase return false; 11210fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy} 11220fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy 1123ada830f639591b99c3e40de22b07296c7932a33fRomain Guyvoid DisplayListRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* paint) { 11246c319ca1275c8db892c39b48fc54864c949f9171Romain Guy addOp(DisplayList::DrawLayer); 1125ada830f639591b99c3e40de22b07296c7932a33fRomain Guy addInt((int) layer); 1126ada830f639591b99c3e40de22b07296c7932a33fRomain Guy addPoint(x, y); 11276c319ca1275c8db892c39b48fc54864c949f9171Romain Guy addPaint(paint); 11286c319ca1275c8db892c39b48fc54864c949f9171Romain Guy} 11296c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 11304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float left, float top, 11315c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 1132b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawBitmap); 11334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 11344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(left, top); 11354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 11364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 11374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 11385c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, 11395c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 1140b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawBitmapMatrix); 11414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 11424aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 11434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 11444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 11454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 11464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop, 11474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float srcRight, float srcBottom, float dstLeft, float dstTop, 11485c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float dstRight, float dstBottom, SkPaint* paint) { 1149b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawBitmapRect); 11504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 11514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(srcLeft, srcTop, srcRight, srcBottom); 11524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(dstLeft, dstTop, dstRight, dstBottom); 11534aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 11544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 11554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 11565a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guyvoid DisplayListRenderer::drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight, 11575a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy float* vertices, int* colors, SkPaint* paint) { 11585a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addOp(DisplayList::DrawBitmapMesh); 11595a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addBitmap(bitmap); 11605a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(meshWidth); 11615a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(meshHeight); 11625a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addFloats(vertices, (meshWidth + 1) * (meshHeight + 1) * 2); 11635a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy if (colors) { 11645a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(1); 11655a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInts(colors, (meshWidth + 1) * (meshHeight + 1)); 11665a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } else { 11675a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(0); 11685a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } 11695a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addPaint(paint); 11705a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy} 11715a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 11724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int32_t* yDivs, 11734bb942083a0d4db746adf95349108dd8ef842e32Romain Guy const uint32_t* colors, uint32_t width, uint32_t height, int8_t numColors, 11745c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float left, float top, float right, float bottom, SkPaint* paint) { 1175b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawPatch); 11764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 11774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInts(xDivs, width); 11784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInts(yDivs, height); 11794bb942083a0d4db746adf95349108dd8ef842e32Romain Guy addUInts(colors, numColors); 11804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 11814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 11824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 11834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 11844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawColor(int color, SkXfermode::Mode mode) { 1185b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawColor); 11864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(color); 11874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(mode); 11884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 11894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 11904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawRect(float left, float top, float right, float bottom, 11915c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 1192b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawRect); 11934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 11944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 11954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 11964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 119701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guyvoid DisplayListRenderer::drawRoundRect(float left, float top, float right, float bottom, 119801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy float rx, float ry, SkPaint* paint) { 119901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addOp(DisplayList::DrawRoundRect); 120001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addBounds(left, top, right, bottom); 120101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPoint(rx, ry); 120201d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPaint(paint); 120301d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy} 120401d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy 120501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guyvoid DisplayListRenderer::drawCircle(float x, float y, float radius, SkPaint* paint) { 120601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addOp(DisplayList::DrawCircle); 120701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPoint(x, y); 120801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addFloat(radius); 120901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPaint(paint); 121001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy} 121101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy 1212c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guyvoid DisplayListRenderer::drawOval(float left, float top, float right, float bottom, 1213c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy SkPaint* paint) { 1214c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addOp(DisplayList::DrawOval); 1215c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addBounds(left, top, right, bottom); 1216c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addPaint(paint); 1217c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy} 1218c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy 12198b2f5267f16c295f12faab810527cd6311997e34Romain Guyvoid DisplayListRenderer::drawArc(float left, float top, float right, float bottom, 12208b2f5267f16c295f12faab810527cd6311997e34Romain Guy float startAngle, float sweepAngle, bool useCenter, SkPaint* paint) { 122182d41a515368236e56454bd84023bebd6306f6b7Romain Guy addOp(DisplayList::DrawArc); 12228b2f5267f16c295f12faab810527cd6311997e34Romain Guy addBounds(left, top, right, bottom); 12238b2f5267f16c295f12faab810527cd6311997e34Romain Guy addPoint(startAngle, sweepAngle); 12248b2f5267f16c295f12faab810527cd6311997e34Romain Guy addInt(useCenter ? 1 : 0); 12258b2f5267f16c295f12faab810527cd6311997e34Romain Guy addPaint(paint); 12268b2f5267f16c295f12faab810527cd6311997e34Romain Guy} 12278b2f5267f16c295f12faab810527cd6311997e34Romain Guy 12284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawPath(SkPath* path, SkPaint* paint) { 1229b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawPath); 12304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPath(path); 12314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 12324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 12334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 12345c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid DisplayListRenderer::drawLines(float* points, int count, SkPaint* paint) { 1235b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawLines); 12364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloats(points, count); 12374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 1238ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy} 1239ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy 1240ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guyvoid DisplayListRenderer::drawPoints(float* points, int count, SkPaint* paint) { 1241ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy addOp(DisplayList::DrawPoints); 1242ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy addFloats(points, count); 1243ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy addPaint(paint); 12444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 12454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 12464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawText(const char* text, int bytesCount, int count, 1247cac5fd3e09e9dc918753d4aff624bf29a367ade3Romain Guy float x, float y, SkPaint* paint, float length) { 1248726aeba80ffc6778a9bc3e0ee957b8d644183505Romain Guy if (count <= 0) return; 1249b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawText); 12504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addText(text, bytesCount); 12514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(count); 12524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(x, y); 12538f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // TODO: We should probably make a copy of the paint instead of modifying 12548f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // it; modifying the paint will change its generationID the first 12558f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // time, which might impact caches. More investigation needed to 12568f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // see if it matters. 12578f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // If we make a copy, then drawTextDecorations() should *not* make 12588f9a9f61ab793d9387a5942b307e74324704893bRomain Guy // its own copy as it does right now. 1259c511bee87cda99a252d1a62487f47c8f05aee78cFabrice Di Meglio // Beware: this needs Glyph encoding (already done on the Paint constructor) 12608f9a9f61ab793d9387a5942b307e74324704893bRomain Guy paint->setAntiAlias(true); 12614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 1262cac5fd3e09e9dc918753d4aff624bf29a367ade3Romain Guy addFloat(length < 0.0f ? paint->measureText(text, bytesCount) : length); 12634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 12644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1265eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guyvoid DisplayListRenderer::drawPosText(const char* text, int bytesCount, int count, 1266eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy const float* positions, SkPaint* paint) { 1267eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy if (count <= 0) return; 1268eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy addOp(DisplayList::DrawPosText); 1269eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy addText(text, bytesCount); 1270eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy addInt(count); 1271eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy addFloats(positions, count * 2); 1272eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy paint->setAntiAlias(true); 1273eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy addPaint(paint); 1274eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy} 1275eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy 12764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShader() { 1277b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetShader); 12784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 12794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 12804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShader(SkiaShader* shader) { 12815c13d89c1332fcc499379b9064b891187b75ca32Chet Haase addOp(DisplayList::SetupShader); 12825c13d89c1332fcc499379b9064b891187b75ca32Chet Haase addShader(shader); 12834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 12844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 12854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetColorFilter() { 1286b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetColorFilter); 12874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 12884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 12894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupColorFilter(SkiaColorFilter* filter) { 1290ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase addOp(DisplayList::SetupColorFilter); 1291ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase addColorFilter(filter); 12924aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 12934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 12944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShadow() { 1295b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetShadow); 12964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 12974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 12984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShadow(float radius, float dx, float dy, int color) { 1299b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SetupShadow); 13004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloat(radius); 13014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(dx, dy); 13024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(color); 13034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 13044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 13055ff9df658230d49e42c43586997a02d8e4dd417eRomain Guyvoid DisplayListRenderer::resetPaintFilter() { 13065ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy addOp(DisplayList::ResetPaintFilter); 13075ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy} 13085ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy 13095ff9df658230d49e42c43586997a02d8e4dd417eRomain Guyvoid DisplayListRenderer::setupPaintFilter(int clearBits, int setBits) { 13105ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy addOp(DisplayList::SetupPaintFilter); 13115ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy addInt(clearBits); 13125ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy addInt(setBits); 13135ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy} 13145ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy 13154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace uirenderer 13164aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace android 1317