Skip to content
  • Erik Kurzinger's avatar
    [effects/presentwindows] Avoid potential freeze during fill-gaps · 4348cd56
    Erik Kurzinger authored and Vlad Zahorodnii's avatar Vlad Zahorodnii committed
    Summary:
    When using the natural layout algorithm with the fill-gaps option, a small
    error (less than one) is introduced in windows' aspect ratio each time they are
    enlarged due to floating-point roundoff.
    
    Currently, the algorithm computes the width and height enlargement factors and
    then attempts to enlarge in each of the four possible directions, repeating
    until it can't enlarge any windows any further.  Hence, this aspect ratio error
    can be multiplied by up to four. Especially for small, long, and narrow
    windows, this can result in a total error of greater than one by the end of
    that loop iteration. If this occurs, on subsequent iterations the height
    enlargement factor might then be computed as negative violating some of the
    core assumptions of the algorithm and resulting in the loop iterating endlessly
    until one of the window dimensions overflows, freezing the program for up to
    several minutes.
    
    To fix this, the height enlargement factor should be re-computed based on the
    new width each time the window is enlarged, ensuring the error introduced in
    the aspect ratio never exceeds one.
    
    BUG: 364709
    BUG: 380865
    BUG: 368811
    
    FIXED-IN: 5.15.0
    
    Test Plan:
    The most reliable way to reproduce the freeze seems to be to activate the
    desktop-grid effect while a tool-tip window is fading in.
    Ensure desktop-grid is configured to use present windows, and that present
    windows is configured to use the natural layout algorithm with the fill gaps
    option selected.
    
    The freeze is still intermittent, but using this method should be able to be
    triggered within about 10 tries without this fix.
    After applying the fix, the freeze has never been observed.
    
    Reviewers: #kwin, zzag
    
    Reviewed By: #kwin, zzag
    
    Subscribers: graesslin, kwin, zzag
    
    Tags: #kwin
    
    Differential Revision: https://phabricator.kde.org/D16278
    4348cd56