Merge "Tweak layers caching for better performance in Launcher."
This commit is contained in:
@@ -68,7 +68,6 @@ void LayerCache::setMaxSize(uint32_t maxSize) {
|
||||
void LayerCache::deleteLayer(Layer* layer) {
|
||||
if (layer) {
|
||||
mSize -= layer->width * layer->height * 4;
|
||||
|
||||
glDeleteTextures(1, &layer->texture);
|
||||
delete layer;
|
||||
}
|
||||
@@ -133,12 +132,16 @@ bool LayerCache::put(Layer* layer) {
|
||||
if (size < mMaxSize) {
|
||||
// TODO: Use an LRU
|
||||
while (mSize + size > mMaxSize) {
|
||||
Layer* biggest = mCache.top().mLayer;
|
||||
deleteLayer(biggest);
|
||||
mCache.removeAt(mCache.size() - 1);
|
||||
size_t position = 0;
|
||||
#if LAYER_REMOVE_BIGGEST
|
||||
position = mCache.size() - 1;
|
||||
#endif
|
||||
Layer* victim = mCache.itemAt(position).mLayer;
|
||||
deleteLayer(victim);
|
||||
mCache.removeAt(position);
|
||||
|
||||
LAYER_LOGD(" Deleting layer %.2fx%.2f", biggest->layer.getWidth(),
|
||||
biggest->layer.getHeight());
|
||||
LAYER_LOGD(" Deleting layer %.2fx%.2f", victim->layer.getWidth(),
|
||||
victim->layer.getHeight());
|
||||
}
|
||||
|
||||
LayerEntry entry(layer);
|
||||
|
||||
@@ -30,6 +30,8 @@ namespace uirenderer {
|
||||
// Debug
|
||||
#define DEBUG_LAYERS 0
|
||||
|
||||
// Indicates whether to remove the biggest layers first, or the smaller ones
|
||||
#define LAYER_REMOVE_BIGGEST 0
|
||||
// Textures used by layers must have dimensions multiples of this number
|
||||
#define LAYER_SIZE 64
|
||||
|
||||
|
||||
@@ -441,6 +441,7 @@ bool OpenGLRenderer::createLayer(sp<Snapshot> snapshot, float left, float top,
|
||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
|
||||
layer->texture, 0);
|
||||
|
||||
#if DEBUG_LAYERS
|
||||
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
|
||||
if (status != GL_FRAMEBUFFER_COMPLETE) {
|
||||
LOGE("Framebuffer incomplete (GL error code 0x%x)", status);
|
||||
@@ -453,6 +454,7 @@ bool OpenGLRenderer::createLayer(sp<Snapshot> snapshot, float left, float top,
|
||||
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Clear the FBO
|
||||
glDisable(GL_SCISSOR_TEST);
|
||||
|
||||
@@ -44,8 +44,8 @@
|
||||
// Converts a number of mega-bytes into bytes
|
||||
#define MB(s) s * 1024 * 1024
|
||||
|
||||
#define DEFAULT_TEXTURE_CACHE_SIZE 22.0f
|
||||
#define DEFAULT_LAYER_CACHE_SIZE 4.0f
|
||||
#define DEFAULT_TEXTURE_CACHE_SIZE 20.0f
|
||||
#define DEFAULT_LAYER_CACHE_SIZE 6.0f
|
||||
#define DEFAULT_PATH_CACHE_SIZE 4.0f
|
||||
#define DEFAULT_PATCH_CACHE_SIZE 512
|
||||
#define DEFAULT_GRADIENT_CACHE_SIZE 0.5f
|
||||
|
||||
Reference in New Issue
Block a user