[webkit-changes] [WebKit/WebKit] ea7c20: Cherry-pick 261072 at main (5c473b4124bf). https://bu...

Žan Doberšek noreply at github.com
Fri Mar 3 03:50:02 PST 2023


  Branch: refs/heads/webkitglib/2.40
  Home:   https://github.com/WebKit/WebKit
  Commit: ea7c20dfa5aa52dff6d8f740f37e7872177dc835
      https://github.com/WebKit/WebKit/commit/ea7c20dfa5aa52dff6d8f740f37e7872177dc835
  Author: Žan Doberšek <zdobersek at igalia.com>
  Date:   2023-03-03 (Fri, 03 Mar 2023)

  Changed paths:
    M Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp

  Log Message:
  -----------
  Cherry-pick 261072 at main (5c473b4124bf). https://bugs.webkit.org/show_bug.cgi?id=253244

    [GStreamer] Establish locking when mapping gbm_bo objects for software-decoded data upload
    https://bugs.webkit.org/show_bug.cgi?id=253244

    Reviewed by Philippe Normand.

    When separate GStreamer pipelines are established for different video elements,
    mapping the gbm_bo objects in parallel across different threads can lead to
    crashes and GPU memory corruption.

    The different gbm_bo objects originate from a single gbm_device, which is fine.
    Spawning gbm_bo objects and retrieving different attributes from them isn't
    showing as problematic, but libgbm thread safety guarantees still need research.

    Mapping gbm_bo objects in parallel is proving as problematic, and the length of
    the upload of software-decoded data into the mapped memory regions takes long
    enough for these problems to inhibit stability. To avoid that, a global lock is
    provided on the gbm_bo-mapping Destination class inside the
    MediaPlayerPrivateGStreamer::pushDMABufToCompositor() method. This lock is
    activated whenever data for a given plane is moved over from the GStreamer-based
    software decoder into the gbm_bo object.

    * Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
    (WebCore::MediaPlayerPrivateGStreamer::pushDMABufToCompositor):

    Canonical link: https://commits.webkit.org/261072@main


  Commit: 49971be69094bede8d25c2129b98eaf33dcb85c4
      https://github.com/WebKit/WebKit/commit/49971be69094bede8d25c2129b98eaf33dcb85c4
  Author: Žan Doberšek <zdobersek at igalia.com>
  Date:   2023-03-03 (Fri, 03 Mar 2023)

  Changed paths:
    M Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp

  Log Message:
  -----------
  Cherry-pick 261077 at main (9b1c8b87c0a4). https://bugs.webkit.org/show_bug.cgi?id=253245

    [GStreamer] Improve GBM swapchain buffer handling
    https://bugs.webkit.org/show_bug.cgi?id=253245

    Reviewed by Philippe Normand.

    In MediaPlayerPrivateGStreamer::pushDMABufToCompositor(), when allocating
    buffer objects from the GBMBufferSwapchain to upload the software-decoded
    video data, do a null check on the retrieved buffer. This avoids proceeding with
    a null object that would be returned when for whatever perverse reason the
    swapchain is drained of available buffers.

    One such reason is when allocating, retrieving and locking buffers from the
    swapchain under an inactive proxy. In that case, the buffer doesn't end up
    being pushed into the composition, and it's then also never released and made
    available for reuse, effectively draining the swapchain.

    This case is avoidable through earlier detection of an inactive proxy. The proxy
    lock and is-active check are unified between different codepaths and done before
    deciding which codepath is taken.

    * Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
    (WebCore::MediaPlayerPrivateGStreamer::pushDMABufToCompositor):

    Canonical link: https://commits.webkit.org/261077@main


Compare: https://github.com/WebKit/WebKit/compare/90e92d2420f1...49971be69094


More information about the webkit-changes mailing list