DisplayListRenderer.h revision ed30fd8e9a2d65ee5c8520de55b0089c219f390c
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 <SkRefCnt.h> 264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkTDArray.h> 274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkTSearch.h> 284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 299c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase#include "DisplayListLogBuffer.h" 304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include "OpenGLRenderer.h" 317d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy#include "utils/Functor.h" 324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guynamespace android { 344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guynamespace uirenderer { 354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Defines 384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#define MIN_WRITER_SIZE 16384 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/////////////////////////////////////////////////////////////////////////////// 50b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy// Display list 514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 53b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyclass DisplayListRenderer; 54b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/** 56b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * Replays recorded drawing commands. 574aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy */ 58b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyclass DisplayList { 594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guypublic: 60b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy DisplayList(const DisplayListRenderer& recorder); 61b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy ~DisplayList(); 624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 63ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy // IMPORTANT: Update the intialization of OP_NAMES in the .cpp file 64ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy // when modifying this file 654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy enum Op { 662b1847ea60650a9f68372abe860415f18b55081dRomain Guy Save = 0, 674aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy Restore, 684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy RestoreToCount, 694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SaveLayer, 705b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy SaveLayerAlpha, 714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy Translate, 724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy Rotate, 734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy Scale, 74807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy Skew, 754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SetMatrix, 764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy ConcatMatrix, 774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy ClipRect, 780fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy DrawDisplayList, 796c319ca1275c8db892c39b48fc54864c949f9171Romain Guy DrawLayer, 804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawBitmap, 814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawBitmapMatrix, 824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawBitmapRect, 835a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy DrawBitmapMesh, 844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawPatch, 854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawColor, 864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawRect, 8701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy DrawRoundRect, 8801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy DrawCircle, 89c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy DrawOval, 908b2f5267f16c295f12faab810527cd6311997e34Romain Guy DrawArc, 914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawPath, 924aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawLines, 93ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy DrawPoints, 944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawText, 954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy ResetShader, 964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SetupShader, 974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy ResetColorFilter, 984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SetupColorFilter, 994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy ResetShadow, 100ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy SetupShadow, 101daf98e941e140e8739458126640183b9f296a2abChet Haase DrawGLFunction, 1024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy }; 1034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 104ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy static const char* OP_NAMES[]; 105ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 106d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase void initFromDisplayListRenderer(const DisplayListRenderer& recorder, bool reusing = false); 1075977baa1fa24125c148a72699b53e62abaf08960Chet Haase 108cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy bool replay(OpenGLRenderer& renderer, Rect& dirty, uint32_t level = 0); 109b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 110ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase void output(OpenGLRenderer& renderer, uint32_t level = 0); 111ed30fd8e9a2d65ee5c8520de55b0089c219f390cChet Haase 1129c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase static void outputLogBuffer(int fd); 1139c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase 114b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyprivate: 115b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy void init(); 116b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 117d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase void clearResources(); 118d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase 119b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy class TextContainer { 120b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy public: 121b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy size_t length() const { 122b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return mByteLength; 123b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 124b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 125b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy const char* text() const { 126b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return (const char*) mText; 127b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 128b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 129b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy size_t mByteLength; 130b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy const char* mText; 131b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy }; 132b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 133b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkBitmap* getBitmap() { 1345c13d89c1332fcc499379b9064b891187b75ca32Chet Haase return (SkBitmap*) getInt(); 1355c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 1365c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 1375c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkiaShader* getShader() { 1385c13d89c1332fcc499379b9064b891187b75ca32Chet Haase return (SkiaShader*) getInt(); 139b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 140b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 141ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase SkiaColorFilter* getColorFilter() { 142ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase return (SkiaColorFilter*) getInt(); 143ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase } 144ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase 145b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy inline int getIndex() { 146b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return mReader.readInt(); 147b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 148b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 149b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy inline int getInt() { 150b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return mReader.readInt(); 151b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 152b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1537b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy inline uint32_t getUInt() { 1547b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy return mReader.readU32(); 1557b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy } 1567b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy 157b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkMatrix* getMatrix() { 1585c13d89c1332fcc499379b9064b891187b75ca32Chet Haase return (SkMatrix*) getInt(); 159b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 160b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 161b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkPath* getPath() { 1622fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy return (SkPath*) getInt(); 163b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 164b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 165b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkPaint* getPaint() { 1665c13d89c1332fcc499379b9064b891187b75ca32Chet Haase return (SkPaint*) getInt(); 167b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 168b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1690fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy DisplayList* getDisplayList() { 1700fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy return (DisplayList*) getInt(); 1710fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy } 1720fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy 173b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy inline float getFloat() { 174b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return mReader.readScalar(); 175b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 176b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 177b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int32_t* getInts(uint32_t& count) { 178b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy count = getInt(); 179b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return (int32_t*) mReader.skip(count * sizeof(int32_t)); 180b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 181b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1824bb942083a0d4db746adf95349108dd8ef842e32Romain Guy uint32_t* getUInts(int8_t& count) { 1834bb942083a0d4db746adf95349108dd8ef842e32Romain Guy count = getInt(); 1844bb942083a0d4db746adf95349108dd8ef842e32Romain Guy return (uint32_t*) mReader.skip(count * sizeof(uint32_t)); 1854bb942083a0d4db746adf95349108dd8ef842e32Romain Guy } 1864bb942083a0d4db746adf95349108dd8ef842e32Romain Guy 187b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy float* getFloats(int& count) { 188b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy count = getInt(); 189b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return (float*) mReader.skip(count * sizeof(float)); 190b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 191b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 192b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy void getText(TextContainer* text) { 193b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy size_t length = text->mByteLength = getInt(); 194b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy text->mText = (const char*) mReader.skip(length); 195b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 196b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1975c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Vector<SkBitmap*> mBitmapResources; 198ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase Vector<SkiaColorFilter*> mFilterResources; 199b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 200d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase Vector<SkPaint*> mPaints; 2012fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy Vector<SkPath*> mPaths; 202d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase Vector<SkMatrix*> mMatrices; 20324c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy Vector<SkiaShader*> mShaders; 204d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 205b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mutable SkFlattenableReadBuffer mReader; 206b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy}; 207b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 208b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/////////////////////////////////////////////////////////////////////////////// 209b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy// Renderer 210b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/////////////////////////////////////////////////////////////////////////////// 211b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 212b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/** 213b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * Records drawing commands in a display list for latter playback. 214b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy */ 215b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyclass DisplayListRenderer: public OpenGLRenderer { 216b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guypublic: 217b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy DisplayListRenderer(); 218b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy ~DisplayListRenderer(); 219b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 2205977baa1fa24125c148a72699b53e62abaf08960Chet Haase DisplayList* getDisplayList(); 2215977baa1fa24125c148a72699b53e62abaf08960Chet Haase 222b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy void setViewport(int width, int height); 2237d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy void prepareDirty(float left, float top, float right, float bottom, bool opaque); 22427454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy void finish(); 225b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 226cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy bool callDrawGLFunction(Functor *functor, Rect& dirty); 2274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 228daf98e941e140e8739458126640183b9f296a2abChet Haase void interrupt(); 229daf98e941e140e8739458126640183b9f296a2abChet Haase void resume(); 230daf98e941e140e8739458126640183b9f296a2abChet Haase 2314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy int save(int flags); 2324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void restore(); 2334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void restoreToCount(int saveCount); 2344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy int saveLayer(float left, float top, float right, float bottom, 2365c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* p, int flags); 2375b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int saveLayerAlpha(float left, float top, float right, float bottom, 2385b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int alpha, int flags); 2394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void translate(float dx, float dy); 2414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void rotate(float degrees); 2424aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void scale(float sx, float sy); 243807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy void skew(float sx, float sy); 2444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void setMatrix(SkMatrix* matrix); 2464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void concatMatrix(SkMatrix* matrix); 2474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy bool clipRect(float left, float top, float right, float bottom, SkRegion::Op op); 2494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2507b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy bool drawDisplayList(DisplayList* displayList, uint32_t width, uint32_t height, 2517b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy Rect& dirty, uint32_t level = 0); 252ada830f639591b99c3e40de22b07296c7932a33fRomain Guy void drawLayer(Layer* layer, float x, float y, SkPaint* paint); 2535c13d89c1332fcc499379b9064b891187b75ca32Chet Haase void drawBitmap(SkBitmap* bitmap, float left, float top, SkPaint* paint); 2545c13d89c1332fcc499379b9064b891187b75ca32Chet Haase void drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, SkPaint* paint); 2554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop, 2564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float srcRight, float srcBottom, float dstLeft, float dstTop, 2575c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float dstRight, float dstBottom, SkPaint* paint); 2585a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy void drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight, 2595a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy float* vertices, int* colors, SkPaint* paint); 2604aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int32_t* yDivs, 2614bb942083a0d4db746adf95349108dd8ef842e32Romain Guy const uint32_t* colors, uint32_t width, uint32_t height, int8_t numColors, 2625c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float left, float top, float right, float bottom, SkPaint* paint); 2634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void drawColor(int color, SkXfermode::Mode mode); 2645c13d89c1332fcc499379b9064b891187b75ca32Chet Haase void drawRect(float left, float top, float right, float bottom, SkPaint* paint); 26501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy void drawRoundRect(float left, float top, float right, float bottom, 26601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy float rx, float ry, SkPaint* paint); 26701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy void drawCircle(float x, float y, float radius, SkPaint* paint); 268c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy void drawOval(float left, float top, float right, float bottom, SkPaint* paint); 2698b2f5267f16c295f12faab810527cd6311997e34Romain Guy void drawArc(float left, float top, float right, float bottom, 2708b2f5267f16c295f12faab810527cd6311997e34Romain Guy float startAngle, float sweepAngle, bool useCenter, SkPaint* paint); 2714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void drawPath(SkPath* path, SkPaint* paint); 2725c13d89c1332fcc499379b9064b891187b75ca32Chet Haase void drawLines(float* points, int count, SkPaint* paint); 273ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy void drawPoints(float* points, int count, SkPaint* paint); 2744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void drawText(const char* text, int bytesCount, int count, float x, float y, SkPaint* paint); 2754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void resetShader(); 2774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void setupShader(SkiaShader* shader); 2784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void resetColorFilter(); 2804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void setupColorFilter(SkiaColorFilter* filter); 2814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void resetShadow(); 2834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void setupShadow(float radius, float dx, float dy, int color); 2844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void reset(); 2864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 287b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy const SkWriter32& writeStream() const { 288b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return mWriter; 289b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 290b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 2915c13d89c1332fcc499379b9064b891187b75ca32Chet Haase const Vector<SkBitmap*>& getBitmapResources() const { 2925c13d89c1332fcc499379b9064b891187b75ca32Chet Haase return mBitmapResources; 293b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 294b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 29524c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy const Vector<SkiaShader*>& getShaders() const { 29624c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy return mShaders; 297b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 298b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 299d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase const Vector<SkPaint*>& getPaints() const { 300d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase return mPaints; 3015c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 3025c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 3032fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy const Vector<SkPath*>& getPaths() const { 3042fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy return mPaths; 3052fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy } 3062fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy 307d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase const Vector<SkMatrix*>& getMatrices() const { 308d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase return mMatrices; 309b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 310b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 311ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase const Vector<SkiaColorFilter*>& getFilterResources() const { 312ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase return mFilterResources; 313ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase } 314ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase 3154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyprivate: 31627454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy void insertRestoreToCount() { 31727454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy if (mRestoreSaveCount >= 0) { 31827454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mWriter.writeInt(DisplayList::RestoreToCount); 31927454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy addInt(mRestoreSaveCount); 32027454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mRestoreSaveCount = -1; 32127454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy } 32227454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy } 32327454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy 324b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy inline void addOp(DisplayList::Op drawOp) { 32527454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy insertRestoreToCount(); 3264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeInt(drawOp); 3274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy inline void addInt(int value) { 3304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeInt(value); 3314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3337b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy inline void addSize(uint32_t w, uint32_t h) { 3347b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy mWriter.writeInt(w); 3357b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy mWriter.writeInt(h); 3367b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy } 3377b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy 3384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void addInts(const int32_t* values, uint32_t count) { 339b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mWriter.writeInt(count); 3404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy for (uint32_t i = 0; i < count; i++) { 3414bb942083a0d4db746adf95349108dd8ef842e32Romain Guy mWriter.writeInt(values[i]); 3424bb942083a0d4db746adf95349108dd8ef842e32Romain Guy } 3434bb942083a0d4db746adf95349108dd8ef842e32Romain Guy } 3444bb942083a0d4db746adf95349108dd8ef842e32Romain Guy 3454bb942083a0d4db746adf95349108dd8ef842e32Romain Guy void addUInts(const uint32_t* values, int8_t count) { 3464bb942083a0d4db746adf95349108dd8ef842e32Romain Guy mWriter.writeInt(count); 3474bb942083a0d4db746adf95349108dd8ef842e32Romain Guy for (int8_t i = 0; i < count; i++) { 3484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeInt(values[i]); 3494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy inline void addFloat(float value) { 3534aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(value); 3544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void addFloats(const float* values, int count) { 357b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mWriter.writeInt(count); 3584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy for (int i = 0; i < count; i++) { 3594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(values[i]); 3604aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy inline void addPoint(float x, float y) { 3644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(x); 3654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(y); 3664aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3674aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy inline void addBounds(float left, float top, float right, float bottom) { 3694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(left); 3704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(top); 3714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(right); 3724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(bottom); 3734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy inline void addText(const void* text, size_t byteLength) { 3764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeInt(byteLength); 3774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writePad(text, byteLength); 3784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3802fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy inline void addPath(SkPath* path) { 3812fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy if (!path) { 3822fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy addInt((int) NULL); 3832fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy return; 3842fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy } 3852fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy 3862fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy SkPath* pathCopy = mPathMap.valueFor(path); 3872fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy if (pathCopy == NULL || pathCopy->getGenerationID() != path->getGenerationID()) { 388b29cfbf768eab959b31410aafc0a99e20249e9d7Romain Guy pathCopy = new SkPath(*path); 3892fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPathMap.add(path, pathCopy); 390b29cfbf768eab959b31410aafc0a99e20249e9d7Romain Guy mPaths.add(pathCopy); 3914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3922fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy 3932fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy addInt((int) pathCopy); 3944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3965c13d89c1332fcc499379b9064b891187b75ca32Chet Haase inline void addPaint(SkPaint* paint) { 39724c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy if (!paint) { 3980fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addInt((int) NULL); 399d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase return; 400d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase } 4010fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy 40224c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy SkPaint* paintCopy = mPaintMap.valueFor(paint); 403d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase if (paintCopy == NULL || paintCopy->getGenerationID() != paint->getGenerationID()) { 404d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase paintCopy = new SkPaint(*paint); 405d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mPaintMap.add(paint, paintCopy); 406d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mPaints.add(paintCopy); 407d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase } 4080fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy 4090fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addInt((int) paintCopy); 4100fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy } 4110fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy 4120fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy inline void addDisplayList(DisplayList* displayList) { 4130fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy // TODO: To be safe, the display list should be ref-counted in the 4140fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy // resources cache, but we rely on the caller (UI toolkit) to 4150fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy // do the right thing for now 4160fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addInt((int) displayList); 4174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 4184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4195c13d89c1332fcc499379b9064b891187b75ca32Chet Haase inline void addMatrix(SkMatrix* matrix) { 420d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase // Copying the matrix is cheap and prevents against the user changing the original 421d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase // matrix before the operation that uses it 422d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase addInt((int) new SkMatrix(*matrix)); 4234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 4244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4255c13d89c1332fcc499379b9064b891187b75ca32Chet Haase inline void addBitmap(SkBitmap* bitmap) { 426d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase // Note that this assumes the bitmap is immutable. There are cases this won't handle 427d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase // correctly, such as creating the bitmap from scratch, drawing with it, changing its 428d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase // contents, and drawing again. The only fix would be to always copy it the first time, 429d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase // which doesn't seem worth the extra cycles for this unlikely case. 4300fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addInt((int) bitmap); 4315c13d89c1332fcc499379b9064b891187b75ca32Chet Haase mBitmapResources.add(bitmap); 4325c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Caches& caches = Caches::getInstance(); 4335c13d89c1332fcc499379b9064b891187b75ca32Chet Haase caches.resourceCache.incrementRefcount(bitmap); 4345c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 4354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4365c13d89c1332fcc499379b9064b891187b75ca32Chet Haase inline void addShader(SkiaShader* shader) { 43724c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy if (!shader) { 43824c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy addInt((int) NULL); 43924c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy return; 44024c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy } 44124c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy 44224c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy SkiaShader* shaderCopy = mShaderMap.valueFor(shader); 44324c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy // TODO: We also need to handle generation ID changes in compose shaders 4441f1fcb70b6e43a6b4df0dbab75a34429d4744624Romain Guy if (shaderCopy == NULL || shaderCopy->getGenerationId() != shader->getGenerationId()) { 44524c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy shaderCopy = shader->copy(); 44624c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaderMap.add(shader, shaderCopy); 4471f1fcb70b6e43a6b4df0dbab75a34429d4744624Romain Guy mShaders.add(shaderCopy); 44843ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy Caches::getInstance().resourceCache.incrementRefcount(shaderCopy); 44924c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy } 45024c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy 45124c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy addInt((int) shaderCopy); 4524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 4534aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 454ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase inline void addColorFilter(SkiaColorFilter* colorFilter) { 4550fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addInt((int) colorFilter); 456ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase mFilterResources.add(colorFilter); 457ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase Caches& caches = Caches::getInstance(); 458ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase caches.resourceCache.incrementRefcount(colorFilter); 459ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase } 460ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase 4615c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Vector<SkBitmap*> mBitmapResources; 462ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase Vector<SkiaColorFilter*> mFilterResources; 4634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 464d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase Vector<SkPaint*> mPaints; 4650fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy DefaultKeyedVector<SkPaint*, SkPaint*> mPaintMap; 46624c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy 4672fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy Vector<SkPath*> mPaths; 4682fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy DefaultKeyedVector<SkPath*, SkPath*> mPathMap; 4692fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy 47024c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy Vector<SkiaShader*> mShaders; 47124c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy DefaultKeyedVector<SkiaShader*, SkiaShader*> mShaderMap; 47224c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy 473d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase Vector<SkMatrix*> mMatrices; 474d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 4754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkWriter32 mWriter; 4764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4775977baa1fa24125c148a72699b53e62abaf08960Chet Haase DisplayList *mDisplayList; 4785977baa1fa24125c148a72699b53e62abaf08960Chet Haase 47927454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy int mRestoreSaveCount; 48027454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy 481b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy friend class DisplayList; 482b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 4834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // class DisplayListRenderer 4844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace uirenderer 4864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace android 4874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4885b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#endif // ANDROID_HWUI_DISPLAY_LIST_RENDERER_H 489