Skip to content
  • Pekka Paalanen's avatar
    gl-renderer: garbage-collect old shaders · 1ed2cad8
    Pekka Paalanen authored
    
    
    This adds a heuristic for freeing shader programs that have not been
    needed for a while. The intention is to stop Weston accumulating shader
    programs indefinitely, especially in the future when color management
    will explode the number of possible different shader programs.
    
    Shader programs that have not been used in the past minute are freed,
    except always keep the ten most recently used shader programs anyway.
    The former rule is to ensure we keep shader programs that are actively
    used regardless of how many.  The latter rule is to prevent freeing too
    many shader programs after Weston has been idle for a long time and then
    repaints just a small area. Many of the shader programs could still be
    relevant even though not needed in the first repaint after idle.
    
    The numbers ten and one minute in the above are arbitrary and not based
    on anything.
    
    These heuristics are simpler to implement than e.g. views taking
    references on shader programs. Expiry by time allows shader programs to
    survive a while even after their last user is gone, with the hope of
    being re-used soon. Tracking actual use instead of references also
    adapts to what is actually visible rather than what merely exists.
    
    Keeping the shader list in most recently used order might also make
    gl_renderer_get_program() more efficient on average.
    
    last_repaint_start time is used for shader timestamp to avoid calling
    clock_gettime() more often. Adding that variable is an ABI break, but
    libweston major has already been bumped to 10 since last release.
    
    Signed-off-by: default avatarPekka Paalanen <pekka.paalanen@collabora.com>
    1ed2cad8