DisplayListRenderer.h revision c1cd9ba335b293f11e1082447ef08e474710a05f
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 175b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#ifndef ANDROID_HWUI_DISPLAY_LIST_RENDERER_H 185b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#define ANDROID_HWUI_DISPLAY_LIST_RENDERER_H 194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkChunkAlloc.h> 214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkFlattenable.h> 224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkMatrix.h> 234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkPaint.h> 244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkPath.h> 254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkPictureFlat.h> 264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkRefCnt.h> 274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkTDArray.h> 284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkTSearch.h> 294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include "OpenGLRenderer.h" 314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guynamespace android { 334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guynamespace uirenderer { 344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Defines 374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#define MIN_WRITER_SIZE 16384 404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#define HEAP_BLOCK_SIZE 4096 414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 42ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy// Debug 43ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#if DEBUG_DISPLAY_LIST 44ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy #define DISPLAY_LIST_LOGD(...) LOGD(__VA_ARGS__) 45ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#else 46ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy #define DISPLAY_LIST_LOGD(...) 47ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#endif 48ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Helpers 514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 534aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyclass PathHeap: public SkRefCnt { 544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guypublic: 557975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy PathHeap(); 567975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy PathHeap(SkFlattenableReadBuffer& buffer); 577975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy ~PathHeap(); 584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 597975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy int append(const SkPath& path); 604aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy int count() const { return mPaths.count(); } 624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 63b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkPath& operator[](int index) const { 644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return *mPaths[index]; 654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 664aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 677975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy void flatten(SkFlattenableWriteBuffer& buffer) const; 684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyprivate: 704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkChunkAlloc mHeap; 714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkTDArray<SkPath*> mPaths; 724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; 734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 75b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy// Display list 764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 78b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyclass DisplayListRenderer; 79b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/** 81b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * Replays recorded drawing commands. 824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy */ 83b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyclass DisplayList { 844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guypublic: 85b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy DisplayList(const DisplayListRenderer& recorder); 86b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy ~DisplayList(); 874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 88ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy // IMPORTANT: Update the intialization of OP_NAMES in the .cpp file 89ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy // when modifying this file 904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy enum Op { 91ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy AcquireContext = 0, 924aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy ReleaseContext, 934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy Save, 944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy Restore, 954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy RestoreToCount, 964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SaveLayer, 975b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy SaveLayerAlpha, 984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy Translate, 994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy Rotate, 1004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy Scale, 101807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy Skew, 1024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SetMatrix, 1034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy ConcatMatrix, 1044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy ClipRect, 1050fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy DrawDisplayList, 1066c319ca1275c8db892c39b48fc54864c949f9171Romain Guy DrawLayer, 1074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawBitmap, 1084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawBitmapMatrix, 1094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawBitmapRect, 1105a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy DrawBitmapMesh, 1114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawPatch, 1124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawColor, 1134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawRect, 11401d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy DrawRoundRect, 11501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy DrawCircle, 116c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy DrawOval, 1174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawPath, 1184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawLines, 1194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawText, 1204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy ResetShader, 1214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SetupShader, 1224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy ResetColorFilter, 1234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SetupColorFilter, 1244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy ResetShadow, 125ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy SetupShadow, 1264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy }; 1274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 128ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy static const char* OP_NAMES[]; 129ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 1305977baa1fa24125c148a72699b53e62abaf08960Chet Haase void initFromDisplayListRenderer(const DisplayListRenderer& recorder); 1315977baa1fa24125c148a72699b53e62abaf08960Chet Haase 132ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy void replay(OpenGLRenderer& renderer, uint32_t level = 0); 133b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 134b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyprivate: 135b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy void init(); 136b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 137b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy class TextContainer { 138b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy public: 139b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy size_t length() const { 140b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return mByteLength; 141b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 142b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 143b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy const char* text() const { 144b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return (const char*) mText; 145b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 146b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 147b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy size_t mByteLength; 148b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy const char* mText; 149b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy }; 150b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 151b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkBitmap* getBitmap() { 1525c13d89c1332fcc499379b9064b891187b75ca32Chet Haase return (SkBitmap*) getInt(); 1535c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 1545c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 1555c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkiaShader* getShader() { 1565c13d89c1332fcc499379b9064b891187b75ca32Chet Haase return (SkiaShader*) getInt(); 157b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 158b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 159ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase SkiaColorFilter* getColorFilter() { 160ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase return (SkiaColorFilter*) getInt(); 161ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase } 162ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase 163b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy inline int getIndex() { 164b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return mReader.readInt(); 165b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 166b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 167b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy inline int getInt() { 168b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return mReader.readInt(); 169b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 170b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 171b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkMatrix* getMatrix() { 1725c13d89c1332fcc499379b9064b891187b75ca32Chet Haase return (SkMatrix*) getInt(); 173b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 174b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 175b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkPath* getPath() { 176b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return &(*mPathHeap)[getInt() - 1]; 177b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 178b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 179b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkPaint* getPaint() { 1805c13d89c1332fcc499379b9064b891187b75ca32Chet Haase return (SkPaint*) getInt(); 181b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 182b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1830fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy DisplayList* getDisplayList() { 1840fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy return (DisplayList*) getInt(); 1850fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy } 1860fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy 187b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy inline float getFloat() { 188b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return mReader.readScalar(); 189b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 190b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 191b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int32_t* getInts(uint32_t& count) { 192b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy count = getInt(); 193b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return (int32_t*) mReader.skip(count * sizeof(int32_t)); 194b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 195b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1964bb942083a0d4db746adf95349108dd8ef842e32Romain Guy uint32_t* getUInts(int8_t& count) { 1974bb942083a0d4db746adf95349108dd8ef842e32Romain Guy count = getInt(); 1984bb942083a0d4db746adf95349108dd8ef842e32Romain Guy return (uint32_t*) mReader.skip(count * sizeof(uint32_t)); 1994bb942083a0d4db746adf95349108dd8ef842e32Romain Guy } 2004bb942083a0d4db746adf95349108dd8ef842e32Romain Guy 201b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy float* getFloats(int& count) { 202b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy count = getInt(); 203b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return (float*) mReader.skip(count * sizeof(float)); 204b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 205b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 206b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy void getText(TextContainer* text) { 207b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy size_t length = text->mByteLength = getInt(); 208b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy text->mText = (const char*) mReader.skip(length); 209b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 210b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 211b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy PathHeap* mPathHeap; 212b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 2135c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Vector<SkBitmap*> mBitmapResources; 214ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase Vector<SkiaColorFilter*> mFilterResources; 215b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 216d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase Vector<SkPaint*> mPaints; 217d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase Vector<SkMatrix*> mMatrices; 21824c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy Vector<SkiaShader*> mShaders; 219d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 220b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mutable SkFlattenableReadBuffer mReader; 221b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 222b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkRefCntPlayback mRCPlayback; 223b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkTypefacePlayback mTFPlayback; 224b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy}; 225b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 226b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/////////////////////////////////////////////////////////////////////////////// 227b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy// Renderer 228b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/////////////////////////////////////////////////////////////////////////////// 229b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 230b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/** 231b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * Records drawing commands in a display list for latter playback. 232b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy */ 233b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyclass DisplayListRenderer: public OpenGLRenderer { 234b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guypublic: 235b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy DisplayListRenderer(); 236b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy ~DisplayListRenderer(); 237b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 2385977baa1fa24125c148a72699b53e62abaf08960Chet Haase DisplayList* getDisplayList(); 2395977baa1fa24125c148a72699b53e62abaf08960Chet Haase 240b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy void setViewport(int width, int height); 2416b7bd24659fb175fe1f0e97c86c18969918b496aRomain Guy void prepare(bool opaque); 24227454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy void finish(); 243b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 2444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void acquireContext(); 2454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void releaseContext(); 2464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy int save(int flags); 2484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void restore(); 2494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void restoreToCount(int saveCount); 2504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy int saveLayer(float left, float top, float right, float bottom, 2525c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* p, int flags); 2535b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int saveLayerAlpha(float left, float top, float right, float bottom, 2545b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int alpha, int flags); 2554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void translate(float dx, float dy); 2574aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void rotate(float degrees); 2584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void scale(float sx, float sy); 259807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy void skew(float sx, float sy); 2604aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void setMatrix(SkMatrix* matrix); 2624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void concatMatrix(SkMatrix* matrix); 2634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy bool clipRect(float left, float top, float right, float bottom, SkRegion::Op op); 2654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 266ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy void drawDisplayList(DisplayList* displayList, uint32_t level = 0); 267ada830f639591b99c3e40de22b07296c7932a33fRomain Guy void drawLayer(Layer* layer, float x, float y, SkPaint* paint); 2685c13d89c1332fcc499379b9064b891187b75ca32Chet Haase void drawBitmap(SkBitmap* bitmap, float left, float top, SkPaint* paint); 2695c13d89c1332fcc499379b9064b891187b75ca32Chet Haase void drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, SkPaint* paint); 2704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop, 2714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float srcRight, float srcBottom, float dstLeft, float dstTop, 2725c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float dstRight, float dstBottom, SkPaint* paint); 2735a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy void drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight, 2745a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy float* vertices, int* colors, SkPaint* paint); 2754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int32_t* yDivs, 2764bb942083a0d4db746adf95349108dd8ef842e32Romain Guy const uint32_t* colors, uint32_t width, uint32_t height, int8_t numColors, 2775c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float left, float top, float right, float bottom, SkPaint* paint); 2784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void drawColor(int color, SkXfermode::Mode mode); 2795c13d89c1332fcc499379b9064b891187b75ca32Chet Haase void drawRect(float left, float top, float right, float bottom, SkPaint* paint); 28001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy void drawRoundRect(float left, float top, float right, float bottom, 28101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy float rx, float ry, SkPaint* paint); 28201d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy void drawCircle(float x, float y, float radius, SkPaint* paint); 283c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy void drawOval(float left, float top, float right, float bottom, SkPaint* paint); 2844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void drawPath(SkPath* path, SkPaint* paint); 2855c13d89c1332fcc499379b9064b891187b75ca32Chet Haase void drawLines(float* points, int count, SkPaint* paint); 2864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void drawText(const char* text, int bytesCount, int count, float x, float y, SkPaint* paint); 2874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void resetShader(); 2894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void setupShader(SkiaShader* shader); 2904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void resetColorFilter(); 2924aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void setupColorFilter(SkiaColorFilter* filter); 2934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void resetShadow(); 2954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void setupShadow(float radius, float dx, float dy, int color); 2964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void reset(); 2984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 299b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy const SkWriter32& writeStream() const { 300b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return mWriter; 301b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 302b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 3035c13d89c1332fcc499379b9064b891187b75ca32Chet Haase const Vector<SkBitmap*>& getBitmapResources() const { 3045c13d89c1332fcc499379b9064b891187b75ca32Chet Haase return mBitmapResources; 305b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 306b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 30724c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy const Vector<SkiaShader*>& getShaders() const { 30824c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy return mShaders; 309b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 310b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 311d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase const Vector<SkPaint*>& getPaints() const { 312d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase return mPaints; 3135c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 3145c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 315d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase const Vector<SkMatrix*>& getMatrices() const { 316d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase return mMatrices; 317b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 318b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 319ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase const Vector<SkiaColorFilter*>& getFilterResources() const { 320ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase return mFilterResources; 321ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase } 322ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase 3234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyprivate: 32427454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy void insertRestoreToCount() { 32527454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy if (mRestoreSaveCount >= 0) { 32627454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mWriter.writeInt(DisplayList::RestoreToCount); 32727454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy addInt(mRestoreSaveCount); 32827454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mRestoreSaveCount = -1; 32927454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy } 33027454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy } 33127454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy 332b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy inline void addOp(DisplayList::Op drawOp) { 33327454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy insertRestoreToCount(); 3344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeInt(drawOp); 3354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy inline void addInt(int value) { 3384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeInt(value); 3394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void addInts(const int32_t* values, uint32_t count) { 342b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mWriter.writeInt(count); 3434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy for (uint32_t i = 0; i < count; i++) { 3444bb942083a0d4db746adf95349108dd8ef842e32Romain Guy mWriter.writeInt(values[i]); 3454bb942083a0d4db746adf95349108dd8ef842e32Romain Guy } 3464bb942083a0d4db746adf95349108dd8ef842e32Romain Guy } 3474bb942083a0d4db746adf95349108dd8ef842e32Romain Guy 3484bb942083a0d4db746adf95349108dd8ef842e32Romain Guy void addUInts(const uint32_t* values, int8_t count) { 3494bb942083a0d4db746adf95349108dd8ef842e32Romain Guy mWriter.writeInt(count); 3504bb942083a0d4db746adf95349108dd8ef842e32Romain Guy for (int8_t i = 0; i < count; i++) { 3514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeInt(values[i]); 3524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3534aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy inline void addFloat(float value) { 3564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(value); 3574aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void addFloats(const float* values, int count) { 360b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mWriter.writeInt(count); 3614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy for (int i = 0; i < count; i++) { 3624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(values[i]); 3634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3664aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy inline void addPoint(float x, float y) { 3674aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(x); 3684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(y); 3694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy inline void addBounds(float left, float top, float right, float bottom) { 3724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(left); 3734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(top); 3744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(right); 3754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(bottom); 3764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy inline void addText(const void* text, size_t byteLength) { 3794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeInt(byteLength); 3804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writePad(text, byteLength); 3814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy inline void addPath(const SkPath* path) { 3844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy if (mPathHeap == NULL) { 3854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mPathHeap = new PathHeap(); 3864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(mPathHeap->append(*path)); 3884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3905c13d89c1332fcc499379b9064b891187b75ca32Chet Haase inline void addPaint(SkPaint* paint) { 39124c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy if (!paint) { 3920fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addInt((int) NULL); 393d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase return; 394d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase } 3950fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy 39624c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy SkPaint* paintCopy = mPaintMap.valueFor(paint); 397d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase if (paintCopy == NULL || paintCopy->getGenerationID() != paint->getGenerationID()) { 398d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase paintCopy = new SkPaint(*paint); 399d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mPaintMap.add(paint, paintCopy); 400d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mPaints.add(paintCopy); 401d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase } 4020fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy 4030fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addInt((int) paintCopy); 4040fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy } 4050fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy 4060fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy inline void addDisplayList(DisplayList* displayList) { 4070fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy // TODO: To be safe, the display list should be ref-counted in the 4080fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy // resources cache, but we rely on the caller (UI toolkit) to 4090fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy // do the right thing for now 4100fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addInt((int) displayList); 4114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 4124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4135c13d89c1332fcc499379b9064b891187b75ca32Chet Haase inline void addMatrix(SkMatrix* matrix) { 414d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase // Copying the matrix is cheap and prevents against the user changing the original 415d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase // matrix before the operation that uses it 416d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase addInt((int) new SkMatrix(*matrix)); 4174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 4184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4195c13d89c1332fcc499379b9064b891187b75ca32Chet Haase inline void addBitmap(SkBitmap* bitmap) { 420d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase // Note that this assumes the bitmap is immutable. There are cases this won't handle 421d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase // correctly, such as creating the bitmap from scratch, drawing with it, changing its 422d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase // contents, and drawing again. The only fix would be to always copy it the first time, 423d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase // which doesn't seem worth the extra cycles for this unlikely case. 4240fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addInt((int) bitmap); 4255c13d89c1332fcc499379b9064b891187b75ca32Chet Haase mBitmapResources.add(bitmap); 4265c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Caches& caches = Caches::getInstance(); 4275c13d89c1332fcc499379b9064b891187b75ca32Chet Haase caches.resourceCache.incrementRefcount(bitmap); 4285c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 4294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4305c13d89c1332fcc499379b9064b891187b75ca32Chet Haase inline void addShader(SkiaShader* shader) { 43124c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy if (!shader) { 43224c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy addInt((int) NULL); 43324c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy return; 43424c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy } 43524c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy 43624c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy SkiaShader* shaderCopy = mShaderMap.valueFor(shader); 43724c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy // TODO: We also need to handle generation ID changes in compose shaders 4381f1fcb70b6e43a6b4df0dbab75a34429d4744624Romain Guy if (shaderCopy == NULL || shaderCopy->getGenerationId() != shader->getGenerationId()) { 43924c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy shaderCopy = shader->copy(); 44024c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaderMap.add(shader, shaderCopy); 4411f1fcb70b6e43a6b4df0dbab75a34429d4744624Romain Guy mShaders.add(shaderCopy); 44243ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy Caches::getInstance().resourceCache.incrementRefcount(shaderCopy); 44324c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy } 44424c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy 44524c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy addInt((int) shaderCopy); 4464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 4474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 448ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase inline void addColorFilter(SkiaColorFilter* colorFilter) { 4490fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addInt((int) colorFilter); 450ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase mFilterResources.add(colorFilter); 451ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase Caches& caches = Caches::getInstance(); 452ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase caches.resourceCache.incrementRefcount(colorFilter); 453ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase } 454ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase 4554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkChunkAlloc mHeap; 4564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4575c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Vector<SkBitmap*> mBitmapResources; 458ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase Vector<SkiaColorFilter*> mFilterResources; 4594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 460d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase Vector<SkPaint*> mPaints; 4610fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy DefaultKeyedVector<SkPaint*, SkPaint*> mPaintMap; 46224c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy 46324c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy Vector<SkiaShader*> mShaders; 46424c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy DefaultKeyedVector<SkiaShader*, SkiaShader*> mShaderMap; 46524c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy 466d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase Vector<SkMatrix*> mMatrices; 467d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 4684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy PathHeap* mPathHeap; 4694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkWriter32 mWriter; 4704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkRefCntRecorder mRCRecorder; 4724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkRefCntRecorder mTFRecorder; 4734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4745977baa1fa24125c148a72699b53e62abaf08960Chet Haase DisplayList *mDisplayList; 4755977baa1fa24125c148a72699b53e62abaf08960Chet Haase 47627454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy int mRestoreSaveCount; 47727454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy 478b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy friend class DisplayList; 479b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 4804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // class DisplayListRenderer 4814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace uirenderer 4834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace android 4844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4855b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#endif // ANDROID_HWUI_DISPLAY_LIST_RENDERER_H 486