DisplayListRenderer.cpp revision 82d41a515368236e56454bd84023bebd6306f6b7
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",
954cf6e2f34994f160e1baba205a43c12784dd3e0dRomain Guy    "Skew",
96ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "SetMatrix",
97ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "ConcatMatrix",
98ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "ClipRect",
99ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "DrawDisplayList",
100ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "DrawLayer",
101ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "DrawBitmap",
102ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "DrawBitmapMatrix",
103ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "DrawBitmapRect",
1045a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy    "DrawBitmapMesh",
105ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "DrawPatch",
106ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "DrawColor",
107ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "DrawRect",
10801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy    "DrawRoundRect",
10901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy    "DrawCircle",
110c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy    "DrawOval",
1118b2f5267f16c295f12faab810527cd6311997e34Romain Guy    "DrawArc",
112ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "DrawPath",
113ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "DrawLines",
114ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "DrawText",
115ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "ResetShader",
116ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "SetupShader",
117ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "ResetColorFilter",
118ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "SetupColorFilter",
119ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "ResetShadow",
120daf98e941e140e8739458126640183b9f296a2abChet Haase    "SetupShadow",
121daf98e941e140e8739458126640183b9f296a2abChet Haase    "DrawGLFunction"
122ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy};
123ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy
124b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain GuyDisplayList::DisplayList(const DisplayListRenderer& recorder) {
1255977baa1fa24125c148a72699b53e62abaf08960Chet Haase    initFromDisplayListRenderer(recorder);
1265977baa1fa24125c148a72699b53e62abaf08960Chet Haase}
1275977baa1fa24125c148a72699b53e62abaf08960Chet Haase
1285977baa1fa24125c148a72699b53e62abaf08960Chet HaaseDisplayList::~DisplayList() {
1295977baa1fa24125c148a72699b53e62abaf08960Chet Haase    sk_free((void*) mReader.base());
1305977baa1fa24125c148a72699b53e62abaf08960Chet Haase
1315977baa1fa24125c148a72699b53e62abaf08960Chet Haase    Caches& caches = Caches::getInstance();
1325977baa1fa24125c148a72699b53e62abaf08960Chet Haase
1335977baa1fa24125c148a72699b53e62abaf08960Chet Haase    for (size_t i = 0; i < mBitmapResources.size(); i++) {
1345977baa1fa24125c148a72699b53e62abaf08960Chet Haase        caches.resourceCache.decrementRefcount(mBitmapResources.itemAt(i));
1355977baa1fa24125c148a72699b53e62abaf08960Chet Haase    }
1365977baa1fa24125c148a72699b53e62abaf08960Chet Haase    mBitmapResources.clear();
1375977baa1fa24125c148a72699b53e62abaf08960Chet Haase
13824c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy    for (size_t i = 0; i < mShaders.size(); i++) {
13943ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy        caches.resourceCache.decrementRefcount(mShaders.itemAt(i));
1405977baa1fa24125c148a72699b53e62abaf08960Chet Haase    }
14124c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy    mShaders.clear();
1425977baa1fa24125c148a72699b53e62abaf08960Chet Haase
1435977baa1fa24125c148a72699b53e62abaf08960Chet Haase    for (size_t i = 0; i < mPaints.size(); i++) {
1445977baa1fa24125c148a72699b53e62abaf08960Chet Haase        delete mPaints.itemAt(i);
1455977baa1fa24125c148a72699b53e62abaf08960Chet Haase    }
1465977baa1fa24125c148a72699b53e62abaf08960Chet Haase    mPaints.clear();
1475977baa1fa24125c148a72699b53e62abaf08960Chet Haase
1485977baa1fa24125c148a72699b53e62abaf08960Chet Haase    for (size_t i = 0; i < mMatrices.size(); i++) {
1495977baa1fa24125c148a72699b53e62abaf08960Chet Haase        delete mMatrices.itemAt(i);
1505977baa1fa24125c148a72699b53e62abaf08960Chet Haase    }
1515977baa1fa24125c148a72699b53e62abaf08960Chet Haase    mMatrices.clear();
1525977baa1fa24125c148a72699b53e62abaf08960Chet Haase
1535977baa1fa24125c148a72699b53e62abaf08960Chet Haase    if (mPathHeap) {
1545977baa1fa24125c148a72699b53e62abaf08960Chet Haase        for (int i = 0; i < mPathHeap->count(); i++) {
1555977baa1fa24125c148a72699b53e62abaf08960Chet Haase            caches.pathCache.removeDeferred(&(*mPathHeap)[i]);
1565977baa1fa24125c148a72699b53e62abaf08960Chet Haase        }
1575977baa1fa24125c148a72699b53e62abaf08960Chet Haase        mPathHeap->safeUnref();
1585977baa1fa24125c148a72699b53e62abaf08960Chet Haase    }
1595977baa1fa24125c148a72699b53e62abaf08960Chet Haase}
1605977baa1fa24125c148a72699b53e62abaf08960Chet Haase
1615977baa1fa24125c148a72699b53e62abaf08960Chet Haasevoid DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorder) {
162b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    const SkWriter32& writer = recorder.writeStream();
163b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    init();
164b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
165b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    if (writer.size() == 0) {
166b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy        return;
167b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    }
168b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
169b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    size_t size = writer.size();
170b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    void* buffer = sk_malloc_throw(size);
171b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    writer.flatten(buffer);
172b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mReader.setMemory(buffer, size);
173b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
174b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mRCPlayback.reset(&recorder.mRCRecorder);
175b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mRCPlayback.setupBuffer(mReader);
176b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
177b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mTFPlayback.reset(&recorder.mTFRecorder);
178b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mTFPlayback.setupBuffer(mReader);
179b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
1805c13d89c1332fcc499379b9064b891187b75ca32Chet Haase    Caches& caches = Caches::getInstance();
181b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
1825c13d89c1332fcc499379b9064b891187b75ca32Chet Haase    const Vector<SkBitmap*> &bitmapResources = recorder.getBitmapResources();
1835c13d89c1332fcc499379b9064b891187b75ca32Chet Haase    for (size_t i = 0; i < bitmapResources.size(); i++) {
1845c13d89c1332fcc499379b9064b891187b75ca32Chet Haase        SkBitmap* resource = bitmapResources.itemAt(i);
1855c13d89c1332fcc499379b9064b891187b75ca32Chet Haase        mBitmapResources.add(resource);
1865c13d89c1332fcc499379b9064b891187b75ca32Chet Haase        caches.resourceCache.incrementRefcount(resource);
187b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    }
188d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase
18924c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy    const Vector<SkiaShader*> &shaders = recorder.getShaders();
19024c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy    for (size_t i = 0; i < shaders.size(); i++) {
19143ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy        SkiaShader* shader = shaders.itemAt(i);
19243ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy        mShaders.add(shader);
19343ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy        caches.resourceCache.incrementRefcount(shader);
194b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    }
195b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
196d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase    const Vector<SkPaint*> &paints = recorder.getPaints();
197d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase    for (size_t i = 0; i < paints.size(); i++) {
198d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase        mPaints.add(paints.itemAt(i));
199d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase    }
200d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase
201d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase    const Vector<SkMatrix*> &matrices = recorder.getMatrices();
202d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase    for (size_t i = 0; i < matrices.size(); i++) {
203d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase        mMatrices.add(matrices.itemAt(i));
204d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase    }
205d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase
206b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mPathHeap = recorder.mPathHeap;
2079e10841c27d973b930e1b49a099c69d866659505Romain Guy    if (mPathHeap) {
2089e10841c27d973b930e1b49a099c69d866659505Romain Guy        mPathHeap->safeRef();
2099e10841c27d973b930e1b49a099c69d866659505Romain Guy    }
210b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy}
211b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
212b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyvoid DisplayList::init() {
213b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mPathHeap = NULL;
214b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy}
215b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
216daf98e941e140e8739458126640183b9f296a2abChet Haasebool DisplayList::replay(OpenGLRenderer& renderer, uint32_t level) {
217daf98e941e140e8739458126640183b9f296a2abChet Haase    bool needsInvalidate = false;
218b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    TextContainer text;
219b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mReader.rewind();
220b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
221ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#if DEBUG_DISPLAY_LIST
222ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    uint32_t count = (level + 1) * 2;
223ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    char indent[count + 1];
224ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    for (uint32_t i = 0; i < count; i++) {
225ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy        indent[i] = ' ';
226ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    }
227ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    indent[count] = '\0';
228ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    DISPLAY_LIST_LOGD("%sStart display list (%p)", (char*) indent + 2, this);
229ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#endif
230b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
231ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    int saveCount = renderer.getSaveCount() - 1;
232b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    while (!mReader.eof()) {
2335b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy        int op = mReader.readInt();
234ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy
2355b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy        switch (op) {
236daf98e941e140e8739458126640183b9f296a2abChet Haase            case DrawGLFunction: {
237daf98e941e140e8739458126640183b9f296a2abChet Haase                Functor *functor = (Functor *) getInt();
238daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], functor);
239daf98e941e140e8739458126640183b9f296a2abChet Haase                needsInvalidate |= renderer.callDrawGLFunction(functor);
240daf98e941e140e8739458126640183b9f296a2abChet Haase            }
241daf98e941e140e8739458126640183b9f296a2abChet Haase            break;
242b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case AcquireContext: {
243daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]);
244b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.acquireContext();
245b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
246b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
247b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case ReleaseContext: {
248daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]);
249b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.releaseContext();
250b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
251b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
252b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case Save: {
253daf98e941e140e8739458126640183b9f296a2abChet Haase                int rendererNum = getInt();
254daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, OP_NAMES[op], rendererNum);
255daf98e941e140e8739458126640183b9f296a2abChet Haase                renderer.save(rendererNum);
256b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
257b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
258b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case Restore: {
259daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]);
260b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.restore();
261b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
262b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
263b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case RestoreToCount: {
264daf98e941e140e8739458126640183b9f296a2abChet Haase                int restoreCount = saveCount + getInt();
265daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, OP_NAMES[op], restoreCount);
266daf98e941e140e8739458126640183b9f296a2abChet Haase                renderer.restoreToCount(restoreCount);
267b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
268b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
269b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case SaveLayer: {
270daf98e941e140e8739458126640183b9f296a2abChet Haase                float f1 = getFloat();
271daf98e941e140e8739458126640183b9f296a2abChet Haase                float f2 = getFloat();
272daf98e941e140e8739458126640183b9f296a2abChet Haase                float f3 = getFloat();
273daf98e941e140e8739458126640183b9f296a2abChet Haase                float f4 = getFloat();
274daf98e941e140e8739458126640183b9f296a2abChet Haase                SkPaint* paint = getPaint();
275daf98e941e140e8739458126640183b9f296a2abChet Haase                int flags = getInt();
276daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p, 0x%x", (char*) indent,
277daf98e941e140e8739458126640183b9f296a2abChet Haase                    OP_NAMES[op], f1, f2, f3, f4, paint, flags);
278daf98e941e140e8739458126640183b9f296a2abChet Haase                renderer.saveLayer(f1, f2, f3, f4, paint, flags);
279b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
280b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
2815b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy            case SaveLayerAlpha: {
282daf98e941e140e8739458126640183b9f296a2abChet Haase                float f1 = getFloat();
283daf98e941e140e8739458126640183b9f296a2abChet Haase                float f2 = getFloat();
284daf98e941e140e8739458126640183b9f296a2abChet Haase                float f3 = getFloat();
285daf98e941e140e8739458126640183b9f296a2abChet Haase                float f4 = getFloat();
286daf98e941e140e8739458126640183b9f296a2abChet Haase                int alpha = getInt();
287daf98e941e140e8739458126640183b9f296a2abChet Haase                int flags = getInt();
288daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", (char*) indent,
289daf98e941e140e8739458126640183b9f296a2abChet Haase                    OP_NAMES[op], f1, f2, f3, f4, alpha, flags);
290daf98e941e140e8739458126640183b9f296a2abChet Haase                renderer.saveLayerAlpha(f1, f2, f3, f4, alpha, flags);
2915b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy            }
2925b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy            break;
293b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case Translate: {
294daf98e941e140e8739458126640183b9f296a2abChet Haase                float f1 = getFloat();
295daf98e941e140e8739458126640183b9f296a2abChet Haase                float f2 = getFloat();
296daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], f1, f2);
297daf98e941e140e8739458126640183b9f296a2abChet Haase                renderer.translate(f1, f2);
298b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
299b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
300b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case Rotate: {
301daf98e941e140e8739458126640183b9f296a2abChet Haase                float rotation = getFloat();
302daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s %.2f", (char*) indent, OP_NAMES[op], rotation);
303daf98e941e140e8739458126640183b9f296a2abChet Haase                renderer.rotate(rotation);
304b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
305b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
306b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case Scale: {
307daf98e941e140e8739458126640183b9f296a2abChet Haase                float sx = getFloat();
308daf98e941e140e8739458126640183b9f296a2abChet Haase                float sy = getFloat();
309daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy);
310daf98e941e140e8739458126640183b9f296a2abChet Haase                renderer.scale(sx, sy);
311b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
312b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
313807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy            case Skew: {
314daf98e941e140e8739458126640183b9f296a2abChet Haase                float sx = getFloat();
315daf98e941e140e8739458126640183b9f296a2abChet Haase                float sy = getFloat();
316daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy);
317daf98e941e140e8739458126640183b9f296a2abChet Haase                renderer.skew(sx, sy);
318807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy            }
319807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy            break;
320b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case SetMatrix: {
321daf98e941e140e8739458126640183b9f296a2abChet Haase                SkMatrix* matrix = getMatrix();
322daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], matrix);
323daf98e941e140e8739458126640183b9f296a2abChet Haase                renderer.setMatrix(matrix);
324b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
325b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
326b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case ConcatMatrix: {
327daf98e941e140e8739458126640183b9f296a2abChet Haase                SkMatrix* matrix = getMatrix();
328daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], matrix);
329daf98e941e140e8739458126640183b9f296a2abChet Haase                renderer.concatMatrix(matrix);
330b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
331b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
332b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case ClipRect: {
333daf98e941e140e8739458126640183b9f296a2abChet Haase                float f1 = getFloat();
334daf98e941e140e8739458126640183b9f296a2abChet Haase                float f2 = getFloat();
335daf98e941e140e8739458126640183b9f296a2abChet Haase                float f3 = getFloat();
336daf98e941e140e8739458126640183b9f296a2abChet Haase                float f4 = getFloat();
337daf98e941e140e8739458126640183b9f296a2abChet Haase                int regionOp = getInt();
338daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d", (char*) indent, OP_NAMES[op],
339daf98e941e140e8739458126640183b9f296a2abChet Haase                    f1, f2, f3, f4, regionOp);
340daf98e941e140e8739458126640183b9f296a2abChet Haase                renderer.clipRect(f1, f2, f3, f4, (SkRegion::Op) regionOp);
341b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
342b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
3430fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy            case DrawDisplayList: {
344daf98e941e140e8739458126640183b9f296a2abChet Haase                DisplayList* displayList = getDisplayList();
345daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s %p, %d", (char*) indent, OP_NAMES[op],
346daf98e941e140e8739458126640183b9f296a2abChet Haase                    displayList, level + 1);
347daf98e941e140e8739458126640183b9f296a2abChet Haase                needsInvalidate |= renderer.drawDisplayList(displayList, level + 1);
3480fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy            }
3490fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy            break;
3506c319ca1275c8db892c39b48fc54864c949f9171Romain Guy            case DrawLayer: {
351daf98e941e140e8739458126640183b9f296a2abChet Haase                Layer* layer = (Layer*) getInt();
352daf98e941e140e8739458126640183b9f296a2abChet Haase                float x = getFloat();
353daf98e941e140e8739458126640183b9f296a2abChet Haase                float y = getFloat();
354daf98e941e140e8739458126640183b9f296a2abChet Haase                SkPaint* paint = getPaint();
355daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op],
356daf98e941e140e8739458126640183b9f296a2abChet Haase                    layer, x, y, paint);
357daf98e941e140e8739458126640183b9f296a2abChet Haase                renderer.drawLayer(layer, x, y, paint);
3586c319ca1275c8db892c39b48fc54864c949f9171Romain Guy            }
3596c319ca1275c8db892c39b48fc54864c949f9171Romain Guy            break;
360b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case DrawBitmap: {
361daf98e941e140e8739458126640183b9f296a2abChet Haase                SkBitmap* bitmap = getBitmap();
362daf98e941e140e8739458126640183b9f296a2abChet Haase                float x = getFloat();
363daf98e941e140e8739458126640183b9f296a2abChet Haase                float y = getFloat();
364daf98e941e140e8739458126640183b9f296a2abChet Haase                SkPaint* paint = getPaint();
365daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op],
366daf98e941e140e8739458126640183b9f296a2abChet Haase                    bitmap, x, y, paint);
367daf98e941e140e8739458126640183b9f296a2abChet Haase                renderer.drawBitmap(bitmap, x, y, paint);
368b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
369b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
370b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case DrawBitmapMatrix: {
371daf98e941e140e8739458126640183b9f296a2abChet Haase                SkBitmap* bitmap = getBitmap();
372daf98e941e140e8739458126640183b9f296a2abChet Haase                SkMatrix* matrix = getMatrix();
373daf98e941e140e8739458126640183b9f296a2abChet Haase                SkPaint* paint = getPaint();
374daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s %p, %p, %p", (char*) indent, OP_NAMES[op],
375daf98e941e140e8739458126640183b9f296a2abChet Haase                    bitmap, matrix, paint);
376daf98e941e140e8739458126640183b9f296a2abChet Haase                renderer.drawBitmap(bitmap, matrix, paint);
377b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
378b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
379b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case DrawBitmapRect: {
380daf98e941e140e8739458126640183b9f296a2abChet Haase                SkBitmap* bitmap = getBitmap();
381daf98e941e140e8739458126640183b9f296a2abChet Haase                float f1 = getFloat();
382daf98e941e140e8739458126640183b9f296a2abChet Haase                float f2 = getFloat();
383daf98e941e140e8739458126640183b9f296a2abChet Haase                float f3 = getFloat();
384daf98e941e140e8739458126640183b9f296a2abChet Haase                float f4 = getFloat();
385daf98e941e140e8739458126640183b9f296a2abChet Haase                float f5 = getFloat();
386daf98e941e140e8739458126640183b9f296a2abChet Haase                float f6 = getFloat();
387daf98e941e140e8739458126640183b9f296a2abChet Haase                float f7 = getFloat();
388daf98e941e140e8739458126640183b9f296a2abChet Haase                float f8 = getFloat();
389daf98e941e140e8739458126640183b9f296a2abChet Haase                SkPaint* paint = getPaint();
390daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p",
391daf98e941e140e8739458126640183b9f296a2abChet Haase                    (char*) indent, OP_NAMES[op], bitmap, f1, f2, f3, f4, f5, f6, f7, f8, paint);
392daf98e941e140e8739458126640183b9f296a2abChet Haase                renderer.drawBitmap(bitmap, f1, f2, f3, f4, f5, f6, f7, f8, paint);
393b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
394b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
3955a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy            case DrawBitmapMesh: {
3965a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy                int verticesCount = 0;
3975a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy                uint32_t colorsCount = 0;
3985a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy
3995a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy                SkBitmap* bitmap = getBitmap();
4005a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy                uint32_t meshWidth = getInt();
4015a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy                uint32_t meshHeight = getInt();
4025a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy                float* vertices = getFloats(verticesCount);
4035a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy                bool hasColors = getInt();
4045a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy                int* colors = hasColors ? getInts(colorsCount) : NULL;
4055a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy
406daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]);
4075a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy                renderer.drawBitmapMesh(bitmap, meshWidth, meshHeight, vertices, colors, getPaint());
4085a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy            }
409a566b7c3aada08d37cf08096c972e3e641bed773Romain Guy            break;
410b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case DrawPatch: {
411b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                int32_t* xDivs = NULL;
412b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                int32_t* yDivs = NULL;
4134bb942083a0d4db746adf95349108dd8ef842e32Romain Guy                uint32_t* colors = NULL;
414b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                uint32_t xDivsCount = 0;
415b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                uint32_t yDivsCount = 0;
4164bb942083a0d4db746adf95349108dd8ef842e32Romain Guy                int8_t numColors = 0;
417b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
418b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                SkBitmap* bitmap = getBitmap();
419b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
420b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                xDivs = getInts(xDivsCount);
421b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                yDivs = getInts(yDivsCount);
4224bb942083a0d4db746adf95349108dd8ef842e32Romain Guy                colors = getUInts(numColors);
423b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
424daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]);
4254bb942083a0d4db746adf95349108dd8ef842e32Romain Guy                renderer.drawPatch(bitmap, xDivs, yDivs, colors, xDivsCount, yDivsCount,
4264bb942083a0d4db746adf95349108dd8ef842e32Romain Guy                        numColors, getFloat(), getFloat(), getFloat(), getFloat(), getPaint());
427b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
428b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
429b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case DrawColor: {
430daf98e941e140e8739458126640183b9f296a2abChet Haase                int color = getInt();
431daf98e941e140e8739458126640183b9f296a2abChet Haase                int xferMode = getInt();
432daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s 0x%x %d", (char*) indent, OP_NAMES[op], color, xferMode);
433daf98e941e140e8739458126640183b9f296a2abChet Haase                renderer.drawColor(color, (SkXfermode::Mode) xferMode);
434b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
435b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
436b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case DrawRect: {
437daf98e941e140e8739458126640183b9f296a2abChet Haase                float f1 = getFloat();
438daf98e941e140e8739458126640183b9f296a2abChet Haase                float f2 = getFloat();
439daf98e941e140e8739458126640183b9f296a2abChet Haase                float f3 = getFloat();
440daf98e941e140e8739458126640183b9f296a2abChet Haase                float f4 = getFloat();
441daf98e941e140e8739458126640183b9f296a2abChet Haase                SkPaint* paint = getPaint();
442daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op],
443daf98e941e140e8739458126640183b9f296a2abChet Haase                    f1, f2, f3, f4, paint);
444daf98e941e140e8739458126640183b9f296a2abChet Haase                renderer.drawRect(f1, f2, f3, f4, paint);
445b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
446b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
44701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy            case DrawRoundRect: {
448daf98e941e140e8739458126640183b9f296a2abChet Haase                float f1 = getFloat();
449daf98e941e140e8739458126640183b9f296a2abChet Haase                float f2 = getFloat();
450daf98e941e140e8739458126640183b9f296a2abChet Haase                float f3 = getFloat();
451daf98e941e140e8739458126640183b9f296a2abChet Haase                float f4 = getFloat();
452daf98e941e140e8739458126640183b9f296a2abChet Haase                float f5 = getFloat();
453daf98e941e140e8739458126640183b9f296a2abChet Haase                float f6 = getFloat();
454daf98e941e140e8739458126640183b9f296a2abChet Haase                SkPaint* paint = getPaint();
455daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p",
456daf98e941e140e8739458126640183b9f296a2abChet Haase                    (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, paint);
457daf98e941e140e8739458126640183b9f296a2abChet Haase                renderer.drawRoundRect(f1, f2, f3, f4, f5, f6, paint);
45801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy            }
45901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy            break;
46001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy            case DrawCircle: {
461daf98e941e140e8739458126640183b9f296a2abChet Haase                float f1 = getFloat();
462daf98e941e140e8739458126640183b9f296a2abChet Haase                float f2 = getFloat();
463daf98e941e140e8739458126640183b9f296a2abChet Haase                float f3 = getFloat();
464daf98e941e140e8739458126640183b9f296a2abChet Haase                SkPaint* paint = getPaint();
465daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %p",
466daf98e941e140e8739458126640183b9f296a2abChet Haase                    (char*) indent, OP_NAMES[op], f1, f2, f3, paint);
467daf98e941e140e8739458126640183b9f296a2abChet Haase                renderer.drawCircle(f1, f2, f3, paint);
46801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy            }
46901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy            break;
470c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy            case DrawOval: {
471daf98e941e140e8739458126640183b9f296a2abChet Haase                float f1 = getFloat();
472daf98e941e140e8739458126640183b9f296a2abChet Haase                float f2 = getFloat();
473daf98e941e140e8739458126640183b9f296a2abChet Haase                float f3 = getFloat();
474daf98e941e140e8739458126640183b9f296a2abChet Haase                float f4 = getFloat();
475daf98e941e140e8739458126640183b9f296a2abChet Haase                SkPaint* paint = getPaint();
476daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p",
477daf98e941e140e8739458126640183b9f296a2abChet Haase                    (char*) indent, OP_NAMES[op], f1, f2, f3, f4, paint);
478daf98e941e140e8739458126640183b9f296a2abChet Haase                renderer.drawOval(f1, f2, f3, f4, paint);
479c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy            }
480c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy            break;
4818b2f5267f16c295f12faab810527cd6311997e34Romain Guy            case DrawArc: {
482daf98e941e140e8739458126640183b9f296a2abChet Haase                float f1 = getFloat();
483daf98e941e140e8739458126640183b9f296a2abChet Haase                float f2 = getFloat();
484daf98e941e140e8739458126640183b9f296a2abChet Haase                float f3 = getFloat();
485daf98e941e140e8739458126640183b9f296a2abChet Haase                float f4 = getFloat();
486daf98e941e140e8739458126640183b9f296a2abChet Haase                float f5 = getFloat();
487daf98e941e140e8739458126640183b9f296a2abChet Haase                float f6 = getFloat();
488daf98e941e140e8739458126640183b9f296a2abChet Haase                int i1 = getInt();
489daf98e941e140e8739458126640183b9f296a2abChet Haase                SkPaint* paint = getPaint();
490daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %d, %p",
491daf98e941e140e8739458126640183b9f296a2abChet Haase                    (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, i1, paint);
492daf98e941e140e8739458126640183b9f296a2abChet Haase                renderer.drawArc(f1, f2, f3, f4, f5, f6, i1 == 1, paint);
4938b2f5267f16c295f12faab810527cd6311997e34Romain Guy            }
4948b2f5267f16c295f12faab810527cd6311997e34Romain Guy            break;
495b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case DrawPath: {
496daf98e941e140e8739458126640183b9f296a2abChet Haase                SkPath* path = getPath();
497daf98e941e140e8739458126640183b9f296a2abChet Haase                SkPaint* paint = getPaint();
498daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s %p, %p", (char*) indent, OP_NAMES[op], path, paint);
499daf98e941e140e8739458126640183b9f296a2abChet Haase                renderer.drawPath(path, paint);
500b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
501b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
502b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case DrawLines: {
503b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                int count = 0;
504b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                float* points = getFloats(count);
505daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]);
506b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.drawLines(points, count, getPaint());
507b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
508b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
509b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case DrawText: {
510b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                getText(&text);
511daf98e941e140e8739458126640183b9f296a2abChet Haase                int count = getInt();
512daf98e941e140e8739458126640183b9f296a2abChet Haase                float x = getFloat();
513daf98e941e140e8739458126640183b9f296a2abChet Haase                float y = getFloat();
514daf98e941e140e8739458126640183b9f296a2abChet Haase                SkPaint* paint = getPaint();
515daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op],
516daf98e941e140e8739458126640183b9f296a2abChet Haase                    text.text(), text.length(), count, x, y, paint);
517daf98e941e140e8739458126640183b9f296a2abChet Haase                renderer.drawText(text.text(), text.length(), count, x, y, paint);
518b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
519b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
520b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case ResetShader: {
521daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]);
522b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.resetShader();
523b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
524b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
525b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case SetupShader: {
526daf98e941e140e8739458126640183b9f296a2abChet Haase                SkiaShader* shader = getShader();
527daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], shader);
528daf98e941e140e8739458126640183b9f296a2abChet Haase                renderer.setupShader(shader);
529b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
530b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
531b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case ResetColorFilter: {
532daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]);
533b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.resetColorFilter();
534b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
535b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
536b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case SetupColorFilter: {
537daf98e941e140e8739458126640183b9f296a2abChet Haase                SkiaColorFilter *colorFilter = getColorFilter();
538daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], colorFilter);
539daf98e941e140e8739458126640183b9f296a2abChet Haase                renderer.setupColorFilter(colorFilter);
540b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
541b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
542b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case ResetShadow: {
543daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]);
544b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.resetShadow();
545b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
546b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
547b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case SetupShadow: {
548daf98e941e140e8739458126640183b9f296a2abChet Haase                float radius = getFloat();
549daf98e941e140e8739458126640183b9f296a2abChet Haase                float dx = getFloat();
550daf98e941e140e8739458126640183b9f296a2abChet Haase                float dy = getFloat();
551daf98e941e140e8739458126640183b9f296a2abChet Haase                int color = getInt();
552daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, 0x%x", (char*) indent, OP_NAMES[op],
553daf98e941e140e8739458126640183b9f296a2abChet Haase                    radius, dx, dy, color);
554daf98e941e140e8739458126640183b9f296a2abChet Haase                renderer.setupShadow(radius, dx, dy, color);
555daf98e941e140e8739458126640183b9f296a2abChet Haase            }
556daf98e941e140e8739458126640183b9f296a2abChet Haase            break;
557daf98e941e140e8739458126640183b9f296a2abChet Haase            default:
558daf98e941e140e8739458126640183b9f296a2abChet Haase                DISPLAY_LIST_LOGD("Display List error: op not handled: %s%s",
559daf98e941e140e8739458126640183b9f296a2abChet Haase                    (char*) indent, OP_NAMES[op]);
560daf98e941e140e8739458126640183b9f296a2abChet Haase                break;
561b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy        }
562b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    }
563ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy
564daf98e941e140e8739458126640183b9f296a2abChet Haase    DISPLAY_LIST_LOGD("%sDone, returning %d", (char*) indent + 2, needsInvalidate);
565daf98e941e140e8739458126640183b9f296a2abChet Haase    return needsInvalidate;
566b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy}
567b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
568b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy///////////////////////////////////////////////////////////////////////////////
5694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Base structure
5704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy///////////////////////////////////////////////////////////////////////////////
5714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
5724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain GuyDisplayListRenderer::DisplayListRenderer():
5734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy        mHeap(HEAP_BLOCK_SIZE), mWriter(MIN_WRITER_SIZE) {
5744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    mPathHeap = NULL;
5755977baa1fa24125c148a72699b53e62abaf08960Chet Haase    mDisplayList = NULL;
5764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
5774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
5784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain GuyDisplayListRenderer::~DisplayListRenderer() {
5794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    reset();
5804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
5814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
5824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::reset() {
5834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    if (mPathHeap) {
5844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy        mPathHeap->unref();
5854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy        mPathHeap = NULL;
5864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    }
5874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
5884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    mWriter.reset();
5894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    mHeap.reset();
5904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
5914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    mRCRecorder.reset();
5924aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    mTFRecorder.reset();
5935c13d89c1332fcc499379b9064b891187b75ca32Chet Haase
5945c13d89c1332fcc499379b9064b891187b75ca32Chet Haase    Caches& caches = Caches::getInstance();
5955c13d89c1332fcc499379b9064b891187b75ca32Chet Haase    for (size_t i = 0; i < mBitmapResources.size(); i++) {
5965c13d89c1332fcc499379b9064b891187b75ca32Chet Haase        SkBitmap* resource = mBitmapResources.itemAt(i);
5975c13d89c1332fcc499379b9064b891187b75ca32Chet Haase        caches.resourceCache.decrementRefcount(resource);
5985c13d89c1332fcc499379b9064b891187b75ca32Chet Haase    }
5995c13d89c1332fcc499379b9064b891187b75ca32Chet Haase    mBitmapResources.clear();
600d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase
60143ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy    for (size_t i = 0; i < mShaders.size(); i++) {
60243ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy       caches.resourceCache.decrementRefcount(mShaders.itemAt(i));
60343ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy    }
60424c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy    mShaders.clear();
60524c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy    mShaderMap.clear();
60643ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy
60743ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy    mPaints.clear();
60843ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy    mPaintMap.clear();
609d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase    mMatrices.clear();
6104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
6114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
6124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy///////////////////////////////////////////////////////////////////////////////
6134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Operations
6144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy///////////////////////////////////////////////////////////////////////////////
6154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
6165977baa1fa24125c148a72699b53e62abaf08960Chet HaaseDisplayList* DisplayListRenderer::getDisplayList() {
6175977baa1fa24125c148a72699b53e62abaf08960Chet Haase    if (mDisplayList == NULL) {
6185977baa1fa24125c148a72699b53e62abaf08960Chet Haase        mDisplayList = new DisplayList(*this);
6195977baa1fa24125c148a72699b53e62abaf08960Chet Haase    } else {
6205977baa1fa24125c148a72699b53e62abaf08960Chet Haase        mDisplayList->initFromDisplayListRenderer(*this);
6215977baa1fa24125c148a72699b53e62abaf08960Chet Haase    }
6225977baa1fa24125c148a72699b53e62abaf08960Chet Haase    return mDisplayList;
6235977baa1fa24125c148a72699b53e62abaf08960Chet Haase}
6245977baa1fa24125c148a72699b53e62abaf08960Chet Haase
625b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyvoid DisplayListRenderer::setViewport(int width, int height) {
626b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mOrthoMatrix.loadOrtho(0, width, height, 0, -1, 1);
627b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
628b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mWidth = width;
629b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mHeight = height;
630b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy}
631b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
6327d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guyvoid DisplayListRenderer::prepareDirty(float left, float top,
6337d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy        float right, float bottom, bool opaque) {
634b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mSnapshot = new Snapshot(mFirstSnapshot,
635b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag);
636b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mSaveCount = 1;
637b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mSnapshot->setClip(0.0f, 0.0f, mWidth, mHeight);
63827454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy    mRestoreSaveCount = -1;
63927454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy}
64027454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy
64127454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guyvoid DisplayListRenderer::finish() {
64227454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy    insertRestoreToCount();
64327454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy    OpenGLRenderer::finish();
644b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy}
645b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
646daf98e941e140e8739458126640183b9f296a2abChet Haasevoid DisplayListRenderer::interrupt() {
647daf98e941e140e8739458126640183b9f296a2abChet Haase
648daf98e941e140e8739458126640183b9f296a2abChet Haase}
649daf98e941e140e8739458126640183b9f296a2abChet Haasevoid DisplayListRenderer::resume() {
650daf98e941e140e8739458126640183b9f296a2abChet Haase
651daf98e941e140e8739458126640183b9f296a2abChet Haase}
6524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::acquireContext() {
653daf98e941e140e8739458126640183b9f296a2abChet Haase    // TODO: probably noop instead of calling super
654b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::AcquireContext);
6554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    OpenGLRenderer::acquireContext();
6564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
6574aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
658daf98e941e140e8739458126640183b9f296a2abChet Haasebool DisplayListRenderer::callDrawGLFunction(Functor *functor) {
659daf98e941e140e8739458126640183b9f296a2abChet Haase    addOp(DisplayList::DrawGLFunction);
660daf98e941e140e8739458126640183b9f296a2abChet Haase    addInt((int) functor);
661daf98e941e140e8739458126640183b9f296a2abChet Haase    return false; // No invalidate needed at record-time
662daf98e941e140e8739458126640183b9f296a2abChet Haase}
663daf98e941e140e8739458126640183b9f296a2abChet Haase
6644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::releaseContext() {
665daf98e941e140e8739458126640183b9f296a2abChet Haase    // TODO: probably noop instead of calling super
666b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::ReleaseContext);
6674aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    OpenGLRenderer::releaseContext();
6684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
6694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
6704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::save(int flags) {
671b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::Save);
6724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addInt(flags);
6734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    return OpenGLRenderer::save(flags);
6744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
6754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
6764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restore() {
677b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::Restore);
6784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    OpenGLRenderer::restore();
6794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
6804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
6814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restoreToCount(int saveCount) {
68227454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy    mRestoreSaveCount = saveCount;
6834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    OpenGLRenderer::restoreToCount(saveCount);
6844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
6854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
6864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::saveLayer(float left, float top, float right, float bottom,
6875c13d89c1332fcc499379b9064b891187b75ca32Chet Haase        SkPaint* p, int flags) {
688b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::SaveLayer);
6894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addBounds(left, top, right, bottom);
6904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPaint(p);
6914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addInt(flags);
692b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    return OpenGLRenderer::save(flags);
6934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
6944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
6955b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guyint DisplayListRenderer::saveLayerAlpha(float left, float top, float right, float bottom,
6965b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy        int alpha, int flags) {
6975b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy    addOp(DisplayList::SaveLayerAlpha);
6985b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy    addBounds(left, top, right, bottom);
6995b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy    addInt(alpha);
7005b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy    addInt(flags);
7015b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy    return OpenGLRenderer::save(flags);
7025b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy}
7035b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy
7044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::translate(float dx, float dy) {
705b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::Translate);
7064aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPoint(dx, dy);
7074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    OpenGLRenderer::translate(dx, dy);
7084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
7094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
7104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::rotate(float degrees) {
711b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::Rotate);
7124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addFloat(degrees);
7134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    OpenGLRenderer::rotate(degrees);
7144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
7154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
7164aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::scale(float sx, float sy) {
717b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::Scale);
7184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPoint(sx, sy);
7194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    OpenGLRenderer::scale(sx, sy);
7204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
7214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
722807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guyvoid DisplayListRenderer::skew(float sx, float sy) {
723807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy    addOp(DisplayList::Skew);
724807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy    addPoint(sx, sy);
725807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy    OpenGLRenderer::skew(sx, sy);
726807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy}
727807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy
7284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setMatrix(SkMatrix* matrix) {
729b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::SetMatrix);
7304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addMatrix(matrix);
7314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    OpenGLRenderer::setMatrix(matrix);
7324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
7334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
7344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::concatMatrix(SkMatrix* matrix) {
735b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::ConcatMatrix);
7364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addMatrix(matrix);
7374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    OpenGLRenderer::concatMatrix(matrix);
7384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
7394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
7404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guybool DisplayListRenderer::clipRect(float left, float top, float right, float bottom,
7414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy        SkRegion::Op op) {
742b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::ClipRect);
7434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addBounds(left, top, right, bottom);
7444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addInt(op);
7454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    return OpenGLRenderer::clipRect(left, top, right, bottom, op);
7464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
7474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
748daf98e941e140e8739458126640183b9f296a2abChet Haasebool DisplayListRenderer::drawDisplayList(DisplayList* displayList, uint32_t level) {
7490fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy    addOp(DisplayList::DrawDisplayList);
7500fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy    addDisplayList(displayList);
751daf98e941e140e8739458126640183b9f296a2abChet Haase    return false;
7520fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy}
7530fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy
754ada830f639591b99c3e40de22b07296c7932a33fRomain Guyvoid DisplayListRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* paint) {
7556c319ca1275c8db892c39b48fc54864c949f9171Romain Guy    addOp(DisplayList::DrawLayer);
756ada830f639591b99c3e40de22b07296c7932a33fRomain Guy    addInt((int) layer);
757ada830f639591b99c3e40de22b07296c7932a33fRomain Guy    addPoint(x, y);
7586c319ca1275c8db892c39b48fc54864c949f9171Romain Guy    addPaint(paint);
7596c319ca1275c8db892c39b48fc54864c949f9171Romain Guy}
7606c319ca1275c8db892c39b48fc54864c949f9171Romain Guy
7614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float left, float top,
7625c13d89c1332fcc499379b9064b891187b75ca32Chet Haase        SkPaint* paint) {
763b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::DrawBitmap);
7644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addBitmap(bitmap);
7654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPoint(left, top);
7664aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPaint(paint);
7674aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
7684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
7695c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, SkMatrix* matrix,
7705c13d89c1332fcc499379b9064b891187b75ca32Chet Haase        SkPaint* paint) {
771b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::DrawBitmapMatrix);
7724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addBitmap(bitmap);
7734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addMatrix(matrix);
7744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPaint(paint);
7754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
7764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
7774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop,
7784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy        float srcRight, float srcBottom, float dstLeft, float dstTop,
7795c13d89c1332fcc499379b9064b891187b75ca32Chet Haase        float dstRight, float dstBottom, SkPaint* paint) {
780b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::DrawBitmapRect);
7814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addBitmap(bitmap);
7824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addBounds(srcLeft, srcTop, srcRight, srcBottom);
7834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addBounds(dstLeft, dstTop, dstRight, dstBottom);
7844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPaint(paint);
7854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
7864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
7875a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guyvoid DisplayListRenderer::drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight,
7885a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy        float* vertices, int* colors, SkPaint* paint) {
7895a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy    addOp(DisplayList::DrawBitmapMesh);
7905a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy    addBitmap(bitmap);
7915a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy    addInt(meshWidth);
7925a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy    addInt(meshHeight);
7935a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy    addFloats(vertices, (meshWidth + 1) * (meshHeight + 1) * 2);
7945a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy    if (colors) {
7955a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy        addInt(1);
7965a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy        addInts(colors, (meshWidth + 1) * (meshHeight + 1));
7975a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy    } else {
7985a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy        addInt(0);
7995a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy    }
8005a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy    addPaint(paint);
8015a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy}
8025a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy
8034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int32_t* yDivs,
8044bb942083a0d4db746adf95349108dd8ef842e32Romain Guy        const uint32_t* colors, uint32_t width, uint32_t height, int8_t numColors,
8055c13d89c1332fcc499379b9064b891187b75ca32Chet Haase        float left, float top, float right, float bottom, SkPaint* paint) {
806b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::DrawPatch);
8074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addBitmap(bitmap);
8084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addInts(xDivs, width);
8094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addInts(yDivs, height);
8104bb942083a0d4db746adf95349108dd8ef842e32Romain Guy    addUInts(colors, numColors);
8114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addBounds(left, top, right, bottom);
8124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPaint(paint);
8134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
8144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
8154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawColor(int color, SkXfermode::Mode mode) {
816b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::DrawColor);
8174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addInt(color);
8184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addInt(mode);
8194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
8204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
8214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawRect(float left, float top, float right, float bottom,
8225c13d89c1332fcc499379b9064b891187b75ca32Chet Haase        SkPaint* paint) {
823b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::DrawRect);
8244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addBounds(left, top, right, bottom);
8254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPaint(paint);
8264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
8274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
82801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guyvoid DisplayListRenderer::drawRoundRect(float left, float top, float right, float bottom,
82901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy            float rx, float ry, SkPaint* paint) {
83001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy    addOp(DisplayList::DrawRoundRect);
83101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy    addBounds(left, top, right, bottom);
83201d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy    addPoint(rx, ry);
83301d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy    addPaint(paint);
83401d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy}
83501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy
83601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guyvoid DisplayListRenderer::drawCircle(float x, float y, float radius, SkPaint* paint) {
83701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy    addOp(DisplayList::DrawCircle);
83801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy    addPoint(x, y);
83901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy    addFloat(radius);
84001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy    addPaint(paint);
84101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy}
84201d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy
843c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guyvoid DisplayListRenderer::drawOval(float left, float top, float right, float bottom,
844c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy        SkPaint* paint) {
845c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy    addOp(DisplayList::DrawOval);
846c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy    addBounds(left, top, right, bottom);
847c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy    addPaint(paint);
848c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy}
849c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy
8508b2f5267f16c295f12faab810527cd6311997e34Romain Guyvoid DisplayListRenderer::drawArc(float left, float top, float right, float bottom,
8518b2f5267f16c295f12faab810527cd6311997e34Romain Guy        float startAngle, float sweepAngle, bool useCenter, SkPaint* paint) {
85282d41a515368236e56454bd84023bebd6306f6b7Romain Guy    addOp(DisplayList::DrawArc);
8538b2f5267f16c295f12faab810527cd6311997e34Romain Guy    addBounds(left, top, right, bottom);
8548b2f5267f16c295f12faab810527cd6311997e34Romain Guy    addPoint(startAngle, sweepAngle);
8558b2f5267f16c295f12faab810527cd6311997e34Romain Guy    addInt(useCenter ? 1 : 0);
8568b2f5267f16c295f12faab810527cd6311997e34Romain Guy    addPaint(paint);
8578b2f5267f16c295f12faab810527cd6311997e34Romain Guy}
8588b2f5267f16c295f12faab810527cd6311997e34Romain Guy
8594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawPath(SkPath* path, SkPaint* paint) {
860b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::DrawPath);
8614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPath(path);
8624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPaint(paint);
8634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
8644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
8655c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid DisplayListRenderer::drawLines(float* points, int count, SkPaint* paint) {
866b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::DrawLines);
8674aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addFloats(points, count);
8684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPaint(paint);
8694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
8704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
8714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawText(const char* text, int bytesCount, int count,
8724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy        float x, float y, SkPaint* paint) {
873b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::DrawText);
8744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addText(text, bytesCount);
8754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addInt(count);
8764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPoint(x, y);
8774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPaint(paint);
8784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
8794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
8804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShader() {
881b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::ResetShader);
8824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
8834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
8844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShader(SkiaShader* shader) {
8855c13d89c1332fcc499379b9064b891187b75ca32Chet Haase    addOp(DisplayList::SetupShader);
8865c13d89c1332fcc499379b9064b891187b75ca32Chet Haase    addShader(shader);
8874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
8884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
8894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetColorFilter() {
890b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::ResetColorFilter);
8914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
8924aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
8934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupColorFilter(SkiaColorFilter* filter) {
894ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase    addOp(DisplayList::SetupColorFilter);
895ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase    addColorFilter(filter);
8964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
8974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
8984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShadow() {
899b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::ResetShadow);
9004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
9014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
9024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShadow(float radius, float dx, float dy, int color) {
903b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::SetupShadow);
9044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addFloat(radius);
9054aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPoint(dx, dy);
9064aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addInt(color);
9074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
9084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
9094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace uirenderer
9104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace android
911