DisplayListRenderer.cpp revision 2b1847ea60650a9f68372abe860415f18b55081d
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 194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include "DisplayListRenderer.h" 204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guynamespace android { 224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guynamespace uirenderer { 234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 257975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy// Defines 267975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy/////////////////////////////////////////////////////////////////////////////// 277975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy 287975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy#define PATH_HEAP_SIZE 64 297975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy 307975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy/////////////////////////////////////////////////////////////////////////////// 317975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy// Helpers 327975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy/////////////////////////////////////////////////////////////////////////////// 337975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy 347975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain GuyPathHeap::PathHeap(): mHeap(PATH_HEAP_SIZE * sizeof(SkPath)) { 357975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy} 367975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy 377975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain GuyPathHeap::PathHeap(SkFlattenableReadBuffer& buffer): mHeap(PATH_HEAP_SIZE * sizeof(SkPath)) { 387975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy int count = buffer.readS32(); 397975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy 407975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy mPaths.setCount(count); 417975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy SkPath** ptr = mPaths.begin(); 427975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy SkPath* p = (SkPath*) mHeap.allocThrow(count * sizeof(SkPath)); 437975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy 447975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy for (int i = 0; i < count; i++) { 457975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy new (p) SkPath; 467975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy p->unflatten(buffer); 477975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy *ptr++ = p; 487975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy p++; 497975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy } 507975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy} 517975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy 527975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain GuyPathHeap::~PathHeap() { 537975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy SkPath** iter = mPaths.begin(); 547975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy SkPath** stop = mPaths.end(); 557975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy while (iter < stop) { 567975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy (*iter)->~SkPath(); 577975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy iter++; 587975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy } 597975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy} 607975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy 617975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guyint PathHeap::append(const SkPath& path) { 627975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy SkPath* p = (SkPath*) mHeap.allocThrow(sizeof(SkPath)); 637975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy new (p) SkPath(path); 647975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy *mPaths.append() = p; 657975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy return mPaths.count(); 667975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy} 677975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy 687975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guyvoid PathHeap::flatten(SkFlattenableWriteBuffer& buffer) const { 697975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy int count = mPaths.count(); 707975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy 717975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy buffer.write32(count); 727975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy SkPath** iter = mPaths.begin(); 737975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy SkPath** stop = mPaths.end(); 747975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy while (iter < stop) { 757975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy (*iter)->flatten(buffer); 767975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy iter++; 777975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy } 787975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy} 797975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy 807975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy/////////////////////////////////////////////////////////////////////////////// 81b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy// Display list 82b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/////////////////////////////////////////////////////////////////////////////// 83b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 84ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guyconst char* DisplayList::OP_NAMES[] = { 85ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Save", 86ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Restore", 87ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "RestoreToCount", 88ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SaveLayer", 89ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SaveLayerAlpha", 90ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Translate", 91ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Rotate", 92ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Scale", 934cf6e2f34994f160e1baba205a43c12784dd3e0dRomain Guy "Skew", 94ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetMatrix", 95ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ConcatMatrix", 96ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ClipRect", 97ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawDisplayList", 98ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawLayer", 99ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawBitmap", 100ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawBitmapMatrix", 101ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawBitmapRect", 1025a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy "DrawBitmapMesh", 103ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawPatch", 104ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawColor", 105ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawRect", 10601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy "DrawRoundRect", 10701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy "DrawCircle", 108c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy "DrawOval", 1098b2f5267f16c295f12faab810527cd6311997e34Romain Guy "DrawArc", 110ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawPath", 111ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawLines", 112ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawText", 113ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ResetShader", 114ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetupShader", 115ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ResetColorFilter", 116ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetupColorFilter", 117ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ResetShadow", 118daf98e941e140e8739458126640183b9f296a2abChet Haase "SetupShadow", 119daf98e941e140e8739458126640183b9f296a2abChet Haase "DrawGLFunction" 120ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy}; 121ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 122b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain GuyDisplayList::DisplayList(const DisplayListRenderer& recorder) { 1235977baa1fa24125c148a72699b53e62abaf08960Chet Haase initFromDisplayListRenderer(recorder); 1245977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 1255977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1265977baa1fa24125c148a72699b53e62abaf08960Chet HaaseDisplayList::~DisplayList() { 1275977baa1fa24125c148a72699b53e62abaf08960Chet Haase sk_free((void*) mReader.base()); 1285977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1295977baa1fa24125c148a72699b53e62abaf08960Chet Haase Caches& caches = Caches::getInstance(); 1305977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1315977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mBitmapResources.size(); i++) { 1325977baa1fa24125c148a72699b53e62abaf08960Chet Haase caches.resourceCache.decrementRefcount(mBitmapResources.itemAt(i)); 1335977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1345977baa1fa24125c148a72699b53e62abaf08960Chet Haase mBitmapResources.clear(); 1355977baa1fa24125c148a72699b53e62abaf08960Chet Haase 13624c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy for (size_t i = 0; i < mShaders.size(); i++) { 13743ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy caches.resourceCache.decrementRefcount(mShaders.itemAt(i)); 1385977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 13924c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaders.clear(); 1405977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1415977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mPaints.size(); i++) { 1425977baa1fa24125c148a72699b53e62abaf08960Chet Haase delete mPaints.itemAt(i); 1435977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1445977baa1fa24125c148a72699b53e62abaf08960Chet Haase mPaints.clear(); 1455977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1465977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mMatrices.size(); i++) { 1475977baa1fa24125c148a72699b53e62abaf08960Chet Haase delete mMatrices.itemAt(i); 1485977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1495977baa1fa24125c148a72699b53e62abaf08960Chet Haase mMatrices.clear(); 1505977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1515977baa1fa24125c148a72699b53e62abaf08960Chet Haase if (mPathHeap) { 1525977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (int i = 0; i < mPathHeap->count(); i++) { 1535977baa1fa24125c148a72699b53e62abaf08960Chet Haase caches.pathCache.removeDeferred(&(*mPathHeap)[i]); 1545977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1555977baa1fa24125c148a72699b53e62abaf08960Chet Haase mPathHeap->safeUnref(); 1565977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1575977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 1585977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1595977baa1fa24125c148a72699b53e62abaf08960Chet Haasevoid DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorder) { 160b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy const SkWriter32& writer = recorder.writeStream(); 161b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy init(); 162b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 163b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy if (writer.size() == 0) { 164b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return; 165b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 166b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 167b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy size_t size = writer.size(); 168b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy void* buffer = sk_malloc_throw(size); 169b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy writer.flatten(buffer); 170b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mReader.setMemory(buffer, size); 171b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 172b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mRCPlayback.reset(&recorder.mRCRecorder); 173b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mRCPlayback.setupBuffer(mReader); 174b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 175b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mTFPlayback.reset(&recorder.mTFRecorder); 176b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mTFPlayback.setupBuffer(mReader); 177b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1785c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Caches& caches = Caches::getInstance(); 179b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1805c13d89c1332fcc499379b9064b891187b75ca32Chet Haase const Vector<SkBitmap*> &bitmapResources = recorder.getBitmapResources(); 1815c13d89c1332fcc499379b9064b891187b75ca32Chet Haase for (size_t i = 0; i < bitmapResources.size(); i++) { 1825c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkBitmap* resource = bitmapResources.itemAt(i); 1835c13d89c1332fcc499379b9064b891187b75ca32Chet Haase mBitmapResources.add(resource); 1845c13d89c1332fcc499379b9064b891187b75ca32Chet Haase caches.resourceCache.incrementRefcount(resource); 185b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 186d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 18724c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy const Vector<SkiaShader*> &shaders = recorder.getShaders(); 18824c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy for (size_t i = 0; i < shaders.size(); i++) { 18943ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy SkiaShader* shader = shaders.itemAt(i); 19043ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy mShaders.add(shader); 19143ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy caches.resourceCache.incrementRefcount(shader); 192b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 193b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 194d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase const Vector<SkPaint*> &paints = recorder.getPaints(); 195d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase for (size_t i = 0; i < paints.size(); i++) { 196d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mPaints.add(paints.itemAt(i)); 197d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase } 198d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 199d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase const Vector<SkMatrix*> &matrices = recorder.getMatrices(); 200d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase for (size_t i = 0; i < matrices.size(); i++) { 201d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mMatrices.add(matrices.itemAt(i)); 202d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase } 203d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 204b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mPathHeap = recorder.mPathHeap; 2059e10841c27d973b930e1b49a099c69d866659505Romain Guy if (mPathHeap) { 2069e10841c27d973b930e1b49a099c69d866659505Romain Guy mPathHeap->safeRef(); 2079e10841c27d973b930e1b49a099c69d866659505Romain Guy } 208b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 209b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 210b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyvoid DisplayList::init() { 211b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mPathHeap = NULL; 212b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 213b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 214daf98e941e140e8739458126640183b9f296a2abChet Haasebool DisplayList::replay(OpenGLRenderer& renderer, uint32_t level) { 215daf98e941e140e8739458126640183b9f296a2abChet Haase bool needsInvalidate = false; 216b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy TextContainer text; 217b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mReader.rewind(); 218b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 219ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#if DEBUG_DISPLAY_LIST 220ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy uint32_t count = (level + 1) * 2; 221ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy char indent[count + 1]; 222ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy for (uint32_t i = 0; i < count; i++) { 223ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy indent[i] = ' '; 224ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy } 225ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy indent[count] = '\0'; 226ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy DISPLAY_LIST_LOGD("%sStart display list (%p)", (char*) indent + 2, this); 227ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#endif 228b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 229ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy int saveCount = renderer.getSaveCount() - 1; 230b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy while (!mReader.eof()) { 2315b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int op = mReader.readInt(); 232ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 2335b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy switch (op) { 234daf98e941e140e8739458126640183b9f296a2abChet Haase case DrawGLFunction: { 235daf98e941e140e8739458126640183b9f296a2abChet Haase Functor *functor = (Functor *) getInt(); 236daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], functor); 237daf98e941e140e8739458126640183b9f296a2abChet Haase needsInvalidate |= renderer.callDrawGLFunction(functor); 238daf98e941e140e8739458126640183b9f296a2abChet Haase } 239daf98e941e140e8739458126640183b9f296a2abChet Haase break; 240b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Save: { 241daf98e941e140e8739458126640183b9f296a2abChet Haase int rendererNum = getInt(); 242daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, OP_NAMES[op], rendererNum); 243daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.save(rendererNum); 244b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 245b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 246b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Restore: { 247daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 248b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.restore(); 249b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 250b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 251b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case RestoreToCount: { 252daf98e941e140e8739458126640183b9f296a2abChet Haase int restoreCount = saveCount + getInt(); 253daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, OP_NAMES[op], restoreCount); 254daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.restoreToCount(restoreCount); 255b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 256b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 257b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SaveLayer: { 258daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 259daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 260daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 261daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 262daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 263daf98e941e140e8739458126640183b9f296a2abChet Haase int flags = getInt(); 264daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p, 0x%x", (char*) indent, 265daf98e941e140e8739458126640183b9f296a2abChet Haase OP_NAMES[op], f1, f2, f3, f4, paint, flags); 266daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.saveLayer(f1, f2, f3, f4, paint, flags); 267b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 268b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 2695b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy case SaveLayerAlpha: { 270daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 271daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 272daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 273daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 274daf98e941e140e8739458126640183b9f296a2abChet Haase int alpha = getInt(); 275daf98e941e140e8739458126640183b9f296a2abChet Haase int flags = getInt(); 276daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", (char*) indent, 277daf98e941e140e8739458126640183b9f296a2abChet Haase OP_NAMES[op], f1, f2, f3, f4, alpha, flags); 278daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.saveLayerAlpha(f1, f2, f3, f4, alpha, flags); 2795b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy } 2805b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy break; 281b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Translate: { 282daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 283daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 284daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], f1, f2); 285daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.translate(f1, f2); 286b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 287b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 288b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Rotate: { 289daf98e941e140e8739458126640183b9f296a2abChet Haase float rotation = getFloat(); 290daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f", (char*) indent, OP_NAMES[op], rotation); 291daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.rotate(rotation); 292b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 293b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 294b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Scale: { 295daf98e941e140e8739458126640183b9f296a2abChet Haase float sx = getFloat(); 296daf98e941e140e8739458126640183b9f296a2abChet Haase float sy = getFloat(); 297daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 298daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.scale(sx, sy); 299b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 300b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 301807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy case Skew: { 302daf98e941e140e8739458126640183b9f296a2abChet Haase float sx = getFloat(); 303daf98e941e140e8739458126640183b9f296a2abChet Haase float sy = getFloat(); 304daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 305daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.skew(sx, sy); 306807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy } 307807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy break; 308b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetMatrix: { 309daf98e941e140e8739458126640183b9f296a2abChet Haase SkMatrix* matrix = getMatrix(); 310daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], matrix); 311daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setMatrix(matrix); 312b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 313b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 314b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ConcatMatrix: { 315daf98e941e140e8739458126640183b9f296a2abChet Haase SkMatrix* matrix = getMatrix(); 316daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], matrix); 317daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.concatMatrix(matrix); 318b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 319b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 320b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ClipRect: { 321daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 322daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 323daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 324daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 325daf98e941e140e8739458126640183b9f296a2abChet Haase int regionOp = getInt(); 326daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d", (char*) indent, OP_NAMES[op], 327daf98e941e140e8739458126640183b9f296a2abChet Haase f1, f2, f3, f4, regionOp); 328daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.clipRect(f1, f2, f3, f4, (SkRegion::Op) regionOp); 329b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 330b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 3310fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy case DrawDisplayList: { 332daf98e941e140e8739458126640183b9f296a2abChet Haase DisplayList* displayList = getDisplayList(); 333daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %d", (char*) indent, OP_NAMES[op], 334daf98e941e140e8739458126640183b9f296a2abChet Haase displayList, level + 1); 335daf98e941e140e8739458126640183b9f296a2abChet Haase needsInvalidate |= renderer.drawDisplayList(displayList, level + 1); 3360fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy } 3370fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy break; 3386c319ca1275c8db892c39b48fc54864c949f9171Romain Guy case DrawLayer: { 339daf98e941e140e8739458126640183b9f296a2abChet Haase Layer* layer = (Layer*) getInt(); 340daf98e941e140e8739458126640183b9f296a2abChet Haase float x = getFloat(); 341daf98e941e140e8739458126640183b9f296a2abChet Haase float y = getFloat(); 342daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 343daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 344daf98e941e140e8739458126640183b9f296a2abChet Haase layer, x, y, paint); 345daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawLayer(layer, x, y, paint); 3466c319ca1275c8db892c39b48fc54864c949f9171Romain Guy } 3476c319ca1275c8db892c39b48fc54864c949f9171Romain Guy break; 348b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmap: { 349daf98e941e140e8739458126640183b9f296a2abChet Haase SkBitmap* bitmap = getBitmap(); 350daf98e941e140e8739458126640183b9f296a2abChet Haase float x = getFloat(); 351daf98e941e140e8739458126640183b9f296a2abChet Haase float y = getFloat(); 352daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 353daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 354daf98e941e140e8739458126640183b9f296a2abChet Haase bitmap, x, y, paint); 355daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawBitmap(bitmap, x, y, paint); 356b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 357b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 358b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmapMatrix: { 359daf98e941e140e8739458126640183b9f296a2abChet Haase SkBitmap* bitmap = getBitmap(); 360daf98e941e140e8739458126640183b9f296a2abChet Haase SkMatrix* matrix = getMatrix(); 361daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 362daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %p, %p", (char*) indent, OP_NAMES[op], 363daf98e941e140e8739458126640183b9f296a2abChet Haase bitmap, matrix, paint); 364daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawBitmap(bitmap, matrix, paint); 365b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 366b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 367b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmapRect: { 368daf98e941e140e8739458126640183b9f296a2abChet Haase SkBitmap* bitmap = getBitmap(); 369daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 370daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 371daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 372daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 373daf98e941e140e8739458126640183b9f296a2abChet Haase float f5 = getFloat(); 374daf98e941e140e8739458126640183b9f296a2abChet Haase float f6 = getFloat(); 375daf98e941e140e8739458126640183b9f296a2abChet Haase float f7 = getFloat(); 376daf98e941e140e8739458126640183b9f296a2abChet Haase float f8 = getFloat(); 377daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 378daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 379daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op], bitmap, f1, f2, f3, f4, f5, f6, f7, f8, paint); 380daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawBitmap(bitmap, f1, f2, f3, f4, f5, f6, f7, f8, paint); 381b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 382b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 3835a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy case DrawBitmapMesh: { 3845a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy int verticesCount = 0; 3855a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t colorsCount = 0; 3865a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 3875a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy SkBitmap* bitmap = getBitmap(); 3885a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t meshWidth = getInt(); 3895a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t meshHeight = getInt(); 3905a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy float* vertices = getFloats(verticesCount); 3915a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy bool hasColors = getInt(); 3925a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy int* colors = hasColors ? getInts(colorsCount) : NULL; 3935a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 394daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 3955a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy renderer.drawBitmapMesh(bitmap, meshWidth, meshHeight, vertices, colors, getPaint()); 3965a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } 397a566b7c3aada08d37cf08096c972e3e641bed773Romain Guy break; 398b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawPatch: { 399b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int32_t* xDivs = NULL; 400b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int32_t* yDivs = NULL; 4014bb942083a0d4db746adf95349108dd8ef842e32Romain Guy uint32_t* colors = NULL; 402b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy uint32_t xDivsCount = 0; 403b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy uint32_t yDivsCount = 0; 4044bb942083a0d4db746adf95349108dd8ef842e32Romain Guy int8_t numColors = 0; 405b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 406b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkBitmap* bitmap = getBitmap(); 407b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 408b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy xDivs = getInts(xDivsCount); 409b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy yDivs = getInts(yDivsCount); 4104bb942083a0d4db746adf95349108dd8ef842e32Romain Guy colors = getUInts(numColors); 411b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 412daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 4134bb942083a0d4db746adf95349108dd8ef842e32Romain Guy renderer.drawPatch(bitmap, xDivs, yDivs, colors, xDivsCount, yDivsCount, 4144bb942083a0d4db746adf95349108dd8ef842e32Romain Guy numColors, getFloat(), getFloat(), getFloat(), getFloat(), getPaint()); 415b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 416b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 417b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawColor: { 418daf98e941e140e8739458126640183b9f296a2abChet Haase int color = getInt(); 419daf98e941e140e8739458126640183b9f296a2abChet Haase int xferMode = getInt(); 420daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s 0x%x %d", (char*) indent, OP_NAMES[op], color, xferMode); 421daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawColor(color, (SkXfermode::Mode) xferMode); 422b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 423b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 424b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawRect: { 425daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 426daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 427daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 428daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 429daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 430daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 431daf98e941e140e8739458126640183b9f296a2abChet Haase f1, f2, f3, f4, paint); 432daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawRect(f1, f2, f3, f4, paint); 433b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 434b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 43501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy case DrawRoundRect: { 436daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 437daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 438daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 439daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 440daf98e941e140e8739458126640183b9f296a2abChet Haase float f5 = getFloat(); 441daf98e941e140e8739458126640183b9f296a2abChet Haase float f6 = getFloat(); 442daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 443daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 444daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, paint); 445daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawRoundRect(f1, f2, f3, f4, f5, f6, paint); 44601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy } 44701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy break; 44801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy case DrawCircle: { 449daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 450daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 451daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 452daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 453daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %p", 454daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, paint); 455daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawCircle(f1, f2, f3, paint); 45601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy } 45701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy break; 458c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy case DrawOval: { 459daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 460daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 461daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 462daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 463daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 464daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", 465daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, paint); 466daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawOval(f1, f2, f3, f4, paint); 467c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy } 468c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy break; 4698b2f5267f16c295f12faab810527cd6311997e34Romain Guy case DrawArc: { 470daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 471daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 472daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 473daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 474daf98e941e140e8739458126640183b9f296a2abChet Haase float f5 = getFloat(); 475daf98e941e140e8739458126640183b9f296a2abChet Haase float f6 = getFloat(); 476daf98e941e140e8739458126640183b9f296a2abChet Haase int i1 = getInt(); 477daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 478daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %d, %p", 479daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, i1, paint); 480daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawArc(f1, f2, f3, f4, f5, f6, i1 == 1, paint); 4818b2f5267f16c295f12faab810527cd6311997e34Romain Guy } 4828b2f5267f16c295f12faab810527cd6311997e34Romain Guy break; 483b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawPath: { 484daf98e941e140e8739458126640183b9f296a2abChet Haase SkPath* path = getPath(); 485daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 486daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %p", (char*) indent, OP_NAMES[op], path, paint); 487daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawPath(path, paint); 488b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 489b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 490b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawLines: { 491b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int count = 0; 492b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy float* points = getFloats(count); 493daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 494b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.drawLines(points, count, getPaint()); 495b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 496b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 497b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawText: { 498b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy getText(&text); 499daf98e941e140e8739458126640183b9f296a2abChet Haase int count = getInt(); 500daf98e941e140e8739458126640183b9f296a2abChet Haase float x = getFloat(); 501daf98e941e140e8739458126640183b9f296a2abChet Haase float y = getFloat(); 502daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 503daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 504daf98e941e140e8739458126640183b9f296a2abChet Haase text.text(), text.length(), count, x, y, paint); 505daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawText(text.text(), text.length(), count, x, y, paint); 506b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 507b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 508b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetShader: { 509daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 510b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetShader(); 511b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 512b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 513b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupShader: { 514daf98e941e140e8739458126640183b9f296a2abChet Haase SkiaShader* shader = getShader(); 515daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], shader); 516daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setupShader(shader); 517b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 518b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 519b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetColorFilter: { 520daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 521b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetColorFilter(); 522b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 523b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 524b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupColorFilter: { 525daf98e941e140e8739458126640183b9f296a2abChet Haase SkiaColorFilter *colorFilter = getColorFilter(); 526daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], colorFilter); 527daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setupColorFilter(colorFilter); 528b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 529b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 530b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetShadow: { 531daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 532b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetShadow(); 533b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 534b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 535b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupShadow: { 536daf98e941e140e8739458126640183b9f296a2abChet Haase float radius = getFloat(); 537daf98e941e140e8739458126640183b9f296a2abChet Haase float dx = getFloat(); 538daf98e941e140e8739458126640183b9f296a2abChet Haase float dy = getFloat(); 539daf98e941e140e8739458126640183b9f296a2abChet Haase int color = getInt(); 540daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, 0x%x", (char*) indent, OP_NAMES[op], 541daf98e941e140e8739458126640183b9f296a2abChet Haase radius, dx, dy, color); 542daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setupShadow(radius, dx, dy, color); 543daf98e941e140e8739458126640183b9f296a2abChet Haase } 544daf98e941e140e8739458126640183b9f296a2abChet Haase break; 545daf98e941e140e8739458126640183b9f296a2abChet Haase default: 546daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("Display List error: op not handled: %s%s", 547daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op]); 548daf98e941e140e8739458126640183b9f296a2abChet Haase break; 549b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 550b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 551ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 552daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%sDone, returning %d", (char*) indent + 2, needsInvalidate); 553daf98e941e140e8739458126640183b9f296a2abChet Haase return needsInvalidate; 554b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 555b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 556b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/////////////////////////////////////////////////////////////////////////////// 5574aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Base structure 5584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 5594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5604aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain GuyDisplayListRenderer::DisplayListRenderer(): 5614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mHeap(HEAP_BLOCK_SIZE), mWriter(MIN_WRITER_SIZE) { 5624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mPathHeap = NULL; 5635977baa1fa24125c148a72699b53e62abaf08960Chet Haase mDisplayList = NULL; 5644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5664aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain GuyDisplayListRenderer::~DisplayListRenderer() { 5674aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy reset(); 5684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::reset() { 5714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy if (mPathHeap) { 5724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mPathHeap->unref(); 5734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mPathHeap = NULL; 5744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 5754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.reset(); 5774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mHeap.reset(); 5784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mRCRecorder.reset(); 5804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mTFRecorder.reset(); 5815c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 5825c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Caches& caches = Caches::getInstance(); 5835c13d89c1332fcc499379b9064b891187b75ca32Chet Haase for (size_t i = 0; i < mBitmapResources.size(); i++) { 5845c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkBitmap* resource = mBitmapResources.itemAt(i); 5855c13d89c1332fcc499379b9064b891187b75ca32Chet Haase caches.resourceCache.decrementRefcount(resource); 5865c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 5875c13d89c1332fcc499379b9064b891187b75ca32Chet Haase mBitmapResources.clear(); 588d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 58943ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy for (size_t i = 0; i < mShaders.size(); i++) { 59043ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy caches.resourceCache.decrementRefcount(mShaders.itemAt(i)); 59143ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy } 59224c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaders.clear(); 59324c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaderMap.clear(); 59443ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy 59543ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy mPaints.clear(); 59643ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy mPaintMap.clear(); 597d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mMatrices.clear(); 5984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 6014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Operations 6024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 6034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6045977baa1fa24125c148a72699b53e62abaf08960Chet HaaseDisplayList* DisplayListRenderer::getDisplayList() { 6055977baa1fa24125c148a72699b53e62abaf08960Chet Haase if (mDisplayList == NULL) { 6065977baa1fa24125c148a72699b53e62abaf08960Chet Haase mDisplayList = new DisplayList(*this); 6075977baa1fa24125c148a72699b53e62abaf08960Chet Haase } else { 6085977baa1fa24125c148a72699b53e62abaf08960Chet Haase mDisplayList->initFromDisplayListRenderer(*this); 6095977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 6105977baa1fa24125c148a72699b53e62abaf08960Chet Haase return mDisplayList; 6115977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 6125977baa1fa24125c148a72699b53e62abaf08960Chet Haase 613b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyvoid DisplayListRenderer::setViewport(int width, int height) { 614b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mOrthoMatrix.loadOrtho(0, width, height, 0, -1, 1); 615b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 616b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mWidth = width; 617b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mHeight = height; 618b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 619b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 6207d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guyvoid DisplayListRenderer::prepareDirty(float left, float top, 6217d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy float right, float bottom, bool opaque) { 622b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSnapshot = new Snapshot(mFirstSnapshot, 623b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); 624b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSaveCount = 1; 625b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSnapshot->setClip(0.0f, 0.0f, mWidth, mHeight); 62627454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mRestoreSaveCount = -1; 62727454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy} 62827454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy 62927454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guyvoid DisplayListRenderer::finish() { 63027454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy insertRestoreToCount(); 63127454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy OpenGLRenderer::finish(); 632b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 633b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 634daf98e941e140e8739458126640183b9f296a2abChet Haasevoid DisplayListRenderer::interrupt() { 635daf98e941e140e8739458126640183b9f296a2abChet Haase} 636daf98e941e140e8739458126640183b9f296a2abChet Haase 6372b1847ea60650a9f68372abe860415f18b55081dRomain Guyvoid DisplayListRenderer::resume() { 6384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 640daf98e941e140e8739458126640183b9f296a2abChet Haasebool DisplayListRenderer::callDrawGLFunction(Functor *functor) { 641daf98e941e140e8739458126640183b9f296a2abChet Haase addOp(DisplayList::DrawGLFunction); 642daf98e941e140e8739458126640183b9f296a2abChet Haase addInt((int) functor); 643daf98e941e140e8739458126640183b9f296a2abChet Haase return false; // No invalidate needed at record-time 644daf98e941e140e8739458126640183b9f296a2abChet Haase} 645daf98e941e140e8739458126640183b9f296a2abChet Haase 6464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::save(int flags) { 647b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Save); 6484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(flags); 6494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return OpenGLRenderer::save(flags); 6504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restore() { 653b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Restore); 6544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::restore(); 6554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6574aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restoreToCount(int saveCount) { 65827454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mRestoreSaveCount = saveCount; 6594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::restoreToCount(saveCount); 6604aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::saveLayer(float left, float top, float right, float bottom, 6635c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* p, int flags) { 664b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SaveLayer); 6654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 6664aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(p); 6674aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(flags); 668b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return OpenGLRenderer::save(flags); 6694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6715b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guyint DisplayListRenderer::saveLayerAlpha(float left, float top, float right, float bottom, 6725b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int alpha, int flags) { 6735b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addOp(DisplayList::SaveLayerAlpha); 6745b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addBounds(left, top, right, bottom); 6755b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addInt(alpha); 6765b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addInt(flags); 6775b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy return OpenGLRenderer::save(flags); 6785b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy} 6795b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy 6804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::translate(float dx, float dy) { 681b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Translate); 6824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(dx, dy); 6834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::translate(dx, dy); 6844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::rotate(float degrees) { 687b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Rotate); 6884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloat(degrees); 6894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::rotate(degrees); 6904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6924aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::scale(float sx, float sy) { 693b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Scale); 6944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(sx, sy); 6954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::scale(sx, sy); 6964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 698807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guyvoid DisplayListRenderer::skew(float sx, float sy) { 699807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy addOp(DisplayList::Skew); 700807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy addPoint(sx, sy); 701807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy OpenGLRenderer::skew(sx, sy); 702807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy} 703807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy 7044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setMatrix(SkMatrix* matrix) { 705b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SetMatrix); 7064aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 7074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::setMatrix(matrix); 7084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 7094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 7104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::concatMatrix(SkMatrix* matrix) { 711b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ConcatMatrix); 7124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 7134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::concatMatrix(matrix); 7144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 7154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 7164aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guybool DisplayListRenderer::clipRect(float left, float top, float right, float bottom, 7174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkRegion::Op op) { 718b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ClipRect); 7194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 7204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(op); 7214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return OpenGLRenderer::clipRect(left, top, right, bottom, op); 7224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 7234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 724daf98e941e140e8739458126640183b9f296a2abChet Haasebool DisplayListRenderer::drawDisplayList(DisplayList* displayList, uint32_t level) { 7250fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addOp(DisplayList::DrawDisplayList); 7260fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addDisplayList(displayList); 727daf98e941e140e8739458126640183b9f296a2abChet Haase return false; 7280fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy} 7290fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy 730ada830f639591b99c3e40de22b07296c7932a33fRomain Guyvoid DisplayListRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* paint) { 7316c319ca1275c8db892c39b48fc54864c949f9171Romain Guy addOp(DisplayList::DrawLayer); 732ada830f639591b99c3e40de22b07296c7932a33fRomain Guy addInt((int) layer); 733ada830f639591b99c3e40de22b07296c7932a33fRomain Guy addPoint(x, y); 7346c319ca1275c8db892c39b48fc54864c949f9171Romain Guy addPaint(paint); 7356c319ca1275c8db892c39b48fc54864c949f9171Romain Guy} 7366c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 7374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float left, float top, 7385c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 739b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawBitmap); 7404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 7414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(left, top); 7424aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 7434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 7444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 7455c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, 7465c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 747b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawBitmapMatrix); 7484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 7494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 7504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 7514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 7524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 7534aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop, 7544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float srcRight, float srcBottom, float dstLeft, float dstTop, 7555c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float dstRight, float dstBottom, SkPaint* paint) { 756b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawBitmapRect); 7574aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 7584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(srcLeft, srcTop, srcRight, srcBottom); 7594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(dstLeft, dstTop, dstRight, dstBottom); 7604aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 7614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 7624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 7635a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guyvoid DisplayListRenderer::drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight, 7645a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy float* vertices, int* colors, SkPaint* paint) { 7655a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addOp(DisplayList::DrawBitmapMesh); 7665a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addBitmap(bitmap); 7675a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(meshWidth); 7685a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(meshHeight); 7695a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addFloats(vertices, (meshWidth + 1) * (meshHeight + 1) * 2); 7705a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy if (colors) { 7715a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(1); 7725a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInts(colors, (meshWidth + 1) * (meshHeight + 1)); 7735a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } else { 7745a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(0); 7755a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } 7765a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addPaint(paint); 7775a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy} 7785a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 7794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int32_t* yDivs, 7804bb942083a0d4db746adf95349108dd8ef842e32Romain Guy const uint32_t* colors, uint32_t width, uint32_t height, int8_t numColors, 7815c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float left, float top, float right, float bottom, SkPaint* paint) { 782b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawPatch); 7834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 7844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInts(xDivs, width); 7854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInts(yDivs, height); 7864bb942083a0d4db746adf95349108dd8ef842e32Romain Guy addUInts(colors, numColors); 7874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 7884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 7894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 7904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 7914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawColor(int color, SkXfermode::Mode mode) { 792b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawColor); 7934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(color); 7944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(mode); 7954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 7964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 7974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawRect(float left, float top, float right, float bottom, 7985c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 799b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawRect); 8004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 8014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 8024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 8034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 80401d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guyvoid DisplayListRenderer::drawRoundRect(float left, float top, float right, float bottom, 80501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy float rx, float ry, SkPaint* paint) { 80601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addOp(DisplayList::DrawRoundRect); 80701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addBounds(left, top, right, bottom); 80801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPoint(rx, ry); 80901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPaint(paint); 81001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy} 81101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy 81201d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guyvoid DisplayListRenderer::drawCircle(float x, float y, float radius, SkPaint* paint) { 81301d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addOp(DisplayList::DrawCircle); 81401d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPoint(x, y); 81501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addFloat(radius); 81601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPaint(paint); 81701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy} 81801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy 819c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guyvoid DisplayListRenderer::drawOval(float left, float top, float right, float bottom, 820c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy SkPaint* paint) { 821c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addOp(DisplayList::DrawOval); 822c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addBounds(left, top, right, bottom); 823c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addPaint(paint); 824c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy} 825c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy 8268b2f5267f16c295f12faab810527cd6311997e34Romain Guyvoid DisplayListRenderer::drawArc(float left, float top, float right, float bottom, 8278b2f5267f16c295f12faab810527cd6311997e34Romain Guy float startAngle, float sweepAngle, bool useCenter, SkPaint* paint) { 82882d41a515368236e56454bd84023bebd6306f6b7Romain Guy addOp(DisplayList::DrawArc); 8298b2f5267f16c295f12faab810527cd6311997e34Romain Guy addBounds(left, top, right, bottom); 8308b2f5267f16c295f12faab810527cd6311997e34Romain Guy addPoint(startAngle, sweepAngle); 8318b2f5267f16c295f12faab810527cd6311997e34Romain Guy addInt(useCenter ? 1 : 0); 8328b2f5267f16c295f12faab810527cd6311997e34Romain Guy addPaint(paint); 8338b2f5267f16c295f12faab810527cd6311997e34Romain Guy} 8348b2f5267f16c295f12faab810527cd6311997e34Romain Guy 8354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawPath(SkPath* path, SkPaint* paint) { 836b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawPath); 8374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPath(path); 8384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 8394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 8404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 8415c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid DisplayListRenderer::drawLines(float* points, int count, SkPaint* paint) { 842b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawLines); 8434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloats(points, count); 8444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 8454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 8464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 8474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawText(const char* text, int bytesCount, int count, 8484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float x, float y, SkPaint* paint) { 849b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawText); 8504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addText(text, bytesCount); 8514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(count); 8524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(x, y); 8534aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 8544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 8554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 8564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShader() { 857b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetShader); 8584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 8594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 8604aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShader(SkiaShader* shader) { 8615c13d89c1332fcc499379b9064b891187b75ca32Chet Haase addOp(DisplayList::SetupShader); 8625c13d89c1332fcc499379b9064b891187b75ca32Chet Haase addShader(shader); 8634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 8644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 8654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetColorFilter() { 866b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetColorFilter); 8674aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 8684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 8694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupColorFilter(SkiaColorFilter* filter) { 870ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase addOp(DisplayList::SetupColorFilter); 871ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase addColorFilter(filter); 8724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 8734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 8744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShadow() { 875b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetShadow); 8764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 8774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 8784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShadow(float radius, float dx, float dy, int color) { 879b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SetupShadow); 8804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloat(radius); 8814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(dx, dy); 8824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(color); 8834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 8844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 8854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace uirenderer 8864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace android 887