Skip to content
  • Owen W. Taylor's avatar
    Reduce overpaint in the window group · 83f8bfd2
    Owen W. Taylor authored
    When we are painting a stack of 5-10 maximized windows, the
    standard bottom-to-top method of drawing every actor results
    in a tremendous amount of overdraw and can easily max out
    the available memory bandwidth on a low-end* graphics chipset.
    It's even worse if window textures are being accessed over
    the AGP bus.
    
    When we have opaque windows, we can go ahead and compute visibility
    ourselves (in classic X-server fashion) and use that information to
    restrict drawing obscured actors.
    
    * Add MutterWindowGroup - a ClutterGroup subclass with logic
      for figuring out obscured regions.
    
    * Add mutter_window_get_obscured_region() to get the region
      obscured by that window.
    
    * Add mutter_shaped_texture_set_clip_region() to hint
      a clip region to the painting code; this is set based on
      the computed visible region of MutterWindowGroup.
    
    * Add tidy_texture_frame_set_needs_paint() to hint that the
      paint can be skipped entirely; this is used when we detect
      that the window shadow is entirely obscured.
    
    http://bugzilla.gnome.org/show_bug.cgi?id=587344
    83f8bfd2