DisplayListRenderer.cpp revision a62f172215727a1e00af0cb934904e00926a86c9
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", 63ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ResetShader", 64ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetupShader", 65ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ResetColorFilter", 66ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetupColorFilter", 67ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ResetShadow", 68daf98e941e140e8739458126640183b9f296a2abChet Haase "SetupShadow", 69daf98e941e140e8739458126640183b9f296a2abChet Haase "DrawGLFunction" 70ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy}; 71ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 729c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haasevoid DisplayList::outputLogBuffer(int fd) { 739c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase DisplayListLogBuffer& logBuffer = DisplayListLogBuffer::getInstance(); 749c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase if (logBuffer.isEmpty()) { 759c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase return; 769c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase } 7765b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy 789c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase FILE *file = fdopen(fd, "a"); 7965b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy 809c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase fprintf(file, "\nRecent DisplayList operations\n"); 819c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase logBuffer.outputCommands(file, OP_NAMES); 8265b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy 8365b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy String8 cachesLog; 8465b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy Caches::getInstance().dumpMemoryUsage(cachesLog); 8565b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy fprintf(file, "\nCaches:\n%s", cachesLog.string()); 8665b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy fprintf(file, "\n"); 8765b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy 889c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase fflush(file); 899c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase} 909c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase 91b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain GuyDisplayList::DisplayList(const DisplayListRenderer& recorder) { 925977baa1fa24125c148a72699b53e62abaf08960Chet Haase initFromDisplayListRenderer(recorder); 935977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 945977baa1fa24125c148a72699b53e62abaf08960Chet Haase 955977baa1fa24125c148a72699b53e62abaf08960Chet HaaseDisplayList::~DisplayList() { 96d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase clearResources(); 97d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase} 98d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase 99d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haasevoid DisplayList::clearResources() { 1005977baa1fa24125c148a72699b53e62abaf08960Chet Haase sk_free((void*) mReader.base()); 1015977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1025977baa1fa24125c148a72699b53e62abaf08960Chet Haase Caches& caches = Caches::getInstance(); 1035977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1045977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mBitmapResources.size(); i++) { 1055977baa1fa24125c148a72699b53e62abaf08960Chet Haase caches.resourceCache.decrementRefcount(mBitmapResources.itemAt(i)); 1065977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1075977baa1fa24125c148a72699b53e62abaf08960Chet Haase mBitmapResources.clear(); 1085977baa1fa24125c148a72699b53e62abaf08960Chet Haase 109d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy for (size_t i = 0; i < mFilterResources.size(); i++) { 110d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.decrementRefcount(mFilterResources.itemAt(i)); 111d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy } 112d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy mFilterResources.clear(); 113d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 11424c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy for (size_t i = 0; i < mShaders.size(); i++) { 11543ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy caches.resourceCache.decrementRefcount(mShaders.itemAt(i)); 116d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.destructor(mShaders.itemAt(i)); 1175977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 11824c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaders.clear(); 1195977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1205977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mPaints.size(); i++) { 1215977baa1fa24125c148a72699b53e62abaf08960Chet Haase delete mPaints.itemAt(i); 1225977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1235977baa1fa24125c148a72699b53e62abaf08960Chet Haase mPaints.clear(); 1245977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1252fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy for (size_t i = 0; i < mPaths.size(); i++) { 1261af23a32d879db330eb5a08b21090ec60b604a32Romain Guy SkPath* path = mPaths.itemAt(i); 1271af23a32d879db330eb5a08b21090ec60b604a32Romain Guy caches.pathCache.remove(path); 1281af23a32d879db330eb5a08b21090ec60b604a32Romain Guy delete path; 1292fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy } 1302fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPaths.clear(); 1312fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy 1325977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mMatrices.size(); i++) { 1335977baa1fa24125c148a72699b53e62abaf08960Chet Haase delete mMatrices.itemAt(i); 1345977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1355977baa1fa24125c148a72699b53e62abaf08960Chet Haase mMatrices.clear(); 1365977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 1375977baa1fa24125c148a72699b53e62abaf08960Chet Haase 138d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haasevoid DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorder, bool reusing) { 139b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy const SkWriter32& writer = recorder.writeStream(); 140b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy init(); 141b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 142b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy if (writer.size() == 0) { 143b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return; 144b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 145b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 146d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase if (reusing) { 147d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase // re-using display list - clear out previous allocations 148d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase clearResources(); 149d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase } 150d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase 15165b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy mSize = writer.size(); 15265b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy void* buffer = sk_malloc_throw(mSize); 153b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy writer.flatten(buffer); 15465b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy mReader.setMemory(buffer, mSize); 155b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1565c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Caches& caches = Caches::getInstance(); 157b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1585c13d89c1332fcc499379b9064b891187b75ca32Chet Haase const Vector<SkBitmap*> &bitmapResources = recorder.getBitmapResources(); 1595c13d89c1332fcc499379b9064b891187b75ca32Chet Haase for (size_t i = 0; i < bitmapResources.size(); i++) { 1605c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkBitmap* resource = bitmapResources.itemAt(i); 1615c13d89c1332fcc499379b9064b891187b75ca32Chet Haase mBitmapResources.add(resource); 1625c13d89c1332fcc499379b9064b891187b75ca32Chet Haase caches.resourceCache.incrementRefcount(resource); 163b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 164d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 165d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy const Vector<SkiaColorFilter*> &filterResources = recorder.getFilterResources(); 166d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy for (size_t i = 0; i < filterResources.size(); i++) { 167d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy SkiaColorFilter* resource = filterResources.itemAt(i); 168d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy mFilterResources.add(resource); 169d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.incrementRefcount(resource); 170d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy } 171d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 17224c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy const Vector<SkiaShader*> &shaders = recorder.getShaders(); 17324c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy for (size_t i = 0; i < shaders.size(); i++) { 174d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy SkiaShader* resource = shaders.itemAt(i); 175d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy mShaders.add(resource); 176d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.incrementRefcount(resource); 177b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 178b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 179d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase const Vector<SkPaint*> &paints = recorder.getPaints(); 180d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase for (size_t i = 0; i < paints.size(); i++) { 181d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mPaints.add(paints.itemAt(i)); 182d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase } 183d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 1842fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy const Vector<SkPath*> &paths = recorder.getPaths(); 1852fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy for (size_t i = 0; i < paths.size(); i++) { 1862fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPaths.add(paths.itemAt(i)); 1872fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy } 1882fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy 189d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase const Vector<SkMatrix*> &matrices = recorder.getMatrices(); 190d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase for (size_t i = 0; i < matrices.size(); i++) { 191d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mMatrices.add(matrices.itemAt(i)); 192d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase } 193b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 194b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 195b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyvoid DisplayList::init() { 19665b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy mSize = 0; 19704c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy mIsRenderable = true; 19865b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy} 19965b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy 20065b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guysize_t DisplayList::getSize() { 20165b345fa22b878e141b8fd8ece9c208df00fa40fRomain Guy return mSize; 202b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 203b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 204ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase/** 205ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * This function is a simplified version of replay(), where we simply retrieve and log the 206ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * display list. This function should remain in sync with the replay() function. 207ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase */ 208ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haasevoid DisplayList::output(OpenGLRenderer& renderer, uint32_t level) { 209ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase TextContainer text; 210ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 211ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t count = (level + 1) * 2; 212ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase char indent[count + 1]; 213ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase for (uint32_t i = 0; i < count; i++) { 214ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase indent[i] = ' '; 215ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 216ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase indent[count] = '\0'; 217ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%sStart display list (%p)", (char*) indent + 2, this); 218ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 219ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int saveCount = renderer.getSaveCount() - 1; 220ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 221ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase mReader.rewind(); 222ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 223ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase while (!mReader.eof()) { 224ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int op = mReader.readInt(); 225ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 226ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase switch (op) { 227ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawGLFunction: { 228ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase Functor *functor = (Functor *) getInt(); 229ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %p", (char*) indent, OP_NAMES[op], functor); 230ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 231ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 232ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Save: { 233ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int rendererNum = getInt(); 234ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %d", (char*) indent, OP_NAMES[op], rendererNum); 235ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 236ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 237ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Restore: { 238ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s", (char*) indent, OP_NAMES[op]); 239ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 240ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 241ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case RestoreToCount: { 242ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int restoreCount = saveCount + getInt(); 243ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %d", (char*) indent, OP_NAMES[op], restoreCount); 244ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 245ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 246ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SaveLayer: { 247ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 248ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 249ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 250ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 251ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPaint* paint = getPaint(); 252ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int flags = getInt(); 253ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p, 0x%x", (char*) indent, 254ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase OP_NAMES[op], f1, f2, f3, f4, paint, flags); 255ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 256ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 257ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SaveLayerAlpha: { 258ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 259ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 260ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 261ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 262ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int alpha = getInt(); 263ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int flags = getInt(); 264ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", (char*) indent, 265ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase OP_NAMES[op], f1, f2, f3, f4, alpha, flags); 266ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 267ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 268ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Translate: { 269ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 270ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 271ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], f1, f2); 272ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 273ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 274ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Rotate: { 275ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float rotation = getFloat(); 276ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %.2f", (char*) indent, OP_NAMES[op], rotation); 277ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 278ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 279ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Scale: { 280ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float sx = getFloat(); 281ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float sy = getFloat(); 282ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 283ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 284ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 285ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case Skew: { 286ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float sx = getFloat(); 287ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float sy = getFloat(); 288ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 289ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 290ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 291ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SetMatrix: { 292ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkMatrix* matrix = getMatrix(); 293ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %p", (char*) indent, OP_NAMES[op], matrix); 294ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 295ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 296ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ConcatMatrix: { 297ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkMatrix* matrix = getMatrix(); 298ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %p", (char*) indent, OP_NAMES[op], matrix); 299ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 300ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 301ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ClipRect: { 302ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 303ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 304ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 305ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 306ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int regionOp = getInt(); 307ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d", (char*) indent, OP_NAMES[op], 308ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase f1, f2, f3, f4, regionOp); 309ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 310ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 311ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawDisplayList: { 312ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase DisplayList* displayList = getDisplayList(); 313ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t width = getUInt(); 314ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t height = getUInt(); 315ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %p, %dx%d, %d", (char*) indent, OP_NAMES[op], 316ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase displayList, width, height, level + 1); 317ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase renderer.outputDisplayList(displayList, level + 1); 318ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 319ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 320ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawLayer: { 321ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase Layer* layer = (Layer*) getInt(); 322ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float x = getFloat(); 323ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float y = getFloat(); 324ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPaint* paint = getPaint(); 325ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 326ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase layer, x, y, paint); 327ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 328ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 329ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawBitmap: { 330ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkBitmap* bitmap = getBitmap(); 331ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float x = getFloat(); 332ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float y = getFloat(); 333ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPaint* paint = getPaint(); 334ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 335ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase bitmap, x, y, paint); 336ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 337ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 338ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawBitmapMatrix: { 339ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkBitmap* bitmap = getBitmap(); 340ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkMatrix* matrix = getMatrix(); 341ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPaint* paint = getPaint(); 342ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %p, %p, %p", (char*) indent, OP_NAMES[op], 343ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase bitmap, matrix, paint); 344ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 345ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 346ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawBitmapRect: { 347ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkBitmap* bitmap = getBitmap(); 348ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 349ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 350ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 351ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 352ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f5 = getFloat(); 353ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f6 = getFloat(); 354ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f7 = getFloat(); 355ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f8 = getFloat(); 356ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPaint* paint = getPaint(); 357ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %p, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 358ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase (char*) indent, OP_NAMES[op], bitmap, f1, f2, f3, f4, f5, f6, f7, f8, paint); 359ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 360ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 361ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawBitmapMesh: { 362ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int verticesCount = 0; 363ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t colorsCount = 0; 364ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkBitmap* bitmap = getBitmap(); 365ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t meshWidth = getInt(); 366ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t meshHeight = getInt(); 367ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float* vertices = getFloats(verticesCount); 368ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase bool hasColors = getInt(); 369ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int* colors = hasColors ? getInts(colorsCount) : NULL; 370ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPaint* paint = getPaint(); 371ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s", (char*) indent, OP_NAMES[op]); 372ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 373ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 374ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawPatch: { 375ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int32_t* xDivs = NULL; 376ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int32_t* yDivs = NULL; 377ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t* colors = NULL; 378ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t xDivsCount = 0; 379ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase uint32_t yDivsCount = 0; 380ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int8_t numColors = 0; 381ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkBitmap* bitmap = getBitmap(); 382ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase xDivs = getInts(xDivsCount); 383ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase yDivs = getInts(yDivsCount); 384ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase colors = getUInts(numColors); 385a62f172215727a1e00af0cb934904e00926a86c9Romain Guy float left = getFloat(); 386a62f172215727a1e00af0cb934904e00926a86c9Romain Guy float top = getFloat(); 387a62f172215727a1e00af0cb934904e00926a86c9Romain Guy float right = getFloat(); 388a62f172215727a1e00af0cb934904e00926a86c9Romain Guy float bottom = getFloat(); 389a62f172215727a1e00af0cb934904e00926a86c9Romain Guy SkPaint* paint = getPaint(); 390a62f172215727a1e00af0cb934904e00926a86c9Romain Guy LOGD("%s%s %.2f, %.2f, %.2f, %.2f", (char*) indent, OP_NAMES[op], 391a62f172215727a1e00af0cb934904e00926a86c9Romain Guy left, top, right, bottom); 392ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 393ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 394ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawColor: { 395ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int color = getInt(); 396ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int xferMode = getInt(); 397ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s 0x%x %d", (char*) indent, OP_NAMES[op], color, xferMode); 398ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 399ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 400ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawRect: { 401ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 402ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 403ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 404ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 405ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPaint* paint = getPaint(); 406ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 407ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase f1, f2, f3, f4, paint); 408ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 409ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 410ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawRoundRect: { 411ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 412ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 413ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 414ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 415ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f5 = getFloat(); 416ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f6 = getFloat(); 417ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPaint* paint = getPaint(); 418ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 419ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, paint); 420ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 421ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 422ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawCircle: { 423ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 424ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 425ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 426ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPaint* paint = getPaint(); 427ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %.2f, %.2f, %.2f, %p", 428ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, paint); 429ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 430ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 431ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawOval: { 432ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 433ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 434ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 435ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 436ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPaint* paint = getPaint(); 437ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", 438ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, paint); 439ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 440ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 441ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawArc: { 442ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 443ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 444ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 445ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 446ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f5 = getFloat(); 447ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f6 = getFloat(); 448ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int i1 = getInt(); 449ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPaint* paint = getPaint(); 450ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %d, %p", 451ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, i1, paint); 452ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 453ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 454ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawPath: { 455ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPath* path = getPath(); 456ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPaint* paint = getPaint(); 457ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %p, %p", (char*) indent, OP_NAMES[op], path, paint); 458ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 459ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 460ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawLines: { 461ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int count = 0; 462ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float* points = getFloats(count); 463ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPaint* paint = getPaint(); 464ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s", (char*) indent, OP_NAMES[op]); 465ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 466ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 467ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawPoints: { 468ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int count = 0; 469ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float* points = getFloats(count); 470ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPaint* paint = getPaint(); 471ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s", (char*) indent, OP_NAMES[op]); 472ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 473ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 474ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawText: { 475ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase getText(&text); 476ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int count = getInt(); 477ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float x = getFloat(); 478ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float y = getFloat(); 479ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPaint* paint = getPaint(); 480ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %s, %d, %d, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 481ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase text.text(), text.length(), count, x, y, paint); 482ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 483ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 484ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ResetShader: { 485ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s", (char*) indent, OP_NAMES[op]); 486ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 487ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 488ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SetupShader: { 489ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkiaShader* shader = getShader(); 490ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %p", (char*) indent, OP_NAMES[op], shader); 491ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 492ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 493ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ResetColorFilter: { 494ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s", (char*) indent, OP_NAMES[op]); 495ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 496ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 497ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SetupColorFilter: { 498ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkiaColorFilter *colorFilter = getColorFilter(); 499ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %p", (char*) indent, OP_NAMES[op], colorFilter); 500ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 501ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 502ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ResetShadow: { 503ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s", (char*) indent, OP_NAMES[op]); 504ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 505ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 506ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SetupShadow: { 507ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float radius = getFloat(); 508ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float dx = getFloat(); 509ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float dy = getFloat(); 510ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int color = getInt(); 511ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %.2f, %.2f, %.2f, 0x%x", (char*) indent, OP_NAMES[op], 512ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase radius, dx, dy, color); 513ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 514ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 515ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase default: 516ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("Display List error: op not handled: %s%s", 517ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase (char*) indent, OP_NAMES[op]); 518ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 519ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 520ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 521ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 522ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%sDone", (char*) indent + 2); 523ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase} 524ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 525ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase/** 526ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * Changes to replay(), specifically those involving opcode or parameter changes, should be mimicked 527ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * in the output() function, since that function processes the same list of opcodes for the 528ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * purposes of logging display list info for a given view. 529ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase */ 530cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guybool DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, uint32_t level) { 531daf98e941e140e8739458126640183b9f296a2abChet Haase bool needsInvalidate = false; 532b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy TextContainer text; 533b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mReader.rewind(); 534b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 535ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#if DEBUG_DISPLAY_LIST 536ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy uint32_t count = (level + 1) * 2; 537ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy char indent[count + 1]; 538ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy for (uint32_t i = 0; i < count; i++) { 539ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy indent[i] = ' '; 540ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy } 541ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy indent[count] = '\0'; 542ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy DISPLAY_LIST_LOGD("%sStart display list (%p)", (char*) indent + 2, this); 543ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#endif 544b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 5459c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase DisplayListLogBuffer& logBuffer = DisplayListLogBuffer::getInstance(); 546ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy int saveCount = renderer.getSaveCount() - 1; 547b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy while (!mReader.eof()) { 5485b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int op = mReader.readInt(); 5499c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase logBuffer.writeCommand(level, op); 550ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 5515b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy switch (op) { 552daf98e941e140e8739458126640183b9f296a2abChet Haase case DrawGLFunction: { 553daf98e941e140e8739458126640183b9f296a2abChet Haase Functor *functor = (Functor *) getInt(); 554daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], functor); 555cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy needsInvalidate |= renderer.callDrawGLFunction(functor, dirty); 556daf98e941e140e8739458126640183b9f296a2abChet Haase } 557daf98e941e140e8739458126640183b9f296a2abChet Haase break; 558b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Save: { 559daf98e941e140e8739458126640183b9f296a2abChet Haase int rendererNum = getInt(); 560daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, OP_NAMES[op], rendererNum); 561daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.save(rendererNum); 562b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 563b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 564b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Restore: { 565daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 566b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.restore(); 567b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 568b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 569b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case RestoreToCount: { 570daf98e941e140e8739458126640183b9f296a2abChet Haase int restoreCount = saveCount + getInt(); 571daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, OP_NAMES[op], restoreCount); 572daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.restoreToCount(restoreCount); 573b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 574b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 575b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SaveLayer: { 576daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 577daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 578daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 579daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 580daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 581daf98e941e140e8739458126640183b9f296a2abChet Haase int flags = getInt(); 582daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p, 0x%x", (char*) indent, 583daf98e941e140e8739458126640183b9f296a2abChet Haase OP_NAMES[op], f1, f2, f3, f4, paint, flags); 584daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.saveLayer(f1, f2, f3, f4, paint, flags); 585b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 586b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 5875b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy case SaveLayerAlpha: { 588daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 589daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 590daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 591daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 592daf98e941e140e8739458126640183b9f296a2abChet Haase int alpha = getInt(); 593daf98e941e140e8739458126640183b9f296a2abChet Haase int flags = getInt(); 594daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", (char*) indent, 595daf98e941e140e8739458126640183b9f296a2abChet Haase OP_NAMES[op], f1, f2, f3, f4, alpha, flags); 596daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.saveLayerAlpha(f1, f2, f3, f4, alpha, flags); 5975b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy } 5985b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy break; 599b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Translate: { 600daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 601daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 602daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], f1, f2); 603daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.translate(f1, f2); 604b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 605b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 606b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Rotate: { 607daf98e941e140e8739458126640183b9f296a2abChet Haase float rotation = getFloat(); 608daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f", (char*) indent, OP_NAMES[op], rotation); 609daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.rotate(rotation); 610b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 611b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 612b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Scale: { 613daf98e941e140e8739458126640183b9f296a2abChet Haase float sx = getFloat(); 614daf98e941e140e8739458126640183b9f296a2abChet Haase float sy = getFloat(); 615daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 616daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.scale(sx, sy); 617b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 618b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 619807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy case Skew: { 620daf98e941e140e8739458126640183b9f296a2abChet Haase float sx = getFloat(); 621daf98e941e140e8739458126640183b9f296a2abChet Haase float sy = getFloat(); 622daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 623daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.skew(sx, sy); 624807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy } 625807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy break; 626b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetMatrix: { 627daf98e941e140e8739458126640183b9f296a2abChet Haase SkMatrix* matrix = getMatrix(); 628daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], matrix); 629daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setMatrix(matrix); 630b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 631b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 632b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ConcatMatrix: { 633daf98e941e140e8739458126640183b9f296a2abChet Haase SkMatrix* matrix = getMatrix(); 634daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], matrix); 635daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.concatMatrix(matrix); 636b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 637b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 638b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ClipRect: { 639daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 640daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 641daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 642daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 643daf98e941e140e8739458126640183b9f296a2abChet Haase int regionOp = getInt(); 644daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d", (char*) indent, OP_NAMES[op], 645daf98e941e140e8739458126640183b9f296a2abChet Haase f1, f2, f3, f4, regionOp); 646daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.clipRect(f1, f2, f3, f4, (SkRegion::Op) regionOp); 647b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 648b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 6490fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy case DrawDisplayList: { 650daf98e941e140e8739458126640183b9f296a2abChet Haase DisplayList* displayList = getDisplayList(); 6517b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy uint32_t width = getUInt(); 6527b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy uint32_t height = getUInt(); 6537b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy DISPLAY_LIST_LOGD("%s%s %p, %dx%d, %d", (char*) indent, OP_NAMES[op], 6547b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy displayList, width, height, level + 1); 6557b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy needsInvalidate |= renderer.drawDisplayList(displayList, width, height, 6567b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy dirty, level + 1); 6570fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy } 6580fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy break; 6596c319ca1275c8db892c39b48fc54864c949f9171Romain Guy case DrawLayer: { 660daf98e941e140e8739458126640183b9f296a2abChet Haase Layer* layer = (Layer*) getInt(); 661daf98e941e140e8739458126640183b9f296a2abChet Haase float x = getFloat(); 662daf98e941e140e8739458126640183b9f296a2abChet Haase float y = getFloat(); 663daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 664daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 665daf98e941e140e8739458126640183b9f296a2abChet Haase layer, x, y, paint); 666daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawLayer(layer, x, y, paint); 6676c319ca1275c8db892c39b48fc54864c949f9171Romain Guy } 6686c319ca1275c8db892c39b48fc54864c949f9171Romain Guy break; 669b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmap: { 670daf98e941e140e8739458126640183b9f296a2abChet Haase SkBitmap* bitmap = getBitmap(); 671daf98e941e140e8739458126640183b9f296a2abChet Haase float x = getFloat(); 672daf98e941e140e8739458126640183b9f296a2abChet Haase float y = getFloat(); 673daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 674daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 675daf98e941e140e8739458126640183b9f296a2abChet Haase bitmap, x, y, paint); 676daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawBitmap(bitmap, x, y, paint); 677b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 678b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 679b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmapMatrix: { 680daf98e941e140e8739458126640183b9f296a2abChet Haase SkBitmap* bitmap = getBitmap(); 681daf98e941e140e8739458126640183b9f296a2abChet Haase SkMatrix* matrix = getMatrix(); 682daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 683daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %p, %p", (char*) indent, OP_NAMES[op], 684daf98e941e140e8739458126640183b9f296a2abChet Haase bitmap, matrix, paint); 685daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawBitmap(bitmap, matrix, paint); 686b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 687b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 688b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmapRect: { 689daf98e941e140e8739458126640183b9f296a2abChet Haase SkBitmap* bitmap = getBitmap(); 690daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 691daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 692daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 693daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 694daf98e941e140e8739458126640183b9f296a2abChet Haase float f5 = getFloat(); 695daf98e941e140e8739458126640183b9f296a2abChet Haase float f6 = getFloat(); 696daf98e941e140e8739458126640183b9f296a2abChet Haase float f7 = getFloat(); 697daf98e941e140e8739458126640183b9f296a2abChet Haase float f8 = getFloat(); 698daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 699daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 700daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op], bitmap, f1, f2, f3, f4, f5, f6, f7, f8, paint); 701daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawBitmap(bitmap, f1, f2, f3, f4, f5, f6, f7, f8, paint); 702b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 703b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 7045a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy case DrawBitmapMesh: { 7055a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy int verticesCount = 0; 7065a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t colorsCount = 0; 7075a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 7085a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy SkBitmap* bitmap = getBitmap(); 7095a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t meshWidth = getInt(); 7105a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t meshHeight = getInt(); 7115a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy float* vertices = getFloats(verticesCount); 7125a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy bool hasColors = getInt(); 7135a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy int* colors = hasColors ? getInts(colorsCount) : NULL; 7149ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy SkPaint* paint = getPaint(); 7155a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 716daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 7179ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy renderer.drawBitmapMesh(bitmap, meshWidth, meshHeight, vertices, colors, paint); 7185a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } 719a566b7c3aada08d37cf08096c972e3e641bed773Romain Guy break; 720b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawPatch: { 721b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int32_t* xDivs = NULL; 722b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int32_t* yDivs = NULL; 7234bb942083a0d4db746adf95349108dd8ef842e32Romain Guy uint32_t* colors = NULL; 724b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy uint32_t xDivsCount = 0; 725b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy uint32_t yDivsCount = 0; 7264bb942083a0d4db746adf95349108dd8ef842e32Romain Guy int8_t numColors = 0; 727b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 728b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkBitmap* bitmap = getBitmap(); 729b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 730b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy xDivs = getInts(xDivsCount); 731b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy yDivs = getInts(yDivsCount); 7324bb942083a0d4db746adf95349108dd8ef842e32Romain Guy colors = getUInts(numColors); 733b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 7349ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float left = getFloat(); 7359ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float top = getFloat(); 7369ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float right = getFloat(); 7379ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float bottom = getFloat(); 7389ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy SkPaint* paint = getPaint(); 7399ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy 740daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 7414bb942083a0d4db746adf95349108dd8ef842e32Romain Guy renderer.drawPatch(bitmap, xDivs, yDivs, colors, xDivsCount, yDivsCount, 7429ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy numColors, left, top, right, bottom, paint); 743b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 744b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 745b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawColor: { 746daf98e941e140e8739458126640183b9f296a2abChet Haase int color = getInt(); 747daf98e941e140e8739458126640183b9f296a2abChet Haase int xferMode = getInt(); 748daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s 0x%x %d", (char*) indent, OP_NAMES[op], color, xferMode); 749daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawColor(color, (SkXfermode::Mode) xferMode); 750b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 751b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 752b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawRect: { 753daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 754daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 755daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 756daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 757daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 758daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 759daf98e941e140e8739458126640183b9f296a2abChet Haase f1, f2, f3, f4, paint); 760daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawRect(f1, f2, f3, f4, paint); 761b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 762b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 76301d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy case DrawRoundRect: { 764daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 765daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 766daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 767daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 768daf98e941e140e8739458126640183b9f296a2abChet Haase float f5 = getFloat(); 769daf98e941e140e8739458126640183b9f296a2abChet Haase float f6 = getFloat(); 770daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 771daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 772daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, paint); 773daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawRoundRect(f1, f2, f3, f4, f5, f6, paint); 77401d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy } 77501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy break; 77601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy case DrawCircle: { 777daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 778daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 779daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 780daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 781daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %p", 782daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, paint); 783daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawCircle(f1, f2, f3, paint); 78401d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy } 78501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy break; 786c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy case DrawOval: { 787daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 788daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 789daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 790daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 791daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 792daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", 793daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, paint); 794daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawOval(f1, f2, f3, f4, paint); 795c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy } 796c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy break; 7978b2f5267f16c295f12faab810527cd6311997e34Romain Guy case DrawArc: { 798daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 799daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 800daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 801daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 802daf98e941e140e8739458126640183b9f296a2abChet Haase float f5 = getFloat(); 803daf98e941e140e8739458126640183b9f296a2abChet Haase float f6 = getFloat(); 804daf98e941e140e8739458126640183b9f296a2abChet Haase int i1 = getInt(); 805daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 806daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %d, %p", 807daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, i1, paint); 808daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawArc(f1, f2, f3, f4, f5, f6, i1 == 1, paint); 8098b2f5267f16c295f12faab810527cd6311997e34Romain Guy } 8108b2f5267f16c295f12faab810527cd6311997e34Romain Guy break; 811b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawPath: { 812daf98e941e140e8739458126640183b9f296a2abChet Haase SkPath* path = getPath(); 813daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 814daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %p", (char*) indent, OP_NAMES[op], path, paint); 815daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawPath(path, paint); 816b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 817b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 818b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawLines: { 819b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int count = 0; 820b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy float* points = getFloats(count); 8219ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy SkPaint* paint = getPaint(); 822daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 8239ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy renderer.drawLines(points, count, paint); 824b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 825b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 826ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy case DrawPoints: { 827ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy int count = 0; 828ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy float* points = getFloats(count); 8299ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy SkPaint* paint = getPaint(); 830ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 8319ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy renderer.drawPoints(points, count, paint); 832ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy } 833ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy break; 834b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawText: { 835b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy getText(&text); 836daf98e941e140e8739458126640183b9f296a2abChet Haase int count = getInt(); 837daf98e941e140e8739458126640183b9f296a2abChet Haase float x = getFloat(); 838daf98e941e140e8739458126640183b9f296a2abChet Haase float y = getFloat(); 839daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 840daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 841daf98e941e140e8739458126640183b9f296a2abChet Haase text.text(), text.length(), count, x, y, paint); 842daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawText(text.text(), text.length(), count, x, y, paint); 843b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 844b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 845b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetShader: { 846daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 847b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetShader(); 848b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 849b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 850b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupShader: { 851daf98e941e140e8739458126640183b9f296a2abChet Haase SkiaShader* shader = getShader(); 852daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], shader); 853daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setupShader(shader); 854b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 855b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 856b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetColorFilter: { 857daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 858b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetColorFilter(); 859b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 860b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 861b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupColorFilter: { 862daf98e941e140e8739458126640183b9f296a2abChet Haase SkiaColorFilter *colorFilter = getColorFilter(); 863daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], colorFilter); 864daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setupColorFilter(colorFilter); 865b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 866b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 867b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetShadow: { 868daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 869b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetShadow(); 870b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 871b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 872b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupShadow: { 873daf98e941e140e8739458126640183b9f296a2abChet Haase float radius = getFloat(); 874daf98e941e140e8739458126640183b9f296a2abChet Haase float dx = getFloat(); 875daf98e941e140e8739458126640183b9f296a2abChet Haase float dy = getFloat(); 876daf98e941e140e8739458126640183b9f296a2abChet Haase int color = getInt(); 877daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, 0x%x", (char*) indent, OP_NAMES[op], 878daf98e941e140e8739458126640183b9f296a2abChet Haase radius, dx, dy, color); 879daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setupShadow(radius, dx, dy, color); 880daf98e941e140e8739458126640183b9f296a2abChet Haase } 881daf98e941e140e8739458126640183b9f296a2abChet Haase break; 882daf98e941e140e8739458126640183b9f296a2abChet Haase default: 883daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("Display List error: op not handled: %s%s", 884daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op]); 885daf98e941e140e8739458126640183b9f296a2abChet Haase break; 886b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 887b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 888ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 889daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%sDone, returning %d", (char*) indent + 2, needsInvalidate); 890daf98e941e140e8739458126640183b9f296a2abChet Haase return needsInvalidate; 891b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 892b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 893b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/////////////////////////////////////////////////////////////////////////////// 8944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Base structure 8954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 8964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 89704c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain GuyDisplayListRenderer::DisplayListRenderer(): mWriter(MIN_WRITER_SIZE), mHasDrawOps(false) { 8984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 8994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 9004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain GuyDisplayListRenderer::~DisplayListRenderer() { 9014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy reset(); 9024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 9034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 9044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::reset() { 9054aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.reset(); 9065c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 9075c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Caches& caches = Caches::getInstance(); 9085c13d89c1332fcc499379b9064b891187b75ca32Chet Haase for (size_t i = 0; i < mBitmapResources.size(); i++) { 909d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.decrementRefcount(mBitmapResources.itemAt(i)); 9105c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 9115c13d89c1332fcc499379b9064b891187b75ca32Chet Haase mBitmapResources.clear(); 912d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 913d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy for (size_t i = 0; i < mFilterResources.size(); i++) { 914d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.decrementRefcount(mFilterResources.itemAt(i)); 915d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy } 916d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy mFilterResources.clear(); 917d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 91843ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy for (size_t i = 0; i < mShaders.size(); i++) { 919d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.decrementRefcount(mShaders.itemAt(i)); 92043ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy } 92124c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaders.clear(); 92224c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaderMap.clear(); 92343ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy 92443ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy mPaints.clear(); 92543ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy mPaintMap.clear(); 926d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 9272fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPaths.clear(); 9282fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPathMap.clear(); 929d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 930d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mMatrices.clear(); 93104c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy 93204c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy mHasDrawOps = false; 9334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 9344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 9354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 9364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Operations 9374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 9384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 939162a0217563f4665da6eb183dfce0fef740f641fJeff BrownDisplayList* DisplayListRenderer::getDisplayList(DisplayList* displayList) { 940162a0217563f4665da6eb183dfce0fef740f641fJeff Brown if (!displayList) { 941162a0217563f4665da6eb183dfce0fef740f641fJeff Brown displayList = new DisplayList(*this); 9425977baa1fa24125c148a72699b53e62abaf08960Chet Haase } else { 943162a0217563f4665da6eb183dfce0fef740f641fJeff Brown displayList->initFromDisplayListRenderer(*this, true); 9445977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 94504c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy displayList->setRenderable(mHasDrawOps); 946162a0217563f4665da6eb183dfce0fef740f641fJeff Brown return displayList; 9475977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 9485977baa1fa24125c148a72699b53e62abaf08960Chet Haase 949b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyvoid DisplayListRenderer::setViewport(int width, int height) { 950b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mOrthoMatrix.loadOrtho(0, width, height, 0, -1, 1); 951b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 952b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mWidth = width; 953b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mHeight = height; 954b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 955b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 9567d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guyvoid DisplayListRenderer::prepareDirty(float left, float top, 9577d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy float right, float bottom, bool opaque) { 958b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSnapshot = new Snapshot(mFirstSnapshot, 959b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); 960b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSaveCount = 1; 961b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSnapshot->setClip(0.0f, 0.0f, mWidth, mHeight); 96227454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mRestoreSaveCount = -1; 96327454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy} 96427454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy 96527454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guyvoid DisplayListRenderer::finish() { 96627454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy insertRestoreToCount(); 96727454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy OpenGLRenderer::finish(); 968b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 969b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 970daf98e941e140e8739458126640183b9f296a2abChet Haasevoid DisplayListRenderer::interrupt() { 971daf98e941e140e8739458126640183b9f296a2abChet Haase} 972daf98e941e140e8739458126640183b9f296a2abChet Haase 9732b1847ea60650a9f68372abe860415f18b55081dRomain Guyvoid DisplayListRenderer::resume() { 9744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 9754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 976cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guybool DisplayListRenderer::callDrawGLFunction(Functor *functor, Rect& dirty) { 977cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy // Ignore dirty during recording, it matters only when we replay 978daf98e941e140e8739458126640183b9f296a2abChet Haase addOp(DisplayList::DrawGLFunction); 979daf98e941e140e8739458126640183b9f296a2abChet Haase addInt((int) functor); 980daf98e941e140e8739458126640183b9f296a2abChet Haase return false; // No invalidate needed at record-time 981daf98e941e140e8739458126640183b9f296a2abChet Haase} 982daf98e941e140e8739458126640183b9f296a2abChet Haase 9834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::save(int flags) { 984b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Save); 9854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(flags); 9864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return OpenGLRenderer::save(flags); 9874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 9884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 9894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restore() { 99004c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy if (mRestoreSaveCount < 0) { 99104c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy addOp(DisplayList::Restore); 99204c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy } else { 99304c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy mRestoreSaveCount--; 99404c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy } 9954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::restore(); 9964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 9974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 9984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restoreToCount(int saveCount) { 99927454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mRestoreSaveCount = saveCount; 10004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::restoreToCount(saveCount); 10014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 10034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::saveLayer(float left, float top, float right, float bottom, 10045c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* p, int flags) { 1005b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SaveLayer); 10064aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 10074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(p); 10084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(flags); 1009b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return OpenGLRenderer::save(flags); 10104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 10125b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guyint DisplayListRenderer::saveLayerAlpha(float left, float top, float right, float bottom, 10135b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int alpha, int flags) { 10145b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addOp(DisplayList::SaveLayerAlpha); 10155b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addBounds(left, top, right, bottom); 10165b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addInt(alpha); 10175b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addInt(flags); 10185b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy return OpenGLRenderer::save(flags); 10195b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy} 10205b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy 10214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::translate(float dx, float dy) { 1022b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Translate); 10234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(dx, dy); 10244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::translate(dx, dy); 10254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 10274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::rotate(float degrees) { 1028b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Rotate); 10294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloat(degrees); 10304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::rotate(degrees); 10314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 10334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::scale(float sx, float sy) { 1034b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Scale); 10354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(sx, sy); 10364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::scale(sx, sy); 10374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1039807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guyvoid DisplayListRenderer::skew(float sx, float sy) { 1040807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy addOp(DisplayList::Skew); 1041807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy addPoint(sx, sy); 1042807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy OpenGLRenderer::skew(sx, sy); 1043807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy} 1044807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy 10454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setMatrix(SkMatrix* matrix) { 1046b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SetMatrix); 10474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 10484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::setMatrix(matrix); 10494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 10514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::concatMatrix(SkMatrix* matrix) { 1052b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ConcatMatrix); 10534aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 10544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::concatMatrix(matrix); 10554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 10574aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guybool DisplayListRenderer::clipRect(float left, float top, float right, float bottom, 10584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkRegion::Op op) { 1059b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ClipRect); 10604aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 10614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(op); 10624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return OpenGLRenderer::clipRect(left, top, right, bottom, op); 10634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 10657b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guybool DisplayListRenderer::drawDisplayList(DisplayList* displayList, 10667b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy uint32_t width, uint32_t height, Rect& dirty, uint32_t level) { 1067cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy // dirty is an out parameter and should not be recorded, 1068cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy // it matters only when replaying the display list 10690fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addOp(DisplayList::DrawDisplayList); 10700fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addDisplayList(displayList); 10717b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy addSize(width, height); 1072daf98e941e140e8739458126640183b9f296a2abChet Haase return false; 10730fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy} 10740fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy 1075ada830f639591b99c3e40de22b07296c7932a33fRomain Guyvoid DisplayListRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* paint) { 10766c319ca1275c8db892c39b48fc54864c949f9171Romain Guy addOp(DisplayList::DrawLayer); 1077ada830f639591b99c3e40de22b07296c7932a33fRomain Guy addInt((int) layer); 1078ada830f639591b99c3e40de22b07296c7932a33fRomain Guy addPoint(x, y); 10796c319ca1275c8db892c39b48fc54864c949f9171Romain Guy addPaint(paint); 10806c319ca1275c8db892c39b48fc54864c949f9171Romain Guy} 10816c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 10824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float left, float top, 10835c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 1084b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawBitmap); 10854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 10864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(left, top); 10874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 10884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 10905c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, 10915c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 1092b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawBitmapMatrix); 10934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 10944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 10954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 10964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 10984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop, 10994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float srcRight, float srcBottom, float dstLeft, float dstTop, 11005c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float dstRight, float dstBottom, SkPaint* paint) { 1101b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawBitmapRect); 11024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 11034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(srcLeft, srcTop, srcRight, srcBottom); 11044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(dstLeft, dstTop, dstRight, dstBottom); 11054aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 11064aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 11074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 11085a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guyvoid DisplayListRenderer::drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight, 11095a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy float* vertices, int* colors, SkPaint* paint) { 11105a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addOp(DisplayList::DrawBitmapMesh); 11115a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addBitmap(bitmap); 11125a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(meshWidth); 11135a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(meshHeight); 11145a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addFloats(vertices, (meshWidth + 1) * (meshHeight + 1) * 2); 11155a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy if (colors) { 11165a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(1); 11175a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInts(colors, (meshWidth + 1) * (meshHeight + 1)); 11185a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } else { 11195a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(0); 11205a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } 11215a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addPaint(paint); 11225a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy} 11235a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 11244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int32_t* yDivs, 11254bb942083a0d4db746adf95349108dd8ef842e32Romain Guy const uint32_t* colors, uint32_t width, uint32_t height, int8_t numColors, 11265c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float left, float top, float right, float bottom, SkPaint* paint) { 1127b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawPatch); 11284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 11294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInts(xDivs, width); 11304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInts(yDivs, height); 11314bb942083a0d4db746adf95349108dd8ef842e32Romain Guy addUInts(colors, numColors); 11324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 11334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 11344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 11354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 11364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawColor(int color, SkXfermode::Mode mode) { 1137b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawColor); 11384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(color); 11394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(mode); 11404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 11414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 11424aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawRect(float left, float top, float right, float bottom, 11435c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 1144b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawRect); 11454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 11464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 11474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 11484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 114901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guyvoid DisplayListRenderer::drawRoundRect(float left, float top, float right, float bottom, 115001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy float rx, float ry, SkPaint* paint) { 115101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addOp(DisplayList::DrawRoundRect); 115201d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addBounds(left, top, right, bottom); 115301d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPoint(rx, ry); 115401d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPaint(paint); 115501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy} 115601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy 115701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guyvoid DisplayListRenderer::drawCircle(float x, float y, float radius, SkPaint* paint) { 115801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addOp(DisplayList::DrawCircle); 115901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPoint(x, y); 116001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addFloat(radius); 116101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPaint(paint); 116201d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy} 116301d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy 1164c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guyvoid DisplayListRenderer::drawOval(float left, float top, float right, float bottom, 1165c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy SkPaint* paint) { 1166c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addOp(DisplayList::DrawOval); 1167c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addBounds(left, top, right, bottom); 1168c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addPaint(paint); 1169c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy} 1170c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy 11718b2f5267f16c295f12faab810527cd6311997e34Romain Guyvoid DisplayListRenderer::drawArc(float left, float top, float right, float bottom, 11728b2f5267f16c295f12faab810527cd6311997e34Romain Guy float startAngle, float sweepAngle, bool useCenter, SkPaint* paint) { 117382d41a515368236e56454bd84023bebd6306f6b7Romain Guy addOp(DisplayList::DrawArc); 11748b2f5267f16c295f12faab810527cd6311997e34Romain Guy addBounds(left, top, right, bottom); 11758b2f5267f16c295f12faab810527cd6311997e34Romain Guy addPoint(startAngle, sweepAngle); 11768b2f5267f16c295f12faab810527cd6311997e34Romain Guy addInt(useCenter ? 1 : 0); 11778b2f5267f16c295f12faab810527cd6311997e34Romain Guy addPaint(paint); 11788b2f5267f16c295f12faab810527cd6311997e34Romain Guy} 11798b2f5267f16c295f12faab810527cd6311997e34Romain Guy 11804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawPath(SkPath* path, SkPaint* paint) { 1181b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawPath); 11824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPath(path); 11834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 11844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 11854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 11865c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid DisplayListRenderer::drawLines(float* points, int count, SkPaint* paint) { 1187b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawLines); 11884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloats(points, count); 11894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 1190ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy} 1191ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy 1192ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guyvoid DisplayListRenderer::drawPoints(float* points, int count, SkPaint* paint) { 1193ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy addOp(DisplayList::DrawPoints); 1194ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy addFloats(points, count); 1195ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy addPaint(paint); 11964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 11974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 11984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawText(const char* text, int bytesCount, int count, 11994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float x, float y, SkPaint* paint) { 1200726aeba80ffc6778a9bc3e0ee957b8d644183505Romain Guy if (count <= 0) return; 1201b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawText); 12024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addText(text, bytesCount); 12034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(count); 12044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(x, y); 12054aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 12064aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 12074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 12084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShader() { 1209b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetShader); 12104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 12114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 12124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShader(SkiaShader* shader) { 12135c13d89c1332fcc499379b9064b891187b75ca32Chet Haase addOp(DisplayList::SetupShader); 12145c13d89c1332fcc499379b9064b891187b75ca32Chet Haase addShader(shader); 12154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 12164aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 12174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetColorFilter() { 1218b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetColorFilter); 12194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 12204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 12214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupColorFilter(SkiaColorFilter* filter) { 1222ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase addOp(DisplayList::SetupColorFilter); 1223ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase addColorFilter(filter); 12244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 12254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 12264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShadow() { 1227b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetShadow); 12284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 12294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 12304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShadow(float radius, float dx, float dy, int color) { 1231b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SetupShadow); 12324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloat(radius); 12334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(dx, dy); 12344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(color); 12354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 12364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 12374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace uirenderer 12384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace android 1239