Changeset 55657 in webkit


Ignore:
Timestamp:
Mar 8, 2010 12:13:58 AM (14 years ago)
Author:
Philippe Normand
Message:

2010-03-04 Philippe Normand <pnormand@igalia.com>

Reviewed by Eric Seidel.

[GStreamer] replace g_idle_add / g_timeout_add calls with Timers in the gstreamer player
https://bugs.webkit.org/show_bug.cgi?id=35735

Replaced g_idle_add calls with Timers immediately started once
only. The g_timeout_add was replaced by a periodic Timer.

  • platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: (WebCore::MediaPlayerPrivate::MediaPlayerPrivate): (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate): (WebCore::MediaPlayerPrivate::volumeChangedTimerFired): (WebCore::MediaPlayerPrivate::volumeChanged): (WebCore::MediaPlayerPrivate::processBufferingStats): (WebCore::MediaPlayerPrivate::fillTimerFired): (WebCore::MediaPlayerPrivate::maxTimeLoaded): (WebCore::MediaPlayerPrivate::updateStates): (WebCore::MediaPlayerPrivate::muteChangedTimerFired): (WebCore::MediaPlayerPrivate::muteChanged):
  • platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
Location:
trunk/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r55654 r55657  
     12010-03-04  Philippe Normand  <pnormand@igalia.com>
     2
     3        Reviewed by Eric Seidel.
     4
     5        [GStreamer] replace g_idle_add / g_timeout_add calls with Timers in the gstreamer player
     6        https://bugs.webkit.org/show_bug.cgi?id=35735
     7
     8        Replaced g_idle_add calls with Timers immediately started once
     9        only. The g_timeout_add was replaced by a periodic Timer.
     10
     11        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
     12        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
     13        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
     14        (WebCore::MediaPlayerPrivate::volumeChangedTimerFired):
     15        (WebCore::MediaPlayerPrivate::volumeChanged):
     16        (WebCore::MediaPlayerPrivate::processBufferingStats):
     17        (WebCore::MediaPlayerPrivate::fillTimerFired):
     18        (WebCore::MediaPlayerPrivate::maxTimeLoaded):
     19        (WebCore::MediaPlayerPrivate::updateStates):
     20        (WebCore::MediaPlayerPrivate::muteChangedTimerFired):
     21        (WebCore::MediaPlayerPrivate::muteChanged):
     22        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
     23
    1242010-03-07  David Levin  <levin@chromium.org>
    225
  • trunk/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp

    r55463 r55657  
    178178}
    179179
    180 gboolean notifyVolumeIdleCallback(gpointer data)
    181 {
    182     MediaPlayerPrivate* mp = reinterpret_cast<MediaPlayerPrivate*>(data);
    183     mp->volumeChangedCallback();
    184     return FALSE;
    185 }
    186 
    187180void mediaPlayerPrivateMuteChangedCallback(GObject *element, GParamSpec *pspec, gpointer data)
    188181{
     
    190183    MediaPlayerPrivate* mp = reinterpret_cast<MediaPlayerPrivate*>(data);
    191184    mp->muteChanged();
    192 }
    193 
    194 gboolean notifyMuteIdleCallback(gpointer data)
    195 {
    196     MediaPlayerPrivate* mp = reinterpret_cast<MediaPlayerPrivate*>(data);
    197     mp->muteChangedCallback();
    198     return FALSE;
    199 }
    200 
    201 gboolean bufferingTimeoutCallback(gpointer data)
    202 {
    203     MediaPlayerPrivate* mp = reinterpret_cast<MediaPlayerPrivate*>(data);
    204     return mp->queryBufferingStats();
    205185}
    206186
     
    308288    , m_playbackRate(1)
    309289    , m_errorOccured(false)
    310     , m_volumeIdleId(0)
    311290    , m_mediaDuration(0)
    312     , m_muteIdleId(0)
    313291    , m_startedBuffering(false)
    314     , m_fillTimeoutId(0)
     292    , m_fillTimer(this, &MediaPlayerPrivate::fillTimerFired)
    315293    , m_maxTimeLoaded(0)
    316294    , m_fillStatus(0)
     
    322300MediaPlayerPrivate::~MediaPlayerPrivate()
    323301{
    324     if (m_fillTimeoutId) {
    325         g_source_remove(m_fillTimeoutId);
    326         m_fillTimeoutId = 0;
    327     }
    328 
    329     if (m_volumeIdleId) {
    330         g_source_remove(m_volumeIdleId);
    331         m_volumeIdleId = 0;
    332     }
    333 
    334     if (m_muteIdleId) {
    335         g_source_remove(m_muteIdleId);
    336         m_muteIdleId = 0;
    337     }
     302    if (m_fillTimer.isActive())
     303        m_fillTimer.stop();
    338304
    339305    if (m_buffer)
     
    592558}
    593559
    594 void MediaPlayerPrivate::volumeChangedCallback()
     560void MediaPlayerPrivate::volumeChangedTimerFired(Timer<MediaPlayerPrivate>*)
    595561{
    596562    double volume;
     
    601567void MediaPlayerPrivate::volumeChanged()
    602568{
    603     if (m_volumeIdleId)
    604         g_source_remove(m_volumeIdleId);
    605     m_volumeIdleId = g_idle_add((GSourceFunc) notifyVolumeIdleCallback, this);
     569    Timer<MediaPlayerPrivate> volumeChangedTimer(this, &MediaPlayerPrivate::volumeChangedTimerFired);
     570    volumeChangedTimer.startOneShot(0);
    606571}
    607572
     
    689654        m_startedBuffering = true;
    690655
    691         if (m_fillTimeoutId > 0)
    692             g_source_remove(m_fillTimeoutId);
    693 
    694         m_fillTimeoutId = g_timeout_add(200, (GSourceFunc) bufferingTimeoutCallback, this);
    695     }
    696 }
    697 
    698 bool MediaPlayerPrivate::queryBufferingStats()
     656        if (m_fillTimer.isActive())
     657            m_fillTimer.stop();
     658
     659        m_fillTimer.startRepeating(0.2);
     660    }
     661}
     662
     663void MediaPlayerPrivate::fillTimerFired(Timer<MediaPlayerPrivate>*)
    699664{
    700665    GstQuery* query = gst_query_new_buffering(GST_FORMAT_PERCENT);
     
    702667    if (!gst_element_query(m_playBin, query)) {
    703668        gst_query_unref(query);
    704         return TRUE;
     669        return;
    705670    }
    706671
     
    729694    if (m_fillStatus != 100.0) {
    730695        updateStates();
    731         return TRUE;
     696        return;
    732697    }
    733698
     
    735700    // connection is cut. Buffering is done, remove the fill source
    736701    // from the main loop.
    737     m_fillTimeoutId = 0;
     702    m_fillTimer.stop();
    738703    m_startedBuffering = false;
    739704    updateStates();
    740     return FALSE;
    741705}
    742706
     
    760724
    761725    float loaded = m_maxTimeLoaded;
    762     if (!loaded && !m_fillTimeoutId)
     726    if (!loaded && !m_fillTimer.isActive())
    763727        loaded = duration();
    764728    LOG_VERBOSE(Media, "maxTimeLoaded: %f", loaded);
     
    851815
    852816        // Is on-disk buffering in progress?
    853         if (m_fillTimeoutId) {
     817        if (m_fillTimer.isActive()) {
    854818            m_networkState = MediaPlayer::Loading;
    855819            // Buffering has just started, we should now have enough
     
    11151079}
    11161080
    1117 void MediaPlayerPrivate::muteChangedCallback()
     1081void MediaPlayerPrivate::muteChangedTimerFired(Timer<MediaPlayerPrivate>*)
    11181082{
    11191083    gboolean muted;
     
    11241088void MediaPlayerPrivate::muteChanged()
    11251089{
    1126     if (m_muteIdleId)
    1127         g_source_remove(m_muteIdleId);
    1128 
    1129     m_muteIdleId = g_idle_add((GSourceFunc) notifyMuteIdleCallback, this);
     1090    Timer<MediaPlayerPrivate> muteChangedTimer(this, &MediaPlayerPrivate::muteChangedTimerFired);
     1091    muteChangedTimer.startOneShot(0);
    11301092}
    11311093
  • trunk/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h

    r55463 r55657  
    8181            void setVolume(float);
    8282            void volumeChanged();
    83             void volumeChangedCallback();
     83            void volumeChangedTimerFired(Timer<MediaPlayerPrivate>*);
    8484
    8585            bool supportsMuting() const;
    8686            void setMuted(bool);
    8787            void muteChanged();
    88             void muteChangedCallback();
     88            void muteChangedTimerFired(Timer<MediaPlayerPrivate>*);
    8989
    9090            void setPreload(MediaPlayer::Preload);
    91             bool queryBufferingStats();
     91            void fillTimerFired(Timer<MediaPlayerPrivate>*);
    9292
    9393            MediaPlayer::NetworkState networkState() const;
     
    161161            float m_playbackRate;
    162162            bool m_errorOccured;
    163             guint m_volumeIdleId;
    164163            gfloat m_mediaDuration;
    165             guint m_muteIdleId;
    166164            bool m_startedBuffering;
    167             guint m_fillTimeoutId;
     165            Timer<MediaPlayerPrivate> m_fillTimer;
    168166            float m_maxTimeLoaded;
    169167            gdouble m_fillStatus;
Note: See TracChangeset for help on using the changeset viewer.