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