• Christopher Cameron's avatar
    Disable ui::Compositor recycling for SkiaRenderer · 756a4197
    Christopher Cameron authored
    The ui::Compositor recycling path involves resizing the surface to be
    0x0 and ignoring in-flight swaps. This is delicate logic that probably
    doesn't work with SkiaRenderer. There are two DCHECKs that are hit when
    this is enabled that aren't when it isn't.
    
    ui::Compositor recycling was designed to work around poor design
    decision that dates back at least 8 years. This is the design where the
    GLRenderer and all its state (shader cache, etc), is a per-compositor
    object, and there are compositors for every tab (historically) and
    every window (currently).
    
    A concrete example of where this causes problems: If the user presses a
    key in the omnibox, then before any content can be rendered, a whole
    bunch of shaders have to be compiled, because it's a new compositor.
    If the GLRenderer were a global object shared by all compositors, this
    wouldn't happen.
    
    With SkiaRenderer, we happen to have sort-of solved this problem, by
    moving all of the GLRenderer state (DirectRenderer state, to be more
    accurate) into a single GrContext that happens to be shared
    between all compositors.
    
    So, rather than try to understand exactly how the delicate dance of
    ui::Compositor recycling breaks on SkiaRenderer, just disable it.
    
    Bug: 1135663, 1135399, 1135386
    Change-Id: I0d5bf93aaf4584ef26af0e38da40deec0ef9bb16
    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2454089Reviewed-by: default avatarPeng Huang <penghuang@chromium.org>
    Commit-Queue: ccameron <ccameron@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#814515}
    756a4197
recyclable_compositor_mac.h 3.9 KB