• miu@chromium.org's avatar
    "Buttery Smooth" Tab Capture. · 5b5f2cf9
    miu@chromium.org authored
    There are three main changes being made with the overall goal of
    improving the smoothness of the video coming out of the tab capture
    pipeline:
    
    1. A new AnimatedContentSampler has been added that identifies which
    frames were rendered due to animated content (e.g., a video or Flash
    widget).  VideoCaptureOracle is then informed of exactly which subset of
    frames should be captured from the compositor and provided near-perfect
    frame timestamps for downstream consumers.
    
    2. Additional plumbing in the FrameSubscriber interface to provide the
    damage region of each frame.  This is used by AnimatedContentSampler.
    Also, impls now provide true vsync-based presentation timestamps.
    
    3. Raised the VideoCaptureController buffer pool count from 3 to 5.
    This value is based on the logical capacity of the capture pipeline, and
    not on hardware performance.  Testing revealed that more buffers are
    needed to account for both multiple pipelined GPU readbacks as well as
    those frames undergoing video encoding dowstream.
    
    Testing: Tested mirroring using the usual self_mirroring.zip test
    extension as well as the Google Cast extension to a Chromecast device.
    Tested lock-in/out scenarios with a number of well- and ill- behaving
    video playbacks.  Observed dramatic improvement in end-to-end smoothness
    scores in the lab.  New unit tests to cover new code, and made sure all
    relevant existing unit tests still pass.
    
    BUG=258630
    
    Review URL: https://codereview.chromium.org/418283003
    
    git-svn-id: svn://svn.chromium.org/chrome/trunk/src@287447 0039d316-1c4b-4281-b951-d872f2087c98
    5b5f2cf9
delegated_frame_host.cc 31.9 KB