[Webkit-unassigned] [Bug 29041] HTMLMediaElement buffered attribute should report a list of time range

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Tue Sep 8 13:07:32 PDT 2009


https://bugs.webkit.org/show_bug.cgi?id=29041


Eric Carlson <eric.carlson at apple.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
  Attachment #39197|review?                     |review+
               Flag|                            |




--- Comment #2 from Eric Carlson <eric.carlson at apple.com>  2009-09-08 13:07:32 PDT ---
(From update of attachment 39197)
> +        * html/HTMLMediaElement.cpp:
> +        (WebCore::HTMLMediaElement::percentLoaded):
> +        (WebCore::HTMLMediaElement::buffered):
> +        * platform/graphics/MediaPlayer.cpp:
> +        (WebCore::NullMediaPlayerPrivate::buffered):
> +        (WebCore::MediaPlayer::buffered):
> +        * platform/graphics/MediaPlayer.h:
> +        * platform/graphics/MediaPlayerPrivate.h:
> +        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
> +        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:
> +        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
> +        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
> +        (WebCore::MediaPlayerPrivate::buffered):
> +        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
> +        * platform/graphics/qt/MediaPlayerPrivatePhonon.h:
> +        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
> +        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:
> +        * platform/graphics/wince/MediaPlayerPrivateWince.h:
> +        * rendering/RenderThemeChromiumMac.mm:
> +        (WebCore::RenderThemeChromiumMac::paintMediaSliderTrack):
> +        * rendering/RenderThemeChromiumSkia.cpp:
> +        * rendering/RenderThemeMac.mm:
> +        (WebCore::RenderThemeMac::paintMediaSliderTrack):

  It would be nice to have a brief comment about what changed in each function.


> +    int length = m_player->buffered()->length();
> +    if (length) {
> +        // FIXME: The end of last range doesn't represent the actual percentage loaded.
> +        ExceptionCode ignoredException;
> +        float end = m_player->buffered()->end(length - 1, ignoredException);
> +        return duration ? end / duration : 0;
> +    }
> +    return 0;


  Please put m_player->buffered() into a local, it can be expensive to
calculate the buffered ranges. 

  This code will return the wrong answer as soon as an engine returns a
TimeRanges object with more than one entry. You might as well change it now to
iterate through all of the ranges to get the total amount buffered.


> diff --git a/WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp b/WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp

> +    RefPtr<TimeRanges> timeRanges = TimeRanges::create();
> +    if (!m_errorOccured && !m_isStreaming && maxTimeLoaded() > 0)
> +        timeRanges->add(0, maxTimeLoaded());
> +    return timeRanges;

  You should store maxTimeLoaded() in a local, it can be expensive to
calculate.


> diff --git a/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.mm b/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.mm

> +    RefPtr<TimeRanges> timeRanges = TimeRanges::create();
> +    if (maxTimeLoaded() > 0)
> +        timeRanges->add(0, maxTimeLoaded());
> +    return timeRanges;

  Same thing here.


> diff --git a/WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp b/WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp

>  #include "Timer.h"
> +#include "TimeRanges.h"

  Minor style violation here, "TimeRanges.h" sorts before "Timer.h".


> -float MediaPlayerPrivate::maxTimeBuffered() const
> +PassRefPtr<TimeRanges> MediaPlayerPrivate::buffered() const;
>  {
> +    RefPtr<TimeRanges> timeRanges = TimeRanges::create();
>      // rtsp streams are not buffered
> -    return m_isStreaming ? 0 : maxTimeLoaded();
> +    if (!m_isStreaming && maxTimeLoaded() > 0)
> +        timeRanges->add(0, maxTimeLoaded());

  You should store maxTimeLoaded() in a local, it can be expensive to
calculate.


> @@ -1935,6 +1935,9 @@ bool RenderThemeChromiumMac::paintMediaSliderTrack(RenderObject* o, const Render
>      float currentTime = 0;
>      float duration = 0;
>      if (MediaPlayer* player = mediaElement->player()) {
> +        RefPtr<TimeRanges> timeRanges = player->buffered();
> +        ExceptionCode ignoredException;
> +        timeLoaded = timeRanges->length() ? timeRanges->end(0, ignoredException) : 0;
>          duration = player->duration();
>          timeLoaded = player->maxTimeBuffered();
>          currentTime = player->currentTime();

  I realize that this isn't new to this patch, but HTMLMediaElement has
buffered, duration, and currentTime methods so I would prefer if we used it
instead of MediaPlayer.


> @@ -1604,8 +1605,10 @@ bool RenderThemeMac::paintMediaSliderTrack(RenderObject* o, const RenderObject::
>      float currentTime = 0;
>      float duration = 0;
>      if (MediaPlayer* player = mediaElement->player()) {
> +        RefPtr<TimeRanges> timeRanges = player->buffered();
> +        ExceptionCode ignoredException;
> +        timeLoaded = timeRanges->length() ? timeRanges->end(0, ignoredException) : 0;
>          duration = player->duration();
> -        timeLoaded = player->maxTimeBuffered();
>          currentTime = player->currentTime();
>      }

  Same thing here.

  r+ assuming you address the comments.

-- 
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.



More information about the webkit-unassigned mailing list