Changeset 207666 in webkit


Ignore:
Timestamp:
Oct 21, 2016 3:26:50 AM (7 years ago)
Author:
commit-queue@webkit.org
Message:

[GTK] Several tests crashing on debug bot in (anonymous namespace)::MediaPlayerPrivateGStreamerBase::repaint
https://bugs.webkit.org/show_bug.cgi?id=163511

Patch by Miguel Gomez <magomez@igalia.com> on 2016-10-21
Reviewed by Carlos Garcia Campos.

Perform the video repaint in the main thread when accelerated compositing is disabled. Added a new method to
MediaPlayerClient to get whether accelerated compositing is enabled from the MediaPlayer. This is needed
because mediaPlayerAcceleratedCompositingEnabled() will return false while HTMLMediaElement doesn't have a
RenderVideo, even when accelerated compositing is enabled.

Covered by existent tests.

  • html/HTMLMediaElement.cpp:

(WebCore::HTMLMediaElement::mediaPlayerAcceleratedCompositingEnabled):

  • html/HTMLMediaElement.h:
  • platform/graphics/MediaPlayer.h:

(WebCore::MediaPlayerClient::mediaPlayerAcceleratedCompositingEnabled):

  • platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:

(WebCore::MediaPlayerPrivateGStreamerBase::MediaPlayerPrivateGStreamerBase):
(WebCore::MediaPlayerPrivateGStreamerBase::repaint):
(WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):

  • platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
Location:
trunk/Source/WebCore
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r207665 r207666  
     12016-10-21  Miguel Gomez  <magomez@igalia.com>
     2
     3        [GTK] Several tests crashing on debug bot in (anonymous namespace)::MediaPlayerPrivateGStreamerBase::repaint
     4        https://bugs.webkit.org/show_bug.cgi?id=163511
     5
     6        Reviewed by Carlos Garcia Campos.
     7
     8        Perform the video repaint in the main thread when accelerated compositing is disabled. Added a new method to
     9        MediaPlayerClient to get whether accelerated compositing is enabled from the MediaPlayer. This is needed
     10        because mediaPlayerAcceleratedCompositingEnabled() will return false while HTMLMediaElement doesn't have a
     11        RenderVideo, even when accelerated compositing is enabled.
     12
     13        Covered by existent tests.
     14
     15        * html/HTMLMediaElement.cpp:
     16        (WebCore::HTMLMediaElement::mediaPlayerAcceleratedCompositingEnabled):
     17        * html/HTMLMediaElement.h:
     18        * platform/graphics/MediaPlayer.h:
     19        (WebCore::MediaPlayerClient::mediaPlayerAcceleratedCompositingEnabled):
     20        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
     21        (WebCore::MediaPlayerPrivateGStreamerBase::MediaPlayerPrivateGStreamerBase):
     22        (WebCore::MediaPlayerPrivateGStreamerBase::repaint):
     23        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
     24        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
     25
    1262016-10-21  Adam Bergkvist  <adam.bergkvist@ericsson.com>
    227
  • trunk/Source/WebCore/html/HTMLMediaElement.cpp

    r207458 r207666  
    45804580}
    45814581
     4582bool HTMLMediaElement::mediaPlayerAcceleratedCompositingEnabled()
     4583{
     4584    return document().settings() && document().settings()->acceleratedCompositingEnabled();
     4585}
     4586
    45824587#if PLATFORM(WIN) && USE(AVFOUNDATION)
    45834588
  • trunk/Source/WebCore/html/HTMLMediaElement.h

    r207338 r207666  
    565565    bool mediaPlayerRenderingCanBeAccelerated(MediaPlayer*) override;
    566566    void mediaPlayerRenderingModeChanged(MediaPlayer*) override;
     567    bool mediaPlayerAcceleratedCompositingEnabled() override;
    567568    void mediaPlayerEngineUpdated(MediaPlayer*) override;
    568569    void mediaEngineWasUpdated();
  • trunk/Source/WebCore/platform/graphics/MediaPlayer.h

    r206811 r207666  
    196196    virtual void mediaPlayerRenderingModeChanged(MediaPlayer*) { }
    197197
     198    // whether accelerated compositing is enabled for video rendering
     199    virtual bool mediaPlayerAcceleratedCompositingEnabled() { return false; }
     200
    198201    virtual void mediaPlayerActiveSourceBuffersChanged(const MediaPlayer*) { }
    199202
  • trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp

    r207467 r207666  
    176176    , m_readyState(MediaPlayer::HaveNothing)
    177177    , m_networkState(MediaPlayer::Empty)
    178 #if USE(GSTREAMER_GL)
     178#if USE(GSTREAMER_GL) || USE(COORDINATED_GRAPHICS_THREADED)
    179179    , m_drawTimer(RunLoop::main(), this, &MediaPlayerPrivateGStreamerBase::repaint)
    180180#endif
     
    576576    m_player->repaint();
    577577
    578 #if USE(GSTREAMER_GL)
     578#if USE(GSTREAMER_GL) || USE(COORDINATED_GRAPHICS_THREADED)
    579579    m_drawCondition.notifyOne();
    580580#endif
     
    596596
    597597#if USE(COORDINATED_GRAPHICS_THREADED)
    598 #if USE(GSTREAMER_GL)
    599     if (m_player->client().mediaPlayerRenderingCanBeAccelerated(m_player))
    600         pushTextureToCompositor();
    601     else {
     598    if (!m_player->client().mediaPlayerAcceleratedCompositingEnabled()) {
    602599        LockHolder locker(m_drawMutex);
    603600        m_drawTimer.startOneShot(0);
    604601        m_drawCondition.wait(m_drawMutex);
    605     }
     602        return;
     603    }
     604
     605#if USE(GSTREAMER_GL)
     606    pushTextureToCompositor();
    606607#else
    607     if (m_player->client().mediaPlayerRenderingCanBeAccelerated(m_player)) {
     608    {
    608609        LockHolder lock(m_drawMutex);
    609610        if (!m_platformLayerProxy->scheduleUpdateOnCompositorThread([this] { this->pushTextureToCompositor(); }))
    610611            return;
    611612        m_drawCondition.wait(m_drawMutex);
    612     } else
    613         repaint();
     613    }
    614614#endif
    615615    return;
  • trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h

    r207467 r207666  
    185185    mutable GMutex m_sampleMutex;
    186186    GRefPtr<GstSample> m_sample;
    187 #if USE(GSTREAMER_GL)
     187#if USE(GSTREAMER_GL) || USE(COORDINATED_GRAPHICS_THREADED)
    188188    RunLoop::Timer<MediaPlayerPrivateGStreamerBase> m_drawTimer;
    189189#endif
Note: See TracChangeset for help on using the changeset viewer.