Changeset 55996 in webkit


Ignore:
Timestamp:
Mar 15, 2010 8:34:47 AM (14 years ago)
Author:
Philippe Normand
Message:

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

Reviewed by Gustavo Noronha Silva.

[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

    r55995 r55996  
     12010-03-15  Philippe Normand  <pnormand@igalia.com>
     2
     3        Reviewed by Gustavo Noronha Silva.
     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-12  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>
    225
  • trunk/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp

    r55995 r55996  
    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_bufferingPercentage(0)
     
    324302MediaPlayerPrivate::~MediaPlayerPrivate()
    325303{
    326     if (m_fillTimeoutId) {
    327         g_source_remove(m_fillTimeoutId);
    328         m_fillTimeoutId = 0;
    329     }
    330 
    331     if (m_volumeIdleId) {
    332         g_source_remove(m_volumeIdleId);
    333         m_volumeIdleId = 0;
    334     }
    335 
    336     if (m_muteIdleId) {
    337         g_source_remove(m_muteIdleId);
    338         m_muteIdleId = 0;
    339     }
     304    if (m_fillTimer.isActive())
     305        m_fillTimer.stop();
    340306
    341307    if (m_buffer)
     
    618584}
    619585
    620 void MediaPlayerPrivate::volumeChangedCallback()
     586void MediaPlayerPrivate::volumeChangedTimerFired(Timer<MediaPlayerPrivate>*)
    621587{
    622588    double volume;
     
    627593void MediaPlayerPrivate::volumeChanged()
    628594{
    629     if (m_volumeIdleId)
    630         g_source_remove(m_volumeIdleId);
    631     m_volumeIdleId = g_idle_add((GSourceFunc) notifyVolumeIdleCallback, this);
     595    Timer<MediaPlayerPrivate> volumeChangedTimer(this, &MediaPlayerPrivate::volumeChangedTimerFired);
     596    volumeChangedTimer.startOneShot(0);
    632597}
    633598
     
    728693        m_startedBuffering = true;
    729694
    730         if (m_fillTimeoutId > 0)
    731             g_source_remove(m_fillTimeoutId);
    732 
    733         m_fillTimeoutId = g_timeout_add(200, (GSourceFunc) bufferingTimeoutCallback, this);
    734     }
    735 }
    736 
    737 bool MediaPlayerPrivate::queryBufferingStats()
     695        if (m_fillTimer.isActive())
     696            m_fillTimer.stop();
     697
     698        m_fillTimer.startRepeating(0.2);
     699    }
     700}
     701
     702void MediaPlayerPrivate::fillTimerFired(Timer<MediaPlayerPrivate>*)
    738703{
    739704    GstQuery* query = gst_query_new_buffering(GST_FORMAT_PERCENT);
     
    741706    if (!gst_element_query(m_playBin, query)) {
    742707        gst_query_unref(query);
    743         return TRUE;
     708        return;
    744709    }
    745710
     
    767732    if (fillStatus != 100.0) {
    768733        updateStates();
    769         return TRUE;
     734        return;
    770735    }
    771736
     
    773738    // connection is cut. Buffering is done, remove the fill source
    774739    // from the main loop.
    775     m_fillTimeoutId = 0;
     740    m_fillTimer.stop();
    776741    m_startedBuffering = false;
    777742    updateStates();
    778     return FALSE;
    779743}
    780744
     
    798762
    799763    float loaded = m_maxTimeLoaded;
    800     if (!loaded && !m_fillTimeoutId)
     764    if (!loaded && !m_fillTimer.isActive())
    801765        loaded = duration();
    802766    LOG_VERBOSE(Media, "maxTimeLoaded: %f", loaded);
     
    924888
    925889        // Is on-disk buffering in progress?
    926 
    927         if (m_fillTimeoutId)
     890        if (m_fillTimer.isActive())
    928891            m_networkState = MediaPlayer::Loading;
    929892
     
    11671130}
    11681131
    1169 void MediaPlayerPrivate::muteChangedCallback()
     1132void MediaPlayerPrivate::muteChangedTimerFired(Timer<MediaPlayerPrivate>*)
    11701133{
    11711134    gboolean muted;
     
    11761139void MediaPlayerPrivate::muteChanged()
    11771140{
    1178     if (m_muteIdleId)
    1179         g_source_remove(m_muteIdleId);
    1180 
    1181     m_muteIdleId = g_idle_add((GSourceFunc) notifyMuteIdleCallback, this);
     1141    Timer<MediaPlayerPrivate> muteChangedTimer(this, &MediaPlayerPrivate::muteChangedTimerFired);
     1142    muteChangedTimer.startOneShot(0);
    11821143}
    11831144
  • trunk/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h

    r55995 r55996  
    8383            void setVolume(float);
    8484            void volumeChanged();
    85             void volumeChangedCallback();
     85            void volumeChangedTimerFired(Timer<MediaPlayerPrivate>*);
    8686
    8787            bool supportsMuting() const;
    8888            void setMuted(bool);
    8989            void muteChanged();
    90             void muteChangedCallback();
     90            void muteChangedTimerFired(Timer<MediaPlayerPrivate>*);
    9191
    9292            void setPreload(MediaPlayer::Preload);
    93             bool queryBufferingStats();
     93            void fillTimerFired(Timer<MediaPlayerPrivate>*);
    9494
    9595            MediaPlayer::NetworkState networkState() const;
     
    163163            float m_playbackRate;
    164164            bool m_errorOccured;
    165             guint m_volumeIdleId;
    166165            gfloat m_mediaDuration;
    167             guint m_muteIdleId;
    168166            bool m_startedBuffering;
    169             guint m_fillTimeoutId;
     167            Timer<MediaPlayerPrivate> m_fillTimer;
    170168            float m_maxTimeLoaded;
    171169            int m_bufferingPercentage;
Note: See TracChangeset for help on using the changeset viewer.