Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e9108058 authored by Romain Guy's avatar Romain Guy
Browse files

Tweak layers caching for better performance in Launcher.

Change-Id: Ia6e67699d98f69c8a93385b3ecbdd814c7b16921
parent 1f114a55
Loading
Loading
Loading
Loading
+9 −6
Original line number Diff line number Diff line
@@ -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);
+2 −0
Original line number Diff line number Diff line
@@ -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

+2 −0
Original line number Diff line number Diff line
@@ -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);
+2 −2
Original line number Diff line number Diff line
@@ -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