Loading libs/hwui/PatchCache.cpp +19 −7 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ PatchCache::PatchCache(): mCache(LruCache<PatchDescription, Patch*>::kUnlimitedC mMaxSize = KB(DEFAULT_PATCH_CACHE_SIZE); } mSize = 0; mMeshBuffer = 0; } PatchCache::~PatchCache() { Loading @@ -47,12 +48,19 @@ PatchCache::~PatchCache() { } void PatchCache::init(Caches& caches) { bool created = false; if (!mMeshBuffer) { glGenBuffers(1, &mMeshBuffer); created = true; } caches.bindMeshBuffer(mMeshBuffer); caches.resetVertexPointers(); if (created) { glBufferData(GL_ARRAY_BUFFER, mMaxSize, NULL, GL_DYNAMIC_DRAW); } } /////////////////////////////////////////////////////////////////////////////// // Caching Loading @@ -73,10 +81,15 @@ int PatchCache::PatchDescription::compare(const PatchCache::PatchDescription& lh } void PatchCache::clear() { glDeleteBuffers(1, &mMeshBuffer); clearCache(); if (mMeshBuffer) { Caches::getInstance().unbindMeshBuffer(); glDeleteBuffers(1, &mMeshBuffer); mMeshBuffer = 0; mSize = 0; } } void PatchCache::clearCache() { LruCache<PatchDescription, Patch*>::Iterator i(mCache); Loading Loading @@ -106,9 +119,8 @@ const Patch* PatchCache::get(const AssetAtlas::Entry* entry, } if (vertices) { Caches& caches = Caches::getInstance(); caches.bindMeshBuffer(mMeshBuffer); caches.resetVertexPointers(); // This call ensures the VBO exists and that it is bound init(Caches::getInstance()); // TODO: Simply remove the oldest items until we have enough room // This will require to keep a list of free blocks in the VBO Loading libs/hwui/PatchCache.h +2 −1 Original line number Diff line number Diff line Loading @@ -121,9 +121,10 @@ private: uint32_t mMaxSize; uint32_t mSize; LruCache<PatchDescription, Patch*> mCache; GLuint mMeshBuffer; LruCache<PatchDescription, Patch*> mCache; }; // class PatchCache }; // namespace uirenderer Loading Loading
libs/hwui/PatchCache.cpp +19 −7 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ PatchCache::PatchCache(): mCache(LruCache<PatchDescription, Patch*>::kUnlimitedC mMaxSize = KB(DEFAULT_PATCH_CACHE_SIZE); } mSize = 0; mMeshBuffer = 0; } PatchCache::~PatchCache() { Loading @@ -47,12 +48,19 @@ PatchCache::~PatchCache() { } void PatchCache::init(Caches& caches) { bool created = false; if (!mMeshBuffer) { glGenBuffers(1, &mMeshBuffer); created = true; } caches.bindMeshBuffer(mMeshBuffer); caches.resetVertexPointers(); if (created) { glBufferData(GL_ARRAY_BUFFER, mMaxSize, NULL, GL_DYNAMIC_DRAW); } } /////////////////////////////////////////////////////////////////////////////// // Caching Loading @@ -73,10 +81,15 @@ int PatchCache::PatchDescription::compare(const PatchCache::PatchDescription& lh } void PatchCache::clear() { glDeleteBuffers(1, &mMeshBuffer); clearCache(); if (mMeshBuffer) { Caches::getInstance().unbindMeshBuffer(); glDeleteBuffers(1, &mMeshBuffer); mMeshBuffer = 0; mSize = 0; } } void PatchCache::clearCache() { LruCache<PatchDescription, Patch*>::Iterator i(mCache); Loading Loading @@ -106,9 +119,8 @@ const Patch* PatchCache::get(const AssetAtlas::Entry* entry, } if (vertices) { Caches& caches = Caches::getInstance(); caches.bindMeshBuffer(mMeshBuffer); caches.resetVertexPointers(); // This call ensures the VBO exists and that it is bound init(Caches::getInstance()); // TODO: Simply remove the oldest items until we have enough room // This will require to keep a list of free blocks in the VBO Loading
libs/hwui/PatchCache.h +2 −1 Original line number Diff line number Diff line Loading @@ -121,9 +121,10 @@ private: uint32_t mMaxSize; uint32_t mSize; LruCache<PatchDescription, Patch*> mCache; GLuint mMeshBuffer; LruCache<PatchDescription, Patch*> mCache; }; // class PatchCache }; // namespace uirenderer Loading