DisplayListRenderer.cpp revision 04c9d8c2ffd028c35c750bac0a4a7b79e48059b5
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); 385ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 386ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase getFloat(); 387ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase getFloat(); 388ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase getFloat(); 389ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase getFloat(); 390ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase getPaint(); 391ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 392ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 393ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawColor: { 394ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int color = getInt(); 395ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int xferMode = getInt(); 396ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s 0x%x %d", (char*) indent, OP_NAMES[op], color, xferMode); 397ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 398ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 399ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawRect: { 400ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 401ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 402ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 403ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 404ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPaint* paint = getPaint(); 405ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 406ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase f1, f2, f3, f4, paint); 407ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 408ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 409ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawRoundRect: { 410ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 411ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 412ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 413ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 414ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f5 = getFloat(); 415ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f6 = getFloat(); 416ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPaint* paint = getPaint(); 417ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 418ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, paint); 419ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 420ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 421ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawCircle: { 422ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 423ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 424ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 425ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPaint* paint = getPaint(); 426ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %.2f, %.2f, %.2f, %p", 427ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, paint); 428ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 429ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 430ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawOval: { 431ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 432ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 433ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 434ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 435ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPaint* paint = getPaint(); 436ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", 437ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, paint); 438ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 439ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 440ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawArc: { 441ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f1 = getFloat(); 442ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f2 = getFloat(); 443ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f3 = getFloat(); 444ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f4 = getFloat(); 445ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f5 = getFloat(); 446ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float f6 = getFloat(); 447ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int i1 = getInt(); 448ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPaint* paint = getPaint(); 449ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %d, %p", 450ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, i1, paint); 451ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 452ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 453ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawPath: { 454ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPath* path = getPath(); 455ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPaint* paint = getPaint(); 456ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %p, %p", (char*) indent, OP_NAMES[op], path, paint); 457ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 458ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 459ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawLines: { 460ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int count = 0; 461ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float* points = getFloats(count); 462ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPaint* paint = getPaint(); 463ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s", (char*) indent, OP_NAMES[op]); 464ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 465ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 466ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawPoints: { 467ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int count = 0; 468ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float* points = getFloats(count); 469ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPaint* paint = getPaint(); 470ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s", (char*) indent, OP_NAMES[op]); 471ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 472ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 473ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case DrawText: { 474ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase getText(&text); 475ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int count = getInt(); 476ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float x = getFloat(); 477ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float y = getFloat(); 478ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkPaint* paint = getPaint(); 479ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %s, %d, %d, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 480ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase text.text(), text.length(), count, x, y, paint); 481ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 482ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 483ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ResetShader: { 484ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s", (char*) indent, OP_NAMES[op]); 485ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 486ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 487ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SetupShader: { 488ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkiaShader* shader = getShader(); 489ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %p", (char*) indent, OP_NAMES[op], shader); 490ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 491ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 492ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ResetColorFilter: { 493ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s", (char*) indent, OP_NAMES[op]); 494ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 495ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 496ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SetupColorFilter: { 497ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase SkiaColorFilter *colorFilter = getColorFilter(); 498ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %p", (char*) indent, OP_NAMES[op], colorFilter); 499ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 500ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 501ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case ResetShadow: { 502ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s", (char*) indent, OP_NAMES[op]); 503ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 504ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 505ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase case SetupShadow: { 506ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float radius = getFloat(); 507ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float dx = getFloat(); 508ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase float dy = getFloat(); 509ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase int color = getInt(); 510ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%s%s %.2f, %.2f, %.2f, 0x%x", (char*) indent, OP_NAMES[op], 511ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase radius, dx, dy, color); 512ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 513ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 514ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase default: 515ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("Display List error: op not handled: %s%s", 516ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase (char*) indent, OP_NAMES[op]); 517ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase break; 518ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 519ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase } 520ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 521ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase LOGD("%sDone", (char*) indent + 2); 522ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase} 523ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 524ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase/** 525ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * Changes to replay(), specifically those involving opcode or parameter changes, should be mimicked 526ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * in the output() function, since that function processes the same list of opcodes for the 527ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase * purposes of logging display list info for a given view. 528ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase */ 529cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guybool DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, uint32_t level) { 530daf98e941e140e8739458126640183b9f296a2abChet Haase bool needsInvalidate = false; 531b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy TextContainer text; 532b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mReader.rewind(); 533b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 534ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#if DEBUG_DISPLAY_LIST 535ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy uint32_t count = (level + 1) * 2; 536ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy char indent[count + 1]; 537ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy for (uint32_t i = 0; i < count; i++) { 538ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy indent[i] = ' '; 539ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy } 540ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy indent[count] = '\0'; 541ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy DISPLAY_LIST_LOGD("%sStart display list (%p)", (char*) indent + 2, this); 542ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#endif 543b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 5449c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase DisplayListLogBuffer& logBuffer = DisplayListLogBuffer::getInstance(); 545ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy int saveCount = renderer.getSaveCount() - 1; 546b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy while (!mReader.eof()) { 5475b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int op = mReader.readInt(); 5489c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase logBuffer.writeCommand(level, op); 549ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 5505b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy switch (op) { 551daf98e941e140e8739458126640183b9f296a2abChet Haase case DrawGLFunction: { 552daf98e941e140e8739458126640183b9f296a2abChet Haase Functor *functor = (Functor *) getInt(); 553daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], functor); 554cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy needsInvalidate |= renderer.callDrawGLFunction(functor, dirty); 555daf98e941e140e8739458126640183b9f296a2abChet Haase } 556daf98e941e140e8739458126640183b9f296a2abChet Haase break; 557b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Save: { 558daf98e941e140e8739458126640183b9f296a2abChet Haase int rendererNum = getInt(); 559daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, OP_NAMES[op], rendererNum); 560daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.save(rendererNum); 561b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 562b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 563b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Restore: { 564daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 565b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.restore(); 566b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 567b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 568b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case RestoreToCount: { 569daf98e941e140e8739458126640183b9f296a2abChet Haase int restoreCount = saveCount + getInt(); 570daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, OP_NAMES[op], restoreCount); 571daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.restoreToCount(restoreCount); 572b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 573b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 574b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SaveLayer: { 575daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 576daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 577daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 578daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 579daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 580daf98e941e140e8739458126640183b9f296a2abChet Haase int flags = getInt(); 581daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p, 0x%x", (char*) indent, 582daf98e941e140e8739458126640183b9f296a2abChet Haase OP_NAMES[op], f1, f2, f3, f4, paint, flags); 583daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.saveLayer(f1, f2, f3, f4, paint, flags); 584b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 585b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 5865b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy case SaveLayerAlpha: { 587daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 588daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 589daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 590daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 591daf98e941e140e8739458126640183b9f296a2abChet Haase int alpha = getInt(); 592daf98e941e140e8739458126640183b9f296a2abChet Haase int flags = getInt(); 593daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", (char*) indent, 594daf98e941e140e8739458126640183b9f296a2abChet Haase OP_NAMES[op], f1, f2, f3, f4, alpha, flags); 595daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.saveLayerAlpha(f1, f2, f3, f4, alpha, flags); 5965b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy } 5975b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy break; 598b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Translate: { 599daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 600daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 601daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], f1, f2); 602daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.translate(f1, f2); 603b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 604b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 605b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Rotate: { 606daf98e941e140e8739458126640183b9f296a2abChet Haase float rotation = getFloat(); 607daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f", (char*) indent, OP_NAMES[op], rotation); 608daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.rotate(rotation); 609b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 610b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 611b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Scale: { 612daf98e941e140e8739458126640183b9f296a2abChet Haase float sx = getFloat(); 613daf98e941e140e8739458126640183b9f296a2abChet Haase float sy = getFloat(); 614daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 615daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.scale(sx, sy); 616b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 617b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 618807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy case Skew: { 619daf98e941e140e8739458126640183b9f296a2abChet Haase float sx = getFloat(); 620daf98e941e140e8739458126640183b9f296a2abChet Haase float sy = getFloat(); 621daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 622daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.skew(sx, sy); 623807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy } 624807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy break; 625b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetMatrix: { 626daf98e941e140e8739458126640183b9f296a2abChet Haase SkMatrix* matrix = getMatrix(); 627daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], matrix); 628daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setMatrix(matrix); 629b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 630b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 631b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ConcatMatrix: { 632daf98e941e140e8739458126640183b9f296a2abChet Haase SkMatrix* matrix = getMatrix(); 633daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], matrix); 634daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.concatMatrix(matrix); 635b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 636b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 637b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ClipRect: { 638daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 639daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 640daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 641daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 642daf98e941e140e8739458126640183b9f296a2abChet Haase int regionOp = getInt(); 643daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d", (char*) indent, OP_NAMES[op], 644daf98e941e140e8739458126640183b9f296a2abChet Haase f1, f2, f3, f4, regionOp); 645daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.clipRect(f1, f2, f3, f4, (SkRegion::Op) regionOp); 646b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 647b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 6480fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy case DrawDisplayList: { 649daf98e941e140e8739458126640183b9f296a2abChet Haase DisplayList* displayList = getDisplayList(); 6507b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy uint32_t width = getUInt(); 6517b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy uint32_t height = getUInt(); 6527b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy DISPLAY_LIST_LOGD("%s%s %p, %dx%d, %d", (char*) indent, OP_NAMES[op], 6537b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy displayList, width, height, level + 1); 6547b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy needsInvalidate |= renderer.drawDisplayList(displayList, width, height, 6557b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy dirty, level + 1); 6560fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy } 6570fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy break; 6586c319ca1275c8db892c39b48fc54864c949f9171Romain Guy case DrawLayer: { 659daf98e941e140e8739458126640183b9f296a2abChet Haase Layer* layer = (Layer*) getInt(); 660daf98e941e140e8739458126640183b9f296a2abChet Haase float x = getFloat(); 661daf98e941e140e8739458126640183b9f296a2abChet Haase float y = getFloat(); 662daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 663daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 664daf98e941e140e8739458126640183b9f296a2abChet Haase layer, x, y, paint); 665daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawLayer(layer, x, y, paint); 6666c319ca1275c8db892c39b48fc54864c949f9171Romain Guy } 6676c319ca1275c8db892c39b48fc54864c949f9171Romain Guy break; 668b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmap: { 669daf98e941e140e8739458126640183b9f296a2abChet Haase SkBitmap* bitmap = getBitmap(); 670daf98e941e140e8739458126640183b9f296a2abChet Haase float x = getFloat(); 671daf98e941e140e8739458126640183b9f296a2abChet Haase float y = getFloat(); 672daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 673daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 674daf98e941e140e8739458126640183b9f296a2abChet Haase bitmap, x, y, paint); 675daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawBitmap(bitmap, x, y, paint); 676b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 677b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 678b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmapMatrix: { 679daf98e941e140e8739458126640183b9f296a2abChet Haase SkBitmap* bitmap = getBitmap(); 680daf98e941e140e8739458126640183b9f296a2abChet Haase SkMatrix* matrix = getMatrix(); 681daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 682daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %p, %p", (char*) indent, OP_NAMES[op], 683daf98e941e140e8739458126640183b9f296a2abChet Haase bitmap, matrix, paint); 684daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawBitmap(bitmap, matrix, paint); 685b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 686b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 687b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmapRect: { 688daf98e941e140e8739458126640183b9f296a2abChet Haase SkBitmap* bitmap = getBitmap(); 689daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 690daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 691daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 692daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 693daf98e941e140e8739458126640183b9f296a2abChet Haase float f5 = getFloat(); 694daf98e941e140e8739458126640183b9f296a2abChet Haase float f6 = getFloat(); 695daf98e941e140e8739458126640183b9f296a2abChet Haase float f7 = getFloat(); 696daf98e941e140e8739458126640183b9f296a2abChet Haase float f8 = getFloat(); 697daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 698daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 699daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op], bitmap, f1, f2, f3, f4, f5, f6, f7, f8, paint); 700daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawBitmap(bitmap, f1, f2, f3, f4, f5, f6, f7, f8, paint); 701b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 702b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 7035a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy case DrawBitmapMesh: { 7045a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy int verticesCount = 0; 7055a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t colorsCount = 0; 7065a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 7075a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy SkBitmap* bitmap = getBitmap(); 7085a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t meshWidth = getInt(); 7095a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t meshHeight = getInt(); 7105a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy float* vertices = getFloats(verticesCount); 7115a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy bool hasColors = getInt(); 7125a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy int* colors = hasColors ? getInts(colorsCount) : NULL; 7139ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy SkPaint* paint = getPaint(); 7145a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 715daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 7169ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy renderer.drawBitmapMesh(bitmap, meshWidth, meshHeight, vertices, colors, paint); 7175a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } 718a566b7c3aada08d37cf08096c972e3e641bed773Romain Guy break; 719b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawPatch: { 720b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int32_t* xDivs = NULL; 721b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int32_t* yDivs = NULL; 7224bb942083a0d4db746adf95349108dd8ef842e32Romain Guy uint32_t* colors = NULL; 723b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy uint32_t xDivsCount = 0; 724b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy uint32_t yDivsCount = 0; 7254bb942083a0d4db746adf95349108dd8ef842e32Romain Guy int8_t numColors = 0; 726b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 727b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkBitmap* bitmap = getBitmap(); 728b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 729b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy xDivs = getInts(xDivsCount); 730b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy yDivs = getInts(yDivsCount); 7314bb942083a0d4db746adf95349108dd8ef842e32Romain Guy colors = getUInts(numColors); 732b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 7339ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float left = getFloat(); 7349ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float top = getFloat(); 7359ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float right = getFloat(); 7369ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy float bottom = getFloat(); 7379ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy SkPaint* paint = getPaint(); 7389ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy 739daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 7404bb942083a0d4db746adf95349108dd8ef842e32Romain Guy renderer.drawPatch(bitmap, xDivs, yDivs, colors, xDivsCount, yDivsCount, 7419ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy numColors, left, top, right, bottom, paint); 742b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 743b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 744b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawColor: { 745daf98e941e140e8739458126640183b9f296a2abChet Haase int color = getInt(); 746daf98e941e140e8739458126640183b9f296a2abChet Haase int xferMode = getInt(); 747daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s 0x%x %d", (char*) indent, OP_NAMES[op], color, xferMode); 748daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawColor(color, (SkXfermode::Mode) xferMode); 749b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 750b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 751b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawRect: { 752daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 753daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 754daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 755daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 756daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 757daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 758daf98e941e140e8739458126640183b9f296a2abChet Haase f1, f2, f3, f4, paint); 759daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawRect(f1, f2, f3, f4, paint); 760b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 761b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 76201d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy case DrawRoundRect: { 763daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 764daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 765daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 766daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 767daf98e941e140e8739458126640183b9f296a2abChet Haase float f5 = getFloat(); 768daf98e941e140e8739458126640183b9f296a2abChet Haase float f6 = getFloat(); 769daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 770daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 771daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, paint); 772daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawRoundRect(f1, f2, f3, f4, f5, f6, paint); 77301d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy } 77401d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy break; 77501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy case DrawCircle: { 776daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 777daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 778daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 779daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 780daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %p", 781daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, paint); 782daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawCircle(f1, f2, f3, paint); 78301d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy } 78401d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy break; 785c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy case DrawOval: { 786daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 787daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 788daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 789daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 790daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 791daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", 792daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, paint); 793daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawOval(f1, f2, f3, f4, paint); 794c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy } 795c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy break; 7968b2f5267f16c295f12faab810527cd6311997e34Romain Guy case DrawArc: { 797daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 798daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 799daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 800daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 801daf98e941e140e8739458126640183b9f296a2abChet Haase float f5 = getFloat(); 802daf98e941e140e8739458126640183b9f296a2abChet Haase float f6 = getFloat(); 803daf98e941e140e8739458126640183b9f296a2abChet Haase int i1 = getInt(); 804daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 805daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %d, %p", 806daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, i1, paint); 807daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawArc(f1, f2, f3, f4, f5, f6, i1 == 1, paint); 8088b2f5267f16c295f12faab810527cd6311997e34Romain Guy } 8098b2f5267f16c295f12faab810527cd6311997e34Romain Guy break; 810b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawPath: { 811daf98e941e140e8739458126640183b9f296a2abChet Haase SkPath* path = getPath(); 812daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 813daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %p", (char*) indent, OP_NAMES[op], path, paint); 814daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawPath(path, paint); 815b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 816b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 817b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawLines: { 818b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int count = 0; 819b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy float* points = getFloats(count); 8209ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy SkPaint* paint = getPaint(); 821daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 8229ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy renderer.drawLines(points, count, paint); 823b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 824b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 825ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy case DrawPoints: { 826ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy int count = 0; 827ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy float* points = getFloats(count); 8289ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy SkPaint* paint = getPaint(); 829ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 8309ff3cb57ee46ac5242a7d8f08e0c66189fda2e66Romain Guy renderer.drawPoints(points, count, paint); 831ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy } 832ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy break; 833b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawText: { 834b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy getText(&text); 835daf98e941e140e8739458126640183b9f296a2abChet Haase int count = getInt(); 836daf98e941e140e8739458126640183b9f296a2abChet Haase float x = getFloat(); 837daf98e941e140e8739458126640183b9f296a2abChet Haase float y = getFloat(); 838daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 839daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 840daf98e941e140e8739458126640183b9f296a2abChet Haase text.text(), text.length(), count, x, y, paint); 841daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawText(text.text(), text.length(), count, x, y, paint); 842b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 843b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 844b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetShader: { 845daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 846b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetShader(); 847b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 848b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 849b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupShader: { 850daf98e941e140e8739458126640183b9f296a2abChet Haase SkiaShader* shader = getShader(); 851daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], shader); 852daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setupShader(shader); 853b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 854b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 855b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetColorFilter: { 856daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 857b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetColorFilter(); 858b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 859b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 860b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupColorFilter: { 861daf98e941e140e8739458126640183b9f296a2abChet Haase SkiaColorFilter *colorFilter = getColorFilter(); 862daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], colorFilter); 863daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setupColorFilter(colorFilter); 864b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 865b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 866b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetShadow: { 867daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 868b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetShadow(); 869b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 870b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 871b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupShadow: { 872daf98e941e140e8739458126640183b9f296a2abChet Haase float radius = getFloat(); 873daf98e941e140e8739458126640183b9f296a2abChet Haase float dx = getFloat(); 874daf98e941e140e8739458126640183b9f296a2abChet Haase float dy = getFloat(); 875daf98e941e140e8739458126640183b9f296a2abChet Haase int color = getInt(); 876daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, 0x%x", (char*) indent, OP_NAMES[op], 877daf98e941e140e8739458126640183b9f296a2abChet Haase radius, dx, dy, color); 878daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setupShadow(radius, dx, dy, color); 879daf98e941e140e8739458126640183b9f296a2abChet Haase } 880daf98e941e140e8739458126640183b9f296a2abChet Haase break; 881daf98e941e140e8739458126640183b9f296a2abChet Haase default: 882daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("Display List error: op not handled: %s%s", 883daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op]); 884daf98e941e140e8739458126640183b9f296a2abChet Haase break; 885b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 886b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 887ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 888daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%sDone, returning %d", (char*) indent + 2, needsInvalidate); 889daf98e941e140e8739458126640183b9f296a2abChet Haase return needsInvalidate; 890b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 891b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 892b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/////////////////////////////////////////////////////////////////////////////// 8934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Base structure 8944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 8954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 89604c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain GuyDisplayListRenderer::DisplayListRenderer(): mWriter(MIN_WRITER_SIZE), mHasDrawOps(false) { 8974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 8984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 8994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain GuyDisplayListRenderer::~DisplayListRenderer() { 9004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy reset(); 9014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 9024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 9034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::reset() { 9044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.reset(); 9055c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 9065c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Caches& caches = Caches::getInstance(); 9075c13d89c1332fcc499379b9064b891187b75ca32Chet Haase for (size_t i = 0; i < mBitmapResources.size(); i++) { 908d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.decrementRefcount(mBitmapResources.itemAt(i)); 9095c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 9105c13d89c1332fcc499379b9064b891187b75ca32Chet Haase mBitmapResources.clear(); 911d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 912d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy for (size_t i = 0; i < mFilterResources.size(); i++) { 913d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.decrementRefcount(mFilterResources.itemAt(i)); 914d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy } 915d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy mFilterResources.clear(); 916d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 91743ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy for (size_t i = 0; i < mShaders.size(); i++) { 918d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy caches.resourceCache.decrementRefcount(mShaders.itemAt(i)); 91943ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy } 92024c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaders.clear(); 92124c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaderMap.clear(); 92243ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy 92343ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy mPaints.clear(); 92443ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy mPaintMap.clear(); 925d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 9262fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPaths.clear(); 9272fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPathMap.clear(); 928d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy 929d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mMatrices.clear(); 93004c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy 93104c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy mHasDrawOps = false; 9324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 9334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 9344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 9354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Operations 9364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 9374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 938162a0217563f4665da6eb183dfce0fef740f641fJeff BrownDisplayList* DisplayListRenderer::getDisplayList(DisplayList* displayList) { 939162a0217563f4665da6eb183dfce0fef740f641fJeff Brown if (!displayList) { 940162a0217563f4665da6eb183dfce0fef740f641fJeff Brown displayList = new DisplayList(*this); 9415977baa1fa24125c148a72699b53e62abaf08960Chet Haase } else { 942162a0217563f4665da6eb183dfce0fef740f641fJeff Brown displayList->initFromDisplayListRenderer(*this, true); 9435977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 94404c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy displayList->setRenderable(mHasDrawOps); 945162a0217563f4665da6eb183dfce0fef740f641fJeff Brown return displayList; 9465977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 9475977baa1fa24125c148a72699b53e62abaf08960Chet Haase 948b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyvoid DisplayListRenderer::setViewport(int width, int height) { 949b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mOrthoMatrix.loadOrtho(0, width, height, 0, -1, 1); 950b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 951b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mWidth = width; 952b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mHeight = height; 953b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 954b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 9557d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guyvoid DisplayListRenderer::prepareDirty(float left, float top, 9567d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy float right, float bottom, bool opaque) { 957b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSnapshot = new Snapshot(mFirstSnapshot, 958b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); 959b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSaveCount = 1; 960b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSnapshot->setClip(0.0f, 0.0f, mWidth, mHeight); 96127454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mRestoreSaveCount = -1; 96227454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy} 96327454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy 96427454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guyvoid DisplayListRenderer::finish() { 96527454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy insertRestoreToCount(); 96627454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy OpenGLRenderer::finish(); 967b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 968b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 969daf98e941e140e8739458126640183b9f296a2abChet Haasevoid DisplayListRenderer::interrupt() { 970daf98e941e140e8739458126640183b9f296a2abChet Haase} 971daf98e941e140e8739458126640183b9f296a2abChet Haase 9722b1847ea60650a9f68372abe860415f18b55081dRomain Guyvoid DisplayListRenderer::resume() { 9734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 9744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 975cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guybool DisplayListRenderer::callDrawGLFunction(Functor *functor, Rect& dirty) { 976cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy // Ignore dirty during recording, it matters only when we replay 977daf98e941e140e8739458126640183b9f296a2abChet Haase addOp(DisplayList::DrawGLFunction); 978daf98e941e140e8739458126640183b9f296a2abChet Haase addInt((int) functor); 979daf98e941e140e8739458126640183b9f296a2abChet Haase return false; // No invalidate needed at record-time 980daf98e941e140e8739458126640183b9f296a2abChet Haase} 981daf98e941e140e8739458126640183b9f296a2abChet Haase 9824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::save(int flags) { 983b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Save); 9844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(flags); 9854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return OpenGLRenderer::save(flags); 9864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 9874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 9884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restore() { 98904c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy if (mRestoreSaveCount < 0) { 99004c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy addOp(DisplayList::Restore); 99104c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy } else { 99204c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy mRestoreSaveCount--; 99304c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy } 9944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::restore(); 9954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 9964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 9974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restoreToCount(int saveCount) { 99827454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mRestoreSaveCount = saveCount; 9994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::restoreToCount(saveCount); 10004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 10024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::saveLayer(float left, float top, float right, float bottom, 10035c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* p, int flags) { 1004b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SaveLayer); 10054aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 10064aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(p); 10074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(flags); 1008b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return OpenGLRenderer::save(flags); 10094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 10115b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guyint DisplayListRenderer::saveLayerAlpha(float left, float top, float right, float bottom, 10125b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int alpha, int flags) { 10135b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addOp(DisplayList::SaveLayerAlpha); 10145b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addBounds(left, top, right, bottom); 10155b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addInt(alpha); 10165b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addInt(flags); 10175b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy return OpenGLRenderer::save(flags); 10185b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy} 10195b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy 10204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::translate(float dx, float dy) { 1021b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Translate); 10224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(dx, dy); 10234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::translate(dx, dy); 10244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 10264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::rotate(float degrees) { 1027b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Rotate); 10284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloat(degrees); 10294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::rotate(degrees); 10304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 10324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::scale(float sx, float sy) { 1033b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Scale); 10344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(sx, sy); 10354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::scale(sx, sy); 10364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1038807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guyvoid DisplayListRenderer::skew(float sx, float sy) { 1039807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy addOp(DisplayList::Skew); 1040807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy addPoint(sx, sy); 1041807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy OpenGLRenderer::skew(sx, sy); 1042807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy} 1043807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy 10444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setMatrix(SkMatrix* matrix) { 1045b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SetMatrix); 10464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 10474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::setMatrix(matrix); 10484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 10504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::concatMatrix(SkMatrix* matrix) { 1051b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ConcatMatrix); 10524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 10534aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::concatMatrix(matrix); 10544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 10564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guybool DisplayListRenderer::clipRect(float left, float top, float right, float bottom, 10574aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkRegion::Op op) { 1058b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ClipRect); 10594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 10604aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(op); 10614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return OpenGLRenderer::clipRect(left, top, right, bottom, op); 10624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 10647b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guybool DisplayListRenderer::drawDisplayList(DisplayList* displayList, 10657b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy uint32_t width, uint32_t height, Rect& dirty, uint32_t level) { 1066cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy // dirty is an out parameter and should not be recorded, 1067cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy // it matters only when replaying the display list 10680fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addOp(DisplayList::DrawDisplayList); 10690fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addDisplayList(displayList); 10707b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy addSize(width, height); 1071daf98e941e140e8739458126640183b9f296a2abChet Haase return false; 10720fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy} 10730fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy 1074ada830f639591b99c3e40de22b07296c7932a33fRomain Guyvoid DisplayListRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* paint) { 10756c319ca1275c8db892c39b48fc54864c949f9171Romain Guy addOp(DisplayList::DrawLayer); 1076ada830f639591b99c3e40de22b07296c7932a33fRomain Guy addInt((int) layer); 1077ada830f639591b99c3e40de22b07296c7932a33fRomain Guy addPoint(x, y); 10786c319ca1275c8db892c39b48fc54864c949f9171Romain Guy addPaint(paint); 10796c319ca1275c8db892c39b48fc54864c949f9171Romain Guy} 10806c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 10814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float left, float top, 10825c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 1083b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawBitmap); 10844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 10854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(left, top); 10864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 10874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 10895c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, 10905c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 1091b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawBitmapMatrix); 10924aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 10934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 10944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 10954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 10964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 10974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop, 10984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float srcRight, float srcBottom, float dstLeft, float dstTop, 10995c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float dstRight, float dstBottom, SkPaint* paint) { 1100b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawBitmapRect); 11014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 11024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(srcLeft, srcTop, srcRight, srcBottom); 11034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(dstLeft, dstTop, dstRight, dstBottom); 11044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 11054aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 11064aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 11075a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guyvoid DisplayListRenderer::drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight, 11085a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy float* vertices, int* colors, SkPaint* paint) { 11095a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addOp(DisplayList::DrawBitmapMesh); 11105a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addBitmap(bitmap); 11115a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(meshWidth); 11125a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(meshHeight); 11135a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addFloats(vertices, (meshWidth + 1) * (meshHeight + 1) * 2); 11145a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy if (colors) { 11155a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(1); 11165a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInts(colors, (meshWidth + 1) * (meshHeight + 1)); 11175a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } else { 11185a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(0); 11195a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } 11205a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addPaint(paint); 11215a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy} 11225a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 11234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int32_t* yDivs, 11244bb942083a0d4db746adf95349108dd8ef842e32Romain Guy const uint32_t* colors, uint32_t width, uint32_t height, int8_t numColors, 11255c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float left, float top, float right, float bottom, SkPaint* paint) { 1126b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawPatch); 11274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 11284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInts(xDivs, width); 11294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInts(yDivs, height); 11304bb942083a0d4db746adf95349108dd8ef842e32Romain Guy addUInts(colors, numColors); 11314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 11324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 11334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 11344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 11354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawColor(int color, SkXfermode::Mode mode) { 1136b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawColor); 11374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(color); 11384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(mode); 11394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 11404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 11414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawRect(float left, float top, float right, float bottom, 11425c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 1143b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawRect); 11444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 11454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 11464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 11474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 114801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guyvoid DisplayListRenderer::drawRoundRect(float left, float top, float right, float bottom, 114901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy float rx, float ry, SkPaint* paint) { 115001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addOp(DisplayList::DrawRoundRect); 115101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addBounds(left, top, right, bottom); 115201d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPoint(rx, ry); 115301d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPaint(paint); 115401d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy} 115501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy 115601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guyvoid DisplayListRenderer::drawCircle(float x, float y, float radius, SkPaint* paint) { 115701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addOp(DisplayList::DrawCircle); 115801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPoint(x, y); 115901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addFloat(radius); 116001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPaint(paint); 116101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy} 116201d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy 1163c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guyvoid DisplayListRenderer::drawOval(float left, float top, float right, float bottom, 1164c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy SkPaint* paint) { 1165c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addOp(DisplayList::DrawOval); 1166c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addBounds(left, top, right, bottom); 1167c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addPaint(paint); 1168c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy} 1169c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy 11708b2f5267f16c295f12faab810527cd6311997e34Romain Guyvoid DisplayListRenderer::drawArc(float left, float top, float right, float bottom, 11718b2f5267f16c295f12faab810527cd6311997e34Romain Guy float startAngle, float sweepAngle, bool useCenter, SkPaint* paint) { 117282d41a515368236e56454bd84023bebd6306f6b7Romain Guy addOp(DisplayList::DrawArc); 11738b2f5267f16c295f12faab810527cd6311997e34Romain Guy addBounds(left, top, right, bottom); 11748b2f5267f16c295f12faab810527cd6311997e34Romain Guy addPoint(startAngle, sweepAngle); 11758b2f5267f16c295f12faab810527cd6311997e34Romain Guy addInt(useCenter ? 1 : 0); 11768b2f5267f16c295f12faab810527cd6311997e34Romain Guy addPaint(paint); 11778b2f5267f16c295f12faab810527cd6311997e34Romain Guy} 11788b2f5267f16c295f12faab810527cd6311997e34Romain Guy 11794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawPath(SkPath* path, SkPaint* paint) { 1180b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawPath); 11814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPath(path); 11824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 11834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 11844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 11855c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid DisplayListRenderer::drawLines(float* points, int count, SkPaint* paint) { 1186b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawLines); 11874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloats(points, count); 11884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 1189ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy} 1190ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy 1191ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guyvoid DisplayListRenderer::drawPoints(float* points, int count, SkPaint* paint) { 1192ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy addOp(DisplayList::DrawPoints); 1193ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy addFloats(points, count); 1194ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy addPaint(paint); 11954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 11964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 11974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawText(const char* text, int bytesCount, int count, 11984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float x, float y, SkPaint* paint) { 1199726aeba80ffc6778a9bc3e0ee957b8d644183505Romain Guy if (count <= 0) return; 1200b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawText); 12014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addText(text, bytesCount); 12024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(count); 12034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(x, y); 12044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 12054aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 12064aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 12074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShader() { 1208b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetShader); 12094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 12104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 12114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShader(SkiaShader* shader) { 12125c13d89c1332fcc499379b9064b891187b75ca32Chet Haase addOp(DisplayList::SetupShader); 12135c13d89c1332fcc499379b9064b891187b75ca32Chet Haase addShader(shader); 12144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 12154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 12164aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetColorFilter() { 1217b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetColorFilter); 12184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 12194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 12204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupColorFilter(SkiaColorFilter* filter) { 1221ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase addOp(DisplayList::SetupColorFilter); 1222ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase addColorFilter(filter); 12234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 12244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 12254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShadow() { 1226b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetShadow); 12274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 12284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 12294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShadow(float radius, float dx, float dy, int color) { 1230b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SetupShadow); 12314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloat(radius); 12324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(dx, dy); 12334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(color); 12344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 12354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 12364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace uirenderer 12374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace android 1238