DisplayListRenderer.cpp revision 01d58e43ede5ca98cbebdd166f9b0c545032c01b
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",
10601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy    "DrawRoundRect",
10701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy    "DrawCircle",
108ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "DrawPath",
109ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "DrawLines",
110ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "DrawText",
111ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "ResetShader",
112ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "SetupShader",
113ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "ResetColorFilter",
114ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "SetupColorFilter",
115ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "ResetShadow",
116ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    "SetupShadow"
117ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy};
118ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy
119b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain GuyDisplayList::DisplayList(const DisplayListRenderer& recorder) {
1205977baa1fa24125c148a72699b53e62abaf08960Chet Haase    initFromDisplayListRenderer(recorder);
1215977baa1fa24125c148a72699b53e62abaf08960Chet Haase}
1225977baa1fa24125c148a72699b53e62abaf08960Chet Haase
1235977baa1fa24125c148a72699b53e62abaf08960Chet HaaseDisplayList::~DisplayList() {
1245977baa1fa24125c148a72699b53e62abaf08960Chet Haase    sk_free((void*) mReader.base());
1255977baa1fa24125c148a72699b53e62abaf08960Chet Haase
1265977baa1fa24125c148a72699b53e62abaf08960Chet Haase    Caches& caches = Caches::getInstance();
1275977baa1fa24125c148a72699b53e62abaf08960Chet Haase
1285977baa1fa24125c148a72699b53e62abaf08960Chet Haase    for (size_t i = 0; i < mBitmapResources.size(); i++) {
1295977baa1fa24125c148a72699b53e62abaf08960Chet Haase        caches.resourceCache.decrementRefcount(mBitmapResources.itemAt(i));
1305977baa1fa24125c148a72699b53e62abaf08960Chet Haase    }
1315977baa1fa24125c148a72699b53e62abaf08960Chet Haase    mBitmapResources.clear();
1325977baa1fa24125c148a72699b53e62abaf08960Chet Haase
13324c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy    for (size_t i = 0; i < mShaders.size(); i++) {
13443ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy        caches.resourceCache.decrementRefcount(mShaders.itemAt(i));
1355977baa1fa24125c148a72699b53e62abaf08960Chet Haase    }
13624c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy    mShaders.clear();
1375977baa1fa24125c148a72699b53e62abaf08960Chet Haase
1385977baa1fa24125c148a72699b53e62abaf08960Chet Haase    for (size_t i = 0; i < mPaints.size(); i++) {
1395977baa1fa24125c148a72699b53e62abaf08960Chet Haase        delete mPaints.itemAt(i);
1405977baa1fa24125c148a72699b53e62abaf08960Chet Haase    }
1415977baa1fa24125c148a72699b53e62abaf08960Chet Haase    mPaints.clear();
1425977baa1fa24125c148a72699b53e62abaf08960Chet Haase
1435977baa1fa24125c148a72699b53e62abaf08960Chet Haase    for (size_t i = 0; i < mMatrices.size(); i++) {
1445977baa1fa24125c148a72699b53e62abaf08960Chet Haase        delete mMatrices.itemAt(i);
1455977baa1fa24125c148a72699b53e62abaf08960Chet Haase    }
1465977baa1fa24125c148a72699b53e62abaf08960Chet Haase    mMatrices.clear();
1475977baa1fa24125c148a72699b53e62abaf08960Chet Haase
1485977baa1fa24125c148a72699b53e62abaf08960Chet Haase    if (mPathHeap) {
1495977baa1fa24125c148a72699b53e62abaf08960Chet Haase        for (int i = 0; i < mPathHeap->count(); i++) {
1505977baa1fa24125c148a72699b53e62abaf08960Chet Haase            caches.pathCache.removeDeferred(&(*mPathHeap)[i]);
1515977baa1fa24125c148a72699b53e62abaf08960Chet Haase        }
1525977baa1fa24125c148a72699b53e62abaf08960Chet Haase        mPathHeap->safeUnref();
1535977baa1fa24125c148a72699b53e62abaf08960Chet Haase    }
1545977baa1fa24125c148a72699b53e62abaf08960Chet Haase}
1555977baa1fa24125c148a72699b53e62abaf08960Chet Haase
1565977baa1fa24125c148a72699b53e62abaf08960Chet Haasevoid DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorder) {
157b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    const SkWriter32& writer = recorder.writeStream();
158b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    init();
159b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
160b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    if (writer.size() == 0) {
161b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy        return;
162b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    }
163b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
164b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    size_t size = writer.size();
165b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    void* buffer = sk_malloc_throw(size);
166b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    writer.flatten(buffer);
167b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mReader.setMemory(buffer, size);
168b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
169b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mRCPlayback.reset(&recorder.mRCRecorder);
170b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mRCPlayback.setupBuffer(mReader);
171b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
172b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mTFPlayback.reset(&recorder.mTFRecorder);
173b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mTFPlayback.setupBuffer(mReader);
174b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
1755c13d89c1332fcc499379b9064b891187b75ca32Chet Haase    Caches& caches = Caches::getInstance();
176b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
1775c13d89c1332fcc499379b9064b891187b75ca32Chet Haase    const Vector<SkBitmap*> &bitmapResources = recorder.getBitmapResources();
1785c13d89c1332fcc499379b9064b891187b75ca32Chet Haase    for (size_t i = 0; i < bitmapResources.size(); i++) {
1795c13d89c1332fcc499379b9064b891187b75ca32Chet Haase        SkBitmap* resource = bitmapResources.itemAt(i);
1805c13d89c1332fcc499379b9064b891187b75ca32Chet Haase        mBitmapResources.add(resource);
1815c13d89c1332fcc499379b9064b891187b75ca32Chet Haase        caches.resourceCache.incrementRefcount(resource);
182b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    }
183d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase
18424c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy    const Vector<SkiaShader*> &shaders = recorder.getShaders();
18524c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy    for (size_t i = 0; i < shaders.size(); i++) {
18643ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy        SkiaShader* shader = shaders.itemAt(i);
18743ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy        mShaders.add(shader);
18843ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy        caches.resourceCache.incrementRefcount(shader);
189b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    }
190b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
191d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase    const Vector<SkPaint*> &paints = recorder.getPaints();
192d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase    for (size_t i = 0; i < paints.size(); i++) {
193d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase        mPaints.add(paints.itemAt(i));
194d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase    }
195d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase
196d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase    const Vector<SkMatrix*> &matrices = recorder.getMatrices();
197d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase    for (size_t i = 0; i < matrices.size(); i++) {
198d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase        mMatrices.add(matrices.itemAt(i));
199d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase    }
200d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase
201b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mPathHeap = recorder.mPathHeap;
2029e10841c27d973b930e1b49a099c69d866659505Romain Guy    if (mPathHeap) {
2039e10841c27d973b930e1b49a099c69d866659505Romain Guy        mPathHeap->safeRef();
2049e10841c27d973b930e1b49a099c69d866659505Romain Guy    }
205b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy}
206b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
207b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyvoid DisplayList::init() {
208b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mPathHeap = NULL;
209b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy}
210b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
211ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guyvoid DisplayList::replay(OpenGLRenderer& renderer, uint32_t level) {
212b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    TextContainer text;
213b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mReader.rewind();
214b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
215ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#if DEBUG_DISPLAY_LIST
216ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    uint32_t count = (level + 1) * 2;
217ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    char indent[count + 1];
218ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    for (uint32_t i = 0; i < count; i++) {
219ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy        indent[i] = ' ';
220ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    }
221ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    indent[count] = '\0';
222ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    DISPLAY_LIST_LOGD("%sStart display list (%p)", (char*) indent + 2, this);
223ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#endif
224b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
225ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    int saveCount = renderer.getSaveCount() - 1;
226b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    while (!mReader.eof()) {
2275b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy        int op = mReader.readInt();
228ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy        DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]);
229ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy
2305b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy        switch (op) {
231b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case AcquireContext: {
232b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.acquireContext();
233b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
234b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
235b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case ReleaseContext: {
236b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.releaseContext();
237b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
238b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
239b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case Save: {
240b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.save(getInt());
241b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
242b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
243b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case Restore: {
244b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.restore();
245b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
246b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
247b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case RestoreToCount: {
248b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.restoreToCount(saveCount + getInt());
249b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
250b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
251b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case SaveLayer: {
252b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.saveLayer(getFloat(), getFloat(), getFloat(), getFloat(),
253b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                        getPaint(), getInt());
254b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
255b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
2565b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy            case SaveLayerAlpha: {
2575b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy                renderer.saveLayerAlpha(getFloat(), getFloat(), getFloat(), getFloat(),
2585b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy                        getInt(), getInt());
2595b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy            }
2605b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy            break;
261b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case Translate: {
262b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.translate(getFloat(), getFloat());
263b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
264b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
265b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case Rotate: {
266b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.rotate(getFloat());
267b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
268b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
269b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case Scale: {
270b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.scale(getFloat(), getFloat());
271b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
272b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
273807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy            case Skew: {
274807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy                renderer.skew(getFloat(), getFloat());
275807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy            }
276807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy            break;
277b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case SetMatrix: {
278b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.setMatrix(getMatrix());
279b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
280b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
281b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case ConcatMatrix: {
282b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.concatMatrix(getMatrix());
283b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
284b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
285b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case ClipRect: {
286b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.clipRect(getFloat(), getFloat(), getFloat(), getFloat(),
287b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                        (SkRegion::Op) getInt());
288b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
289b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
2900fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy            case DrawDisplayList: {
291ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy                renderer.drawDisplayList(getDisplayList(), level + 1);
2920fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy            }
2930fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy            break;
2946c319ca1275c8db892c39b48fc54864c949f9171Romain Guy            case DrawLayer: {
295ada830f639591b99c3e40de22b07296c7932a33fRomain Guy                renderer.drawLayer((Layer*) getInt(), getFloat(), getFloat(), getPaint());
2966c319ca1275c8db892c39b48fc54864c949f9171Romain Guy            }
2976c319ca1275c8db892c39b48fc54864c949f9171Romain Guy            break;
298b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case DrawBitmap: {
299b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.drawBitmap(getBitmap(), getFloat(), getFloat(), getPaint());
300b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
301b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
302b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case DrawBitmapMatrix: {
303b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.drawBitmap(getBitmap(), getMatrix(), getPaint());
304b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
305b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
306b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case DrawBitmapRect: {
307b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.drawBitmap(getBitmap(), getFloat(), getFloat(), getFloat(), getFloat(),
308b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                        getFloat(), getFloat(), getFloat(), getFloat(), getPaint());
309b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
310b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
311b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case DrawPatch: {
312b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                int32_t* xDivs = NULL;
313b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                int32_t* yDivs = NULL;
3144bb942083a0d4db746adf95349108dd8ef842e32Romain Guy                uint32_t* colors = NULL;
315b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                uint32_t xDivsCount = 0;
316b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                uint32_t yDivsCount = 0;
3174bb942083a0d4db746adf95349108dd8ef842e32Romain Guy                int8_t numColors = 0;
318b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
319b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                SkBitmap* bitmap = getBitmap();
320b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
321b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                xDivs = getInts(xDivsCount);
322b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                yDivs = getInts(yDivsCount);
3234bb942083a0d4db746adf95349108dd8ef842e32Romain Guy                colors = getUInts(numColors);
324b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
3254bb942083a0d4db746adf95349108dd8ef842e32Romain Guy                renderer.drawPatch(bitmap, xDivs, yDivs, colors, xDivsCount, yDivsCount,
3264bb942083a0d4db746adf95349108dd8ef842e32Romain Guy                        numColors, getFloat(), getFloat(), getFloat(), getFloat(), getPaint());
327b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
328b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
329b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case DrawColor: {
330b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.drawColor(getInt(), (SkXfermode::Mode) getInt());
331b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
332b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
333b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case DrawRect: {
334b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.drawRect(getFloat(), getFloat(), getFloat(), getFloat(), getPaint());
335b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
336b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
33701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy            case DrawRoundRect: {
33801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy                renderer.drawRoundRect(getFloat(), getFloat(), getFloat(), getFloat(),
33901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy                        getFloat(), getFloat(), getPaint());
34001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy            }
34101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy            break;
34201d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy            case DrawCircle: {
34301d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy                renderer.drawCircle(getFloat(), getFloat(), getFloat(), getPaint());
34401d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy            }
34501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy            break;
346b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case DrawPath: {
347b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.drawPath(getPath(), getPaint());
348b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
349b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
350b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case DrawLines: {
351b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                int count = 0;
352b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                float* points = getFloats(count);
353b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.drawLines(points, count, getPaint());
354b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
355b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
356b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case DrawText: {
357b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                getText(&text);
358b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.drawText(text.text(), text.length(), getInt(),
359b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                        getFloat(), getFloat(), getPaint());
360b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
361b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
362b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case ResetShader: {
363b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.resetShader();
364b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
365b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
366b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case SetupShader: {
3675c13d89c1332fcc499379b9064b891187b75ca32Chet Haase                renderer.setupShader(getShader());
368b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
369b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
370b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case ResetColorFilter: {
371b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.resetColorFilter();
372b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
373b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
374b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case SetupColorFilter: {
375ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase                renderer.setupColorFilter(getColorFilter());
376b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
377b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
378b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case ResetShadow: {
379b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.resetShadow();
380b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
381b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
382b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            case SetupShadow: {
383b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy                renderer.setupShadow(getFloat(), getFloat(), getFloat(), getInt());
384b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            }
385b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            break;
386b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy        }
387b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    }
388ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy
389ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy    DISPLAY_LIST_LOGD("%sDone", (char*) indent + 2);
390b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy}
391b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
392b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy///////////////////////////////////////////////////////////////////////////////
3934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Base structure
3944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy///////////////////////////////////////////////////////////////////////////////
3954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
3964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain GuyDisplayListRenderer::DisplayListRenderer():
3974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy        mHeap(HEAP_BLOCK_SIZE), mWriter(MIN_WRITER_SIZE) {
3984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    mPathHeap = NULL;
3995977baa1fa24125c148a72699b53e62abaf08960Chet Haase    mDisplayList = NULL;
4004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
4014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
4024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain GuyDisplayListRenderer::~DisplayListRenderer() {
4034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    reset();
4044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
4054aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
4064aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::reset() {
4074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    if (mPathHeap) {
4084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy        mPathHeap->unref();
4094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy        mPathHeap = NULL;
4104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    }
4114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
4124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    mWriter.reset();
4134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    mHeap.reset();
4144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
4154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    mRCRecorder.reset();
4164aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    mTFRecorder.reset();
4175c13d89c1332fcc499379b9064b891187b75ca32Chet Haase
4185c13d89c1332fcc499379b9064b891187b75ca32Chet Haase    Caches& caches = Caches::getInstance();
4195c13d89c1332fcc499379b9064b891187b75ca32Chet Haase    for (size_t i = 0; i < mBitmapResources.size(); i++) {
4205c13d89c1332fcc499379b9064b891187b75ca32Chet Haase        SkBitmap* resource = mBitmapResources.itemAt(i);
4215c13d89c1332fcc499379b9064b891187b75ca32Chet Haase        caches.resourceCache.decrementRefcount(resource);
4225c13d89c1332fcc499379b9064b891187b75ca32Chet Haase    }
4235c13d89c1332fcc499379b9064b891187b75ca32Chet Haase    mBitmapResources.clear();
424d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase
42543ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy    for (size_t i = 0; i < mShaders.size(); i++) {
42643ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy       caches.resourceCache.decrementRefcount(mShaders.itemAt(i));
42743ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy    }
42824c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy    mShaders.clear();
42924c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy    mShaderMap.clear();
43043ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy
43143ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy    mPaints.clear();
43243ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy    mPaintMap.clear();
433d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase    mMatrices.clear();
4344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
4354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
4364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy///////////////////////////////////////////////////////////////////////////////
4374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Operations
4384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy///////////////////////////////////////////////////////////////////////////////
4394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
4405977baa1fa24125c148a72699b53e62abaf08960Chet HaaseDisplayList* DisplayListRenderer::getDisplayList() {
4415977baa1fa24125c148a72699b53e62abaf08960Chet Haase    if (mDisplayList == NULL) {
4425977baa1fa24125c148a72699b53e62abaf08960Chet Haase        mDisplayList = new DisplayList(*this);
4435977baa1fa24125c148a72699b53e62abaf08960Chet Haase    } else {
4445977baa1fa24125c148a72699b53e62abaf08960Chet Haase        mDisplayList->initFromDisplayListRenderer(*this);
4455977baa1fa24125c148a72699b53e62abaf08960Chet Haase    }
4465977baa1fa24125c148a72699b53e62abaf08960Chet Haase    return mDisplayList;
4475977baa1fa24125c148a72699b53e62abaf08960Chet Haase}
4485977baa1fa24125c148a72699b53e62abaf08960Chet Haase
449b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyvoid DisplayListRenderer::setViewport(int width, int height) {
450b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mOrthoMatrix.loadOrtho(0, width, height, 0, -1, 1);
451b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
452b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mWidth = width;
453b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mHeight = height;
454b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy}
455b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
4566b7bd24659fb175fe1f0e97c86c18969918b496aRomain Guyvoid DisplayListRenderer::prepare(bool opaque) {
457b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mSnapshot = new Snapshot(mFirstSnapshot,
458b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy            SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag);
459b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mSaveCount = 1;
460b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    mSnapshot->setClip(0.0f, 0.0f, mWidth, mHeight);
461b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy}
462b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy
4634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::acquireContext() {
464b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::AcquireContext);
4654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    OpenGLRenderer::acquireContext();
4664aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
4674aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
4684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::releaseContext() {
469b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::ReleaseContext);
4704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    OpenGLRenderer::releaseContext();
4714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
4724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
4734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::save(int flags) {
474b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::Save);
4754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addInt(flags);
4764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    return OpenGLRenderer::save(flags);
4774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
4784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
4794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restore() {
480b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::Restore);
4814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    OpenGLRenderer::restore();
4824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
4834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
4844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restoreToCount(int saveCount) {
485b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::RestoreToCount);
4864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addInt(saveCount);
4874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    OpenGLRenderer::restoreToCount(saveCount);
4884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
4894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
4904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::saveLayer(float left, float top, float right, float bottom,
4915c13d89c1332fcc499379b9064b891187b75ca32Chet Haase        SkPaint* p, int flags) {
492b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::SaveLayer);
4934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addBounds(left, top, right, bottom);
4944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPaint(p);
4954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addInt(flags);
496b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    return OpenGLRenderer::save(flags);
4974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
4984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
4995b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guyint DisplayListRenderer::saveLayerAlpha(float left, float top, float right, float bottom,
5005b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy        int alpha, int flags) {
5015b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy    addOp(DisplayList::SaveLayerAlpha);
5025b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy    addBounds(left, top, right, bottom);
5035b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy    addInt(alpha);
5045b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy    addInt(flags);
5055b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy    return OpenGLRenderer::save(flags);
5065b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy}
5075b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy
5084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::translate(float dx, float dy) {
509b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::Translate);
5104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPoint(dx, dy);
5114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    OpenGLRenderer::translate(dx, dy);
5124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
5134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
5144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::rotate(float degrees) {
515b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::Rotate);
5164aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addFloat(degrees);
5174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    OpenGLRenderer::rotate(degrees);
5184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
5194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
5204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::scale(float sx, float sy) {
521b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::Scale);
5224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPoint(sx, sy);
5234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    OpenGLRenderer::scale(sx, sy);
5244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
5254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
526807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guyvoid DisplayListRenderer::skew(float sx, float sy) {
527807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy    addOp(DisplayList::Skew);
528807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy    addPoint(sx, sy);
529807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy    OpenGLRenderer::skew(sx, sy);
530807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy}
531807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy
5324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setMatrix(SkMatrix* matrix) {
533b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::SetMatrix);
5344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addMatrix(matrix);
5354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    OpenGLRenderer::setMatrix(matrix);
5364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
5374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
5384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::concatMatrix(SkMatrix* matrix) {
539b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::ConcatMatrix);
5404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addMatrix(matrix);
5414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    OpenGLRenderer::concatMatrix(matrix);
5424aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
5434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
5444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guybool DisplayListRenderer::clipRect(float left, float top, float right, float bottom,
5454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy        SkRegion::Op op) {
546b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::ClipRect);
5474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addBounds(left, top, right, bottom);
5484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addInt(op);
5494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    return OpenGLRenderer::clipRect(left, top, right, bottom, op);
5504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
5514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
552ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guyvoid DisplayListRenderer::drawDisplayList(DisplayList* displayList, uint32_t level) {
5530fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy    addOp(DisplayList::DrawDisplayList);
5540fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy    addDisplayList(displayList);
5550fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy}
5560fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy
557ada830f639591b99c3e40de22b07296c7932a33fRomain Guyvoid DisplayListRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* paint) {
5586c319ca1275c8db892c39b48fc54864c949f9171Romain Guy    addOp(DisplayList::DrawLayer);
559ada830f639591b99c3e40de22b07296c7932a33fRomain Guy    addInt((int) layer);
560ada830f639591b99c3e40de22b07296c7932a33fRomain Guy    addPoint(x, y);
5616c319ca1275c8db892c39b48fc54864c949f9171Romain Guy    addPaint(paint);
5626c319ca1275c8db892c39b48fc54864c949f9171Romain Guy}
5636c319ca1275c8db892c39b48fc54864c949f9171Romain Guy
5644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float left, float top,
5655c13d89c1332fcc499379b9064b891187b75ca32Chet Haase        SkPaint* paint) {
566b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::DrawBitmap);
5674aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addBitmap(bitmap);
5684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPoint(left, top);
5694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPaint(paint);
5704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
5714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
5725c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, SkMatrix* matrix,
5735c13d89c1332fcc499379b9064b891187b75ca32Chet Haase        SkPaint* paint) {
574b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::DrawBitmapMatrix);
5754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addBitmap(bitmap);
5764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addMatrix(matrix);
5774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPaint(paint);
5784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
5794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
5804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop,
5814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy        float srcRight, float srcBottom, float dstLeft, float dstTop,
5825c13d89c1332fcc499379b9064b891187b75ca32Chet Haase        float dstRight, float dstBottom, SkPaint* paint) {
583b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::DrawBitmapRect);
5844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addBitmap(bitmap);
5854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addBounds(srcLeft, srcTop, srcRight, srcBottom);
5864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addBounds(dstLeft, dstTop, dstRight, dstBottom);
5874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPaint(paint);
5884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
5894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
5904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int32_t* yDivs,
5914bb942083a0d4db746adf95349108dd8ef842e32Romain Guy        const uint32_t* colors, uint32_t width, uint32_t height, int8_t numColors,
5925c13d89c1332fcc499379b9064b891187b75ca32Chet Haase        float left, float top, float right, float bottom, SkPaint* paint) {
593b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::DrawPatch);
5944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addBitmap(bitmap);
5954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addInts(xDivs, width);
5964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addInts(yDivs, height);
5974bb942083a0d4db746adf95349108dd8ef842e32Romain Guy    addUInts(colors, numColors);
5984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addBounds(left, top, right, bottom);
5994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPaint(paint);
6004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
6014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
6024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawColor(int color, SkXfermode::Mode mode) {
603b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::DrawColor);
6044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addInt(color);
6054aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addInt(mode);
6064aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
6074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
6084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawRect(float left, float top, float right, float bottom,
6095c13d89c1332fcc499379b9064b891187b75ca32Chet Haase        SkPaint* paint) {
610b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::DrawRect);
6114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addBounds(left, top, right, bottom);
6124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPaint(paint);
6134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
6144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
61501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guyvoid DisplayListRenderer::drawRoundRect(float left, float top, float right, float bottom,
61601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy            float rx, float ry, SkPaint* paint) {
61701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy    addOp(DisplayList::DrawRoundRect);
61801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy    addBounds(left, top, right, bottom);
61901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy    addPoint(rx, ry);
62001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy    addPaint(paint);
62101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy}
62201d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy
62301d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guyvoid DisplayListRenderer::drawCircle(float x, float y, float radius, SkPaint* paint) {
62401d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy    addOp(DisplayList::DrawCircle);
62501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy    addPoint(x, y);
62601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy    addFloat(radius);
62701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy    addPaint(paint);
62801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy}
62901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy
6304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawPath(SkPath* path, SkPaint* paint) {
631b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::DrawPath);
6324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPath(path);
6334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPaint(paint);
6344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
6354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
6365c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid DisplayListRenderer::drawLines(float* points, int count, SkPaint* paint) {
637b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::DrawLines);
6384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addFloats(points, count);
6394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPaint(paint);
6404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
6414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
6424aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawText(const char* text, int bytesCount, int count,
6434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy        float x, float y, SkPaint* paint) {
644b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::DrawText);
6454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addText(text, bytesCount);
6464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addInt(count);
6474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPoint(x, y);
6484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPaint(paint);
6494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
6504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
6514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShader() {
652b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::ResetShader);
6534aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
6544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
6554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShader(SkiaShader* shader) {
6565c13d89c1332fcc499379b9064b891187b75ca32Chet Haase    addOp(DisplayList::SetupShader);
6575c13d89c1332fcc499379b9064b891187b75ca32Chet Haase    addShader(shader);
6584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
6594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
6604aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetColorFilter() {
661b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::ResetColorFilter);
6624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
6634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
6644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupColorFilter(SkiaColorFilter* filter) {
665ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase    addOp(DisplayList::SetupColorFilter);
666ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase    addColorFilter(filter);
6674aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
6684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
6694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShadow() {
670b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::ResetShadow);
6714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
6724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
6734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShadow(float radius, float dx, float dy, int color) {
674b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy    addOp(DisplayList::SetupShadow);
6754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addFloat(radius);
6764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addPoint(dx, dy);
6774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy    addInt(color);
6784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}
6794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy
6804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace uirenderer
6814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace android
682