Caches.h revision f3a910b423db7ad79cf61518bdd9278c048ad0d8
1fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy/* 2fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy * Copyright (C) 2010 The Android Open Source Project 3fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy * 4fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 5fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy * you may not use this file except in compliance with the License. 6fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy * You may obtain a copy of the License at 7fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy * 8fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy * http://www.apache.org/licenses/LICENSE-2.0 9fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy * 10fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy * Unless required by applicable law or agreed to in writing, software 11fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy * distributed under the License is distributed on an "AS IS" BASIS, 12fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy * See the License for the specific language governing permissions and 14fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy * limitations under the License. 15fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy */ 16fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 175b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#ifndef ANDROID_HWUI_CACHES_H 185b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#define ANDROID_HWUI_CACHES_H 19fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 20a2341a9f6addcd79723965ec5b1a1c5ae0f8bd65Romain Guy#ifndef LOG_TAG 21a2341a9f6addcd79723965ec5b1a1c5ae0f8bd65Romain Guy #define LOG_TAG "OpenGLRenderer" 22a2341a9f6addcd79723965ec5b1a1c5ae0f8bd65Romain Guy#endif 23fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 24fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy#include <utils/Singleton.h> 25fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 267953745dd565167113f8cbfc461bc0521d32d870Romain Guy#include <cutils/compiler.h> 277953745dd565167113f8cbfc461bc0521d32d870Romain Guy 28746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy#include "Extensions.h" 2903750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy#include "FontRenderer.h" 3003750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy#include "GammaFontRenderer.h" 31fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy#include "TextureCache.h" 32fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy#include "LayerCache.h" 33fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy#include "GradientCache.h" 34fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy#include "PatchCache.h" 35fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy#include "ProgramCache.h" 3601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy#include "ShapeCache.h" 37ff26a0c1c905dc1ec53b1bab860b80f2976d59beRomain Guy#include "PathCache.h" 38fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy#include "TextDropShadowCache.h" 39e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy#include "FboCache.h" 405c13d89c1332fcc499379b9064b891187b75ca32Chet Haase#include "ResourceCache.h" 41fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 42fb8b763f762ae21923c58d64caa729b012f40e05Romain Guynamespace android { 43fb8b763f762ae21923c58d64caa729b012f40e05Romain Guynamespace uirenderer { 44fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 4503750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy/////////////////////////////////////////////////////////////////////////////// 4603750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy// Globals 4703750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy/////////////////////////////////////////////////////////////////////////////// 4803750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy 4903750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy#define REQUIRED_TEXTURE_UNITS_COUNT 3 5003750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy 515b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#define REGION_MESH_QUAD_COUNT 512 525b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy 5303750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy// Generates simple and textured vertices 5403750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy#define FV(x, y, u, v) { { x, y }, { u, v } } 5503750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy 5603750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy// This array is never used directly but used as a memcpy source in the 5703750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy// OpenGLRenderer constructor 5803750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guystatic const TextureVertex gMeshVertices[] = { 5903750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy FV(0.0f, 0.0f, 0.0f, 0.0f), 6003750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy FV(1.0f, 0.0f, 1.0f, 0.0f), 6103750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy FV(0.0f, 1.0f, 0.0f, 1.0f), 6203750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy FV(1.0f, 1.0f, 1.0f, 1.0f) 6303750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy}; 6403750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guystatic const GLsizei gMeshStride = sizeof(TextureVertex); 655b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haasestatic const GLsizei gVertexStride = sizeof(Vertex); 665b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haasestatic const GLsizei gAlphaVertexStride = sizeof(AlphaVertex); 6799585adeb4167ca357a72eb866f34c1af944f4b9Chet Haasestatic const GLsizei gAAVertexStride = sizeof(AAVertex); 6803750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guystatic const GLsizei gMeshTextureOffset = 2 * sizeof(float); 6999585adeb4167ca357a72eb866f34c1af944f4b9Chet Haasestatic const GLsizei gVertexAAWidthOffset = 2 * sizeof(float); 7099585adeb4167ca357a72eb866f34c1af944f4b9Chet Haasestatic const GLsizei gVertexAALengthOffset = 3 * sizeof(float); 7103750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guystatic const GLsizei gMeshCount = 4; 7203750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy 7303750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy/////////////////////////////////////////////////////////////////////////////// 7403750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy// Debug 7503750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy/////////////////////////////////////////////////////////////////////////////// 7603750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy 77fb8b763f762ae21923c58d64caa729b012f40e05Romain Guystruct CacheLogger { 78fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy CacheLogger() { 79d6b2a00dd43257d1498b09175bff63663f6cb861Romain Guy INIT_LOGD("Creating OpenGL renderer caches"); 80fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy } 81fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy}; // struct CacheLogger 82fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 8303750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy/////////////////////////////////////////////////////////////////////////////// 8403750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy// Caches 8503750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy/////////////////////////////////////////////////////////////////////////////// 8603750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy 877953745dd565167113f8cbfc461bc0521d32d870Romain Guyclass ANDROID_API Caches: public Singleton<Caches> { 88dd78ccacff83f0714ad90be98b58ad85f5d08c66Chet Haase Caches(); 89fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 90fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy friend class Singleton<Caches>; 91fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 92e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy CacheLogger mLogger; 939bca4793a33d2714b306d69ceb870925a588fe71Romain Guy 94fb8b763f762ae21923c58d64caa729b012f40e05Romain Guypublic: 95bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy enum FlushMode { 966d7475d666baefaa3ba9f0dcee25238739454241Romain Guy kFlushMode_Layers = 0, 976d7475d666baefaa3ba9f0dcee25238739454241Romain Guy kFlushMode_Moderate, 98bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy kFlushMode_Full 99bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy }; 100bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy 101bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy /** 1028ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy * Initializes the cache. 1038ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy */ 1048ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy void init(); 1058ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy 1068ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy /** 107bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy * Flush the cache. 108bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy * 109bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy * @param mode Indicates how much of the cache should be flushed 110bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy */ 111bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy void flush(FlushMode mode); 112bdf7609867a3f886455c51dba91623a86cceb6e2Romain Guy 1135b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy /** 1148ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy * Destroys all resources associated with this cache. This should 1158ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy * be called after a flush(kFlushMode_Full). 1168ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy */ 1178ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy void terminate(); 1188ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy 1198ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy /** 120e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy * Indicates whether the renderer is in debug mode. 121e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy * This debug mode provides limited information to app developers. 122e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy */ 123e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy DebugLevel getDebugLevel() const { 124e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy return mDebugLevel; 125e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy } 126e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy 127e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy /** 128fe48f65922d4a3cc4aefe058cee5acec51504a20Romain Guy * Call this on each frame to ensure that garbage is deleted from 129fe48f65922d4a3cc4aefe058cee5acec51504a20Romain Guy * GPU memory. 130fe48f65922d4a3cc4aefe058cee5acec51504a20Romain Guy */ 131fe48f65922d4a3cc4aefe058cee5acec51504a20Romain Guy void clearGarbage(); 132fe48f65922d4a3cc4aefe058cee5acec51504a20Romain Guy 133fe48f65922d4a3cc4aefe058cee5acec51504a20Romain Guy /** 134ada830f639591b99c3e40de22b07296c7932a33fRomain Guy * Can be used to delete a layer from a non EGL thread. 13557066eb64c9a190d1afc87bb060bbb2d31e5b86cRomain Guy */ 136ada830f639591b99c3e40de22b07296c7932a33fRomain Guy void deleteLayerDeferred(Layer* layer); 13757066eb64c9a190d1afc87bb060bbb2d31e5b86cRomain Guy 13857066eb64c9a190d1afc87bb060bbb2d31e5b86cRomain Guy /** 1395b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy * Binds the VBO used to render simple textured quads. 1405b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy */ 141f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy bool bindMeshBuffer(); 1425b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy 1435b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy /** 1445b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy * Binds the specified VBO if needed. 1455b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy */ 146f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy bool bindMeshBuffer(const GLuint buffer); 1475b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy 1485b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy /** 1495b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy * Unbinds the VBO used to render simple textured quads. 1505b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy */ 151f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy bool unbindMeshBuffer(); 152f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy 153f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy /** 154f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy * Binds an attrib to the specified float vertex pointer. 155f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy * Assumes a stride of gMeshStride and a size of 2. 156f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy */ 157f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy void bindPositionVertexPointer(bool force, GLuint slot, GLvoid* vertices, 158f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy GLsizei stride = gMeshStride); 159f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy 160f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy /** 161f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy * Binds an attrib to the specified float vertex pointer. 162f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy * Assumes a stride of gMeshStride and a size of 2. 163f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy */ 164f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy void bindTexCoordsVertexPointer(bool force, GLuint slot, GLvoid* vertices); 165f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy 166f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy /** 167f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy * Resets the vertex pointers. 168f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy */ 169f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy void resetVertexPointers(); 170f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy void resetTexCoordsVertexPointer(); 17103750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy 1725b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy /** 1735b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy * Returns the mesh used to draw regions. Calling this method will 1745b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy * bind a VBO of type GL_ELEMENT_ARRAY_BUFFER that contains the 1755b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy * indices for the region mesh. 1765b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy */ 1775b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy TextureVertex* getRegionMesh(); 1785b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy 179c15008e72ec00ca20a271c3006dac649fd07533bRomain Guy /** 180c15008e72ec00ca20a271c3006dac649fd07533bRomain Guy * Displays the memory usage of each cache and the total sum. 181c15008e72ec00ca20a271c3006dac649fd07533bRomain Guy */ 182c15008e72ec00ca20a271c3006dac649fd07533bRomain Guy void dumpMemoryUsage(); 1839c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase void dumpMemoryUsage(String8& log); 184c15008e72ec00ca20a271c3006dac649fd07533bRomain Guy 185fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy bool blend; 186fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy GLenum lastSrcMode; 187fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy GLenum lastDstMode; 188fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy Program* currentProgram; 189fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 190746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy // VBO to draw with 19103750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy GLuint meshBuffer; 19203750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy 193746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy // GL extensions 194746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy Extensions extensions; 195746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy 196746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy // Misc 197746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy GLint maxTextureSize; 198746b7401ceb86b5f2805f8c0d3b39ac739152015Romain Guy 199fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy TextureCache textureCache; 200fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy LayerCache layerCache; 201fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy GradientCache gradientCache; 202fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy ProgramCache programCache; 203fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy PathCache pathCache; 20401d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy RoundRectShapeCache roundRectShapeCache; 20501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy CircleShapeCache circleShapeCache; 206c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy OvalShapeCache ovalShapeCache; 207c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy RectShapeCache rectShapeCache; 2088b2f5267f16c295f12faab810527cd6311997e34Romain Guy ArcShapeCache arcShapeCache; 209fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy PatchCache patchCache; 210fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy TextDropShadowCache dropShadowCache; 211e2d345ea67e2960b37bfdc0fc8626d1bfa747404Romain Guy FboCache fboCache; 21211fd654a90359043e17ac78c1a3d6578c38b5c42Romain Guy GammaFontRenderer fontRenderer; 2135c13d89c1332fcc499379b9064b891187b75ca32Chet Haase ResourceCache resourceCache; 21429d8997bd43b7c4ad37fc3d6f91eaafa74913c88Romain Guy 215e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guyprivate: 216f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy GLuint mCurrentBuffer; 217f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy void* mCurrentPositionPointer; 218f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy void* mCurrentTexCoordsPointer; 219f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy 220f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy // Used to render layers 221f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy TextureVertex* mRegionMesh; 222f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy GLuint mRegionMeshIndices; 223f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy 224f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy mutable Mutex mGarbageLock; 225f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy Vector<Layer*> mLayerGarbage; 226f3a910b423db7ad79cf61518bdd9278c048ad0d8Romain Guy 227e190aa69756aecfaffabdd4c6d32cb6b3220d842Romain Guy DebugLevel mDebugLevel; 2288ff6b9ebeeb24a6161ec6098e6bfdf8790ee5695Romain Guy bool mInitialized; 229fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy}; // class Caches 230fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 231fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy}; // namespace uirenderer 232fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy}; // namespace android 233fb8b763f762ae21923c58d64caa729b012f40e05Romain Guy 2345b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#endif // ANDROID_HWUI_CACHES_H 235