DisplayListRenderer.cpp revision 24c00216687ac87fe531dc4d4168ac0c0ca04ea6
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 "AcquireContext", 86ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ReleaseContext", 87ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Save", 88ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Restore", 89ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "RestoreToCount", 90ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SaveLayer", 91ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SaveLayerAlpha", 92ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Translate", 93ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Rotate", 94ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Scale", 95ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetMatrix", 96ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ConcatMatrix", 97ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ClipRect", 98ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawDisplayList", 99ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawLayer", 100ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawBitmap", 101ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawBitmapMatrix", 102ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawBitmapRect", 103ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawPatch", 104ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawColor", 105ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawRect", 106ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawPath", 107ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawLines", 108ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawText", 109ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ResetShader", 110ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetupShader", 111ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ResetColorFilter", 112ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetupColorFilter", 113ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ResetShadow", 114ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetupShadow" 115ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy}; 116ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 117b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain GuyDisplayList::DisplayList(const DisplayListRenderer& recorder) { 1185977baa1fa24125c148a72699b53e62abaf08960Chet Haase initFromDisplayListRenderer(recorder); 1195977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 1205977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1215977baa1fa24125c148a72699b53e62abaf08960Chet HaaseDisplayList::~DisplayList() { 1225977baa1fa24125c148a72699b53e62abaf08960Chet Haase sk_free((void*) mReader.base()); 1235977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1245977baa1fa24125c148a72699b53e62abaf08960Chet Haase Caches& caches = Caches::getInstance(); 1255977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1265977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mBitmapResources.size(); i++) { 1275977baa1fa24125c148a72699b53e62abaf08960Chet Haase caches.resourceCache.decrementRefcount(mBitmapResources.itemAt(i)); 1285977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1295977baa1fa24125c148a72699b53e62abaf08960Chet Haase mBitmapResources.clear(); 1305977baa1fa24125c148a72699b53e62abaf08960Chet Haase 13124c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy for (size_t i = 0; i < mShaders.size(); i++) { 13224c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy delete mShaders.itemAt(i); 1335977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 13424c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaders.clear(); 1355977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1365977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mPaints.size(); i++) { 1375977baa1fa24125c148a72699b53e62abaf08960Chet Haase delete mPaints.itemAt(i); 1385977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1395977baa1fa24125c148a72699b53e62abaf08960Chet Haase mPaints.clear(); 1405977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1415977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mMatrices.size(); i++) { 1425977baa1fa24125c148a72699b53e62abaf08960Chet Haase delete mMatrices.itemAt(i); 1435977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1445977baa1fa24125c148a72699b53e62abaf08960Chet Haase mMatrices.clear(); 1455977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1465977baa1fa24125c148a72699b53e62abaf08960Chet Haase if (mPathHeap) { 1475977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (int i = 0; i < mPathHeap->count(); i++) { 1485977baa1fa24125c148a72699b53e62abaf08960Chet Haase caches.pathCache.removeDeferred(&(*mPathHeap)[i]); 1495977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1505977baa1fa24125c148a72699b53e62abaf08960Chet Haase mPathHeap->safeUnref(); 1515977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1525977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 1535977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1545977baa1fa24125c148a72699b53e62abaf08960Chet Haasevoid DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorder) { 155b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy const SkWriter32& writer = recorder.writeStream(); 156b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy init(); 157b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 158b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy if (writer.size() == 0) { 159b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return; 160b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 161b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 162b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy size_t size = writer.size(); 163b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy void* buffer = sk_malloc_throw(size); 164b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy writer.flatten(buffer); 165b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mReader.setMemory(buffer, size); 166b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 167b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mRCPlayback.reset(&recorder.mRCRecorder); 168b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mRCPlayback.setupBuffer(mReader); 169b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 170b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mTFPlayback.reset(&recorder.mTFRecorder); 171b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mTFPlayback.setupBuffer(mReader); 172b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1735c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Caches& caches = Caches::getInstance(); 174b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1755c13d89c1332fcc499379b9064b891187b75ca32Chet Haase const Vector<SkBitmap*> &bitmapResources = recorder.getBitmapResources(); 1765c13d89c1332fcc499379b9064b891187b75ca32Chet Haase for (size_t i = 0; i < bitmapResources.size(); i++) { 1775c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkBitmap* resource = bitmapResources.itemAt(i); 1785c13d89c1332fcc499379b9064b891187b75ca32Chet Haase mBitmapResources.add(resource); 1795c13d89c1332fcc499379b9064b891187b75ca32Chet Haase caches.resourceCache.incrementRefcount(resource); 180b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 181d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 18224c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy const Vector<SkiaShader*> &shaders = recorder.getShaders(); 18324c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy for (size_t i = 0; i < shaders.size(); i++) { 18424c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaders.add(shaders.itemAt(i)); 185b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 186b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 187d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase const Vector<SkPaint*> &paints = recorder.getPaints(); 188d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase for (size_t i = 0; i < paints.size(); i++) { 189d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mPaints.add(paints.itemAt(i)); 190d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase } 191d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 192d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase const Vector<SkMatrix*> &matrices = recorder.getMatrices(); 193d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase for (size_t i = 0; i < matrices.size(); i++) { 194d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mMatrices.add(matrices.itemAt(i)); 195d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase } 196d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 197b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mPathHeap = recorder.mPathHeap; 1989e10841c27d973b930e1b49a099c69d866659505Romain Guy if (mPathHeap) { 1999e10841c27d973b930e1b49a099c69d866659505Romain Guy mPathHeap->safeRef(); 2009e10841c27d973b930e1b49a099c69d866659505Romain Guy } 201b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 202b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 203b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyvoid DisplayList::init() { 204b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mPathHeap = NULL; 205b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 206b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 207ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guyvoid DisplayList::replay(OpenGLRenderer& renderer, uint32_t level) { 208b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy TextContainer text; 209b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mReader.rewind(); 210b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 211ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#if DEBUG_DISPLAY_LIST 212ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy uint32_t count = (level + 1) * 2; 213ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy char indent[count + 1]; 214ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy for (uint32_t i = 0; i < count; i++) { 215ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy indent[i] = ' '; 216ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy } 217ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy indent[count] = '\0'; 218ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy DISPLAY_LIST_LOGD("%sStart display list (%p)", (char*) indent + 2, this); 219ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#endif 220b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 221ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy int saveCount = renderer.getSaveCount() - 1; 222b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy while (!mReader.eof()) { 2235b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int op = mReader.readInt(); 224ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 225ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 2265b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy switch (op) { 227b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case AcquireContext: { 228b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.acquireContext(); 229b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 230b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 231b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ReleaseContext: { 232b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.releaseContext(); 233b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 234b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 235b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Save: { 236b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.save(getInt()); 237b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 238b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 239b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Restore: { 240b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.restore(); 241b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 242b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 243b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case RestoreToCount: { 244b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.restoreToCount(saveCount + getInt()); 245b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 246b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 247b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SaveLayer: { 248b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.saveLayer(getFloat(), getFloat(), getFloat(), getFloat(), 249b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy getPaint(), getInt()); 250b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 251b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 2525b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy case SaveLayerAlpha: { 2535b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy renderer.saveLayerAlpha(getFloat(), getFloat(), getFloat(), getFloat(), 2545b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy getInt(), getInt()); 2555b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy } 2565b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy break; 257b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Translate: { 258b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.translate(getFloat(), getFloat()); 259b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 260b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 261b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Rotate: { 262b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.rotate(getFloat()); 263b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 264b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 265b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Scale: { 266b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.scale(getFloat(), getFloat()); 267b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 268b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 269b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetMatrix: { 270b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.setMatrix(getMatrix()); 271b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 272b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 273b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ConcatMatrix: { 274b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.concatMatrix(getMatrix()); 275b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 276b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 277b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ClipRect: { 278b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.clipRect(getFloat(), getFloat(), getFloat(), getFloat(), 279b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy (SkRegion::Op) getInt()); 280b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 281b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 2820fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy case DrawDisplayList: { 283ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy renderer.drawDisplayList(getDisplayList(), level + 1); 2840fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy } 2850fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy break; 2866c319ca1275c8db892c39b48fc54864c949f9171Romain Guy case DrawLayer: { 287ada830f639591b99c3e40de22b07296c7932a33fRomain Guy renderer.drawLayer((Layer*) getInt(), getFloat(), getFloat(), getPaint()); 2886c319ca1275c8db892c39b48fc54864c949f9171Romain Guy } 2896c319ca1275c8db892c39b48fc54864c949f9171Romain Guy break; 290b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmap: { 291b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.drawBitmap(getBitmap(), getFloat(), getFloat(), getPaint()); 292b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 293b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 294b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmapMatrix: { 295b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.drawBitmap(getBitmap(), getMatrix(), getPaint()); 296b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 297b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 298b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmapRect: { 299b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.drawBitmap(getBitmap(), getFloat(), getFloat(), getFloat(), getFloat(), 300b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy getFloat(), getFloat(), getFloat(), getFloat(), getPaint()); 301b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 302b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 303b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawPatch: { 304b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int32_t* xDivs = NULL; 305b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int32_t* yDivs = NULL; 3064bb942083a0d4db746adf95349108dd8ef842e32Romain Guy uint32_t* colors = NULL; 307b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy uint32_t xDivsCount = 0; 308b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy uint32_t yDivsCount = 0; 3094bb942083a0d4db746adf95349108dd8ef842e32Romain Guy int8_t numColors = 0; 310b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 311b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkBitmap* bitmap = getBitmap(); 312b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 313b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy xDivs = getInts(xDivsCount); 314b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy yDivs = getInts(yDivsCount); 3154bb942083a0d4db746adf95349108dd8ef842e32Romain Guy colors = getUInts(numColors); 316b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 3174bb942083a0d4db746adf95349108dd8ef842e32Romain Guy renderer.drawPatch(bitmap, xDivs, yDivs, colors, xDivsCount, yDivsCount, 3184bb942083a0d4db746adf95349108dd8ef842e32Romain Guy numColors, getFloat(), getFloat(), getFloat(), getFloat(), getPaint()); 319b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 320b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 321b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawColor: { 322b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.drawColor(getInt(), (SkXfermode::Mode) getInt()); 323b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 324b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 325b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawRect: { 326b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.drawRect(getFloat(), getFloat(), getFloat(), getFloat(), getPaint()); 327b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 328b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 329b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawPath: { 330b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.drawPath(getPath(), getPaint()); 331b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 332b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 333b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawLines: { 334b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int count = 0; 335b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy float* points = getFloats(count); 336b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.drawLines(points, count, getPaint()); 337b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 338b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 339b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawText: { 340b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy getText(&text); 341b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.drawText(text.text(), text.length(), getInt(), 342b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy getFloat(), getFloat(), getPaint()); 343b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 344b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 345b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetShader: { 346b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetShader(); 347b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 348b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 349b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupShader: { 3505c13d89c1332fcc499379b9064b891187b75ca32Chet Haase renderer.setupShader(getShader()); 351b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 352b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 353b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetColorFilter: { 354b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetColorFilter(); 355b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 356b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 357b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupColorFilter: { 358ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase renderer.setupColorFilter(getColorFilter()); 359b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 360b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 361b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetShadow: { 362b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetShadow(); 363b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 364b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 365b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupShadow: { 366b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.setupShadow(getFloat(), getFloat(), getFloat(), getInt()); 367b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 368b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 369b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 370b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 371ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 372ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy DISPLAY_LIST_LOGD("%sDone", (char*) indent + 2); 373b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 374b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 375b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/////////////////////////////////////////////////////////////////////////////// 3764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Base structure 3774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 3784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain GuyDisplayListRenderer::DisplayListRenderer(): 3804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mHeap(HEAP_BLOCK_SIZE), mWriter(MIN_WRITER_SIZE) { 3814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mPathHeap = NULL; 3825977baa1fa24125c148a72699b53e62abaf08960Chet Haase mDisplayList = NULL; 3834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 3844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain GuyDisplayListRenderer::~DisplayListRenderer() { 3864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy reset(); 3874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 3884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::reset() { 3904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy if (mPathHeap) { 3914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mPathHeap->unref(); 3924aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mPathHeap = NULL; 3934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.reset(); 3964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mHeap.reset(); 3974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mRCRecorder.reset(); 3994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mTFRecorder.reset(); 4005c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 4015c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Caches& caches = Caches::getInstance(); 4025c13d89c1332fcc499379b9064b891187b75ca32Chet Haase for (size_t i = 0; i < mBitmapResources.size(); i++) { 4035c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkBitmap* resource = mBitmapResources.itemAt(i); 4045c13d89c1332fcc499379b9064b891187b75ca32Chet Haase caches.resourceCache.decrementRefcount(resource); 4055c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 4065c13d89c1332fcc499379b9064b891187b75ca32Chet Haase mBitmapResources.clear(); 407d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 408d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mPaints.clear(); 409d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mPaintMap.clear(); 41024c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaders.clear(); 41124c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaderMap.clear(); 412d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mMatrices.clear(); 4134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 4144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 4164aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Operations 4174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 4184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4195977baa1fa24125c148a72699b53e62abaf08960Chet HaaseDisplayList* DisplayListRenderer::getDisplayList() { 4205977baa1fa24125c148a72699b53e62abaf08960Chet Haase if (mDisplayList == NULL) { 4215977baa1fa24125c148a72699b53e62abaf08960Chet Haase mDisplayList = new DisplayList(*this); 4225977baa1fa24125c148a72699b53e62abaf08960Chet Haase } else { 4235977baa1fa24125c148a72699b53e62abaf08960Chet Haase mDisplayList->initFromDisplayListRenderer(*this); 4245977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 4255977baa1fa24125c148a72699b53e62abaf08960Chet Haase return mDisplayList; 4265977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 4275977baa1fa24125c148a72699b53e62abaf08960Chet Haase 428b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyvoid DisplayListRenderer::setViewport(int width, int height) { 429b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mOrthoMatrix.loadOrtho(0, width, height, 0, -1, 1); 430b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 431b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mWidth = width; 432b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mHeight = height; 433b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 434b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 4356b7bd24659fb175fe1f0e97c86c18969918b496aRomain Guyvoid DisplayListRenderer::prepare(bool opaque) { 436b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSnapshot = new Snapshot(mFirstSnapshot, 437b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); 438b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSaveCount = 1; 439b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSnapshot->setClip(0.0f, 0.0f, mWidth, mHeight); 440b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 441b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 4424aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::acquireContext() { 443b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::AcquireContext); 4444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::acquireContext(); 4454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 4464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::releaseContext() { 448b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ReleaseContext); 4494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::releaseContext(); 4504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 4514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::save(int flags) { 453b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Save); 4544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(flags); 4554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return OpenGLRenderer::save(flags); 4564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 4574aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restore() { 459b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Restore); 4604aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::restore(); 4614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 4624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restoreToCount(int saveCount) { 464b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::RestoreToCount); 4654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(saveCount); 4664aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::restoreToCount(saveCount); 4674aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 4684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::saveLayer(float left, float top, float right, float bottom, 4705c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* p, int flags) { 471b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SaveLayer); 4724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 4734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(p); 4744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(flags); 475b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return OpenGLRenderer::save(flags); 4764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 4774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4785b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guyint DisplayListRenderer::saveLayerAlpha(float left, float top, float right, float bottom, 4795b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int alpha, int flags) { 4805b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addOp(DisplayList::SaveLayerAlpha); 4815b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addBounds(left, top, right, bottom); 4825b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addInt(alpha); 4835b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addInt(flags); 4845b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy return OpenGLRenderer::save(flags); 4855b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy} 4865b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy 4874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::translate(float dx, float dy) { 488b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Translate); 4894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(dx, dy); 4904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::translate(dx, dy); 4914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 4924aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::rotate(float degrees) { 494b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Rotate); 4954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloat(degrees); 4964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::rotate(degrees); 4974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 4984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::scale(float sx, float sy) { 500b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Scale); 5014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(sx, sy); 5024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::scale(sx, sy); 5034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5054aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setMatrix(SkMatrix* matrix) { 506b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SetMatrix); 5074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 5084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::setMatrix(matrix); 5094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::concatMatrix(SkMatrix* matrix) { 512b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ConcatMatrix); 5134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 5144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::concatMatrix(matrix); 5154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5164aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guybool DisplayListRenderer::clipRect(float left, float top, float right, float bottom, 5184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkRegion::Op op) { 519b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ClipRect); 5204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 5214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(op); 5224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return OpenGLRenderer::clipRect(left, top, right, bottom, op); 5234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 525ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guyvoid DisplayListRenderer::drawDisplayList(DisplayList* displayList, uint32_t level) { 5260fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addOp(DisplayList::DrawDisplayList); 5270fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addDisplayList(displayList); 5280fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy} 5290fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy 530ada830f639591b99c3e40de22b07296c7932a33fRomain Guyvoid DisplayListRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* paint) { 5316c319ca1275c8db892c39b48fc54864c949f9171Romain Guy addOp(DisplayList::DrawLayer); 532ada830f639591b99c3e40de22b07296c7932a33fRomain Guy addInt((int) layer); 533ada830f639591b99c3e40de22b07296c7932a33fRomain Guy addPoint(x, y); 5346c319ca1275c8db892c39b48fc54864c949f9171Romain Guy addPaint(paint); 5356c319ca1275c8db892c39b48fc54864c949f9171Romain Guy} 5366c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 5374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float left, float top, 5385c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 539b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawBitmap); 5404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 5414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(left, top); 5424aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 5434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5455c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, 5465c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 547b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawBitmapMatrix); 5484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 5494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 5504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 5514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5534aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop, 5544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float srcRight, float srcBottom, float dstLeft, float dstTop, 5555c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float dstRight, float dstBottom, SkPaint* paint) { 556b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawBitmapRect); 5574aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 5584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(srcLeft, srcTop, srcRight, srcBottom); 5594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(dstLeft, dstTop, dstRight, dstBottom); 5604aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 5614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int32_t* yDivs, 5644bb942083a0d4db746adf95349108dd8ef842e32Romain Guy const uint32_t* colors, uint32_t width, uint32_t height, int8_t numColors, 5655c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float left, float top, float right, float bottom, SkPaint* paint) { 566b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawPatch); 5674aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 5684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInts(xDivs, width); 5694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInts(yDivs, height); 5704bb942083a0d4db746adf95349108dd8ef842e32Romain Guy addUInts(colors, numColors); 5714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 5724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 5734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawColor(int color, SkXfermode::Mode mode) { 576b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawColor); 5774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(color); 5784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(mode); 5794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawRect(float left, float top, float right, float bottom, 5825c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 583b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawRect); 5844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 5854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 5864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawPath(SkPath* path, SkPaint* paint) { 589b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawPath); 5904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPath(path); 5914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 5924aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5945c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid DisplayListRenderer::drawLines(float* points, int count, SkPaint* paint) { 595b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawLines); 5964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloats(points, count); 5974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 5984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawText(const char* text, int bytesCount, int count, 6014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float x, float y, SkPaint* paint) { 602b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawText); 6034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addText(text, bytesCount); 6044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(count); 6054aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(x, y); 6064aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 6074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShader() { 610b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetShader); 6114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShader(SkiaShader* shader) { 6145c13d89c1332fcc499379b9064b891187b75ca32Chet Haase addOp(DisplayList::SetupShader); 6155c13d89c1332fcc499379b9064b891187b75ca32Chet Haase addShader(shader); 6164aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetColorFilter() { 619b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetColorFilter); 6204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupColorFilter(SkiaColorFilter* filter) { 623ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase addOp(DisplayList::SetupColorFilter); 624ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase addColorFilter(filter); 6254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShadow() { 628b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetShadow); 6294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShadow(float radius, float dx, float dy, int color) { 632b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SetupShadow); 6334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloat(radius); 6344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(dx, dy); 6354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(color); 6364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace uirenderer 6394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace android 640