Changeset 221046 in webkit


Ignore:
Timestamp:
Aug 22, 2017 2:04:59 PM (7 years ago)
Author:
jer.noble@apple.com
Message:

Refactor videoPerformanceQuality() MediaPlayer methods into single call.
https://bugs.webkit.org/show_bug.cgi?id=175830

Reviewed by Eric Carlson.

Allow MediaPlayerPrivate subclasses to return all the metrics required for VideoPerformanceQuality in
a single call. For clients which incur significant overhead to request this data, this reduces the cost
of requesting data by the number of calls removed.

  • html/HTMLMediaElement.cpp:

(WebCore::HTMLMediaElement::getVideoPlaybackQuality):

  • platform/graphics/MediaPlayer.cpp:

(WebCore::MediaPlayer::videoPlaybackQualityMetrics):
(WebCore::MediaPlayer::totalVideoFrames): Deleted.
(WebCore::MediaPlayer::droppedVideoFrames): Deleted.
(WebCore::MediaPlayer::corruptedVideoFrames): Deleted.
(WebCore::MediaPlayer::totalFrameDelay): Deleted.

  • platform/graphics/MediaPlayer.h:

(WebCore::PlatformVideoPlaybackQualityMetrics::PlatformVideoPlaybackQualityMetrics):

  • platform/graphics/MediaPlayerPrivate.h:

(WebCore::MediaPlayerPrivateInterface::videoPlaybackQualityMetrics):
(WebCore::MediaPlayerPrivateInterface::totalVideoFrames): Deleted.
(WebCore::MediaPlayerPrivateInterface::droppedVideoFrames): Deleted.
(WebCore::MediaPlayerPrivateInterface::corruptedVideoFrames): Deleted.
(WebCore::MediaPlayerPrivateInterface::totalFrameDelay): Deleted.

  • platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
  • platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:

(WebCore::MediaPlayerPrivateMediaSourceAVFObjC::videoPlaybackQualityMetrics):
(WebCore::MediaPlayerPrivateMediaSourceAVFObjC::totalVideoFrames): Deleted.
(WebCore::MediaPlayerPrivateMediaSourceAVFObjC::droppedVideoFrames): Deleted.
(WebCore::MediaPlayerPrivateMediaSourceAVFObjC::corruptedVideoFrames): Deleted.
(WebCore::MediaPlayerPrivateMediaSourceAVFObjC::totalFrameDelay): Deleted.

  • platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:
  • platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:

(WebCore::MockMediaPlayerMediaSource::videoPlaybackQualityMetrics):
(WebCore::MockMediaPlayerMediaSource::totalVideoFrames): Deleted.
(WebCore::MockMediaPlayerMediaSource::droppedVideoFrames): Deleted.
(WebCore::MockMediaPlayerMediaSource::corruptedVideoFrames): Deleted.
(WebCore::MockMediaPlayerMediaSource::totalFrameDelay): Deleted.

  • platform/mock/mediasource/MockMediaPlayerMediaSource.h:
  • platform/mock/mediasource/MockMediaSourcePrivate.cpp:

(WebCore::MockMediaSourcePrivate::videoPlaybackQualityMetrics):

  • platform/mock/mediasource/MockMediaSourcePrivate.h:
Location:
trunk/Source/WebCore
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r221033 r221046  
     12017-08-22  Jer Noble  <jer.noble@apple.com>
     2
     3        Refactor videoPerformanceQuality() MediaPlayer methods into single call.
     4        https://bugs.webkit.org/show_bug.cgi?id=175830
     5
     6        Reviewed by Eric Carlson.
     7
     8        Allow MediaPlayerPrivate subclasses to return all the metrics required for VideoPerformanceQuality in
     9        a single call. For clients which incur significant overhead to request this data, this reduces the cost
     10        of requesting data by the number of calls removed.
     11
     12        * html/HTMLMediaElement.cpp:
     13        (WebCore::HTMLMediaElement::getVideoPlaybackQuality):
     14        * platform/graphics/MediaPlayer.cpp:
     15        (WebCore::MediaPlayer::videoPlaybackQualityMetrics):
     16        (WebCore::MediaPlayer::totalVideoFrames): Deleted.
     17        (WebCore::MediaPlayer::droppedVideoFrames): Deleted.
     18        (WebCore::MediaPlayer::corruptedVideoFrames): Deleted.
     19        (WebCore::MediaPlayer::totalFrameDelay): Deleted.
     20        * platform/graphics/MediaPlayer.h:
     21        (WebCore::PlatformVideoPlaybackQualityMetrics::PlatformVideoPlaybackQualityMetrics):
     22        * platform/graphics/MediaPlayerPrivate.h:
     23        (WebCore::MediaPlayerPrivateInterface::videoPlaybackQualityMetrics):
     24        (WebCore::MediaPlayerPrivateInterface::totalVideoFrames): Deleted.
     25        (WebCore::MediaPlayerPrivateInterface::droppedVideoFrames): Deleted.
     26        (WebCore::MediaPlayerPrivateInterface::corruptedVideoFrames): Deleted.
     27        (WebCore::MediaPlayerPrivateInterface::totalFrameDelay): Deleted.
     28        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
     29        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
     30        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::videoPlaybackQualityMetrics):
     31        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::totalVideoFrames): Deleted.
     32        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::droppedVideoFrames): Deleted.
     33        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::corruptedVideoFrames): Deleted.
     34        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::totalFrameDelay): Deleted.
     35        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:
     36        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
     37        (WebCore::MockMediaPlayerMediaSource::videoPlaybackQualityMetrics):
     38        (WebCore::MockMediaPlayerMediaSource::totalVideoFrames): Deleted.
     39        (WebCore::MockMediaPlayerMediaSource::droppedVideoFrames): Deleted.
     40        (WebCore::MockMediaPlayerMediaSource::corruptedVideoFrames): Deleted.
     41        (WebCore::MockMediaPlayerMediaSource::totalFrameDelay): Deleted.
     42        * platform/mock/mediasource/MockMediaPlayerMediaSource.h:
     43        * platform/mock/mediasource/MockMediaSourcePrivate.cpp:
     44        (WebCore::MockMediaSourcePrivate::videoPlaybackQualityMetrics):
     45        * platform/mock/mediasource/MockMediaSourcePrivate.h:
     46
    1472017-08-22  Brent Fulgham  <bfulgham@apple.com>
    248
  • trunk/Source/WebCore/html/HTMLMediaElement.cpp

    r221033 r221046  
    69036903    double timestamp = domWindow ? 1000 * domWindow->nowTimestamp() : 0;
    69046904
    6905     if (!m_player)
     6905    auto metrics = m_player ? m_player->videoPlaybackQualityMetrics() : std::nullopt;
     6906    if (!metrics)
    69066907        return VideoPlaybackQuality::create(timestamp, 0, 0, 0, 0);
    69076908
    69086909    return VideoPlaybackQuality::create(timestamp,
    6909         m_droppedVideoFrames + m_player->totalVideoFrames(),
    6910         m_droppedVideoFrames + m_player->droppedVideoFrames(),
    6911         m_player->corruptedVideoFrames(),
    6912         m_player->totalFrameDelay().toDouble());
     6910        metrics.value().totalVideoFrames + m_droppedVideoFrames,
     6911        metrics.value().droppedVideoFrames + m_droppedVideoFrames,
     6912        metrics.value().corruptedVideoFrames,
     6913        metrics.value().totalFrameDelay);
    69136914}
    69146915#endif
  • trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp

    r220962 r221046  
    14091409
    14101410#if ENABLE(MEDIA_SOURCE)
    1411 unsigned long MediaPlayer::totalVideoFrames()
     1411std::optional<PlatformVideoPlaybackQualityMetrics> MediaPlayer::videoPlaybackQualityMetrics()
    14121412{
    14131413    if (!m_private)
    1414         return 0;
    1415 
    1416     return m_private->totalVideoFrames();
    1417 }
    1418 
    1419 unsigned long MediaPlayer::droppedVideoFrames()
    1420 {
    1421     if (!m_private)
    1422         return 0;
    1423 
    1424     return m_private->droppedVideoFrames();
    1425 }
    1426 
    1427 unsigned long MediaPlayer::corruptedVideoFrames()
    1428 {
    1429     if (!m_private)
    1430         return 0;
    1431 
    1432     return m_private->corruptedVideoFrames();
    1433 }
    1434 
    1435 MediaTime MediaPlayer::totalFrameDelay()
    1436 {
    1437     if (!m_private)
    1438         return MediaTime::zeroTime();
    1439 
    1440     return m_private->totalFrameDelay();
     1414        return std::nullopt;
     1415
     1416    return m_private->videoPlaybackQualityMetrics();
    14411417}
    14421418#endif
  • trunk/Source/WebCore/platform/graphics/MediaPlayer.h

    r220962 r221046  
    122122};
    123123
     124struct PlatformVideoPlaybackQualityMetrics {
     125    PlatformVideoPlaybackQualityMetrics(unsigned long totalVideoFrames, unsigned long droppedVideoFrames, unsigned long corruptedVideoFrames, double totalFrameDelay)
     126        : totalVideoFrames(totalVideoFrames)
     127        , droppedVideoFrames(droppedVideoFrames)
     128        , corruptedVideoFrames(corruptedVideoFrames)
     129        , totalFrameDelay(totalFrameDelay)
     130    {
     131    }
     132
     133    unsigned long totalVideoFrames;
     134    unsigned long droppedVideoFrames;
     135    unsigned long corruptedVideoFrames;
     136    double totalFrameDelay;
     137};
     138
    124139extern const PlatformMedia NoPlatformMedia;
    125140
     
    584599
    585600#if ENABLE(MEDIA_SOURCE)
    586     unsigned long totalVideoFrames();
    587     unsigned long droppedVideoFrames();
    588     unsigned long corruptedVideoFrames();
    589     MediaTime totalFrameDelay();
     601    std::optional<PlatformVideoPlaybackQualityMetrics> videoPlaybackQualityMetrics();
    590602#endif
    591603
  • trunk/Source/WebCore/platform/graphics/MediaPlayerPrivate.h

    r220962 r221046  
    271271
    272272#if ENABLE(MEDIA_SOURCE)
    273     virtual unsigned long totalVideoFrames() { return 0; }
    274     virtual unsigned long droppedVideoFrames() { return 0; }
    275     virtual unsigned long corruptedVideoFrames() { return 0; }
    276     virtual MediaTime totalFrameDelay() { return MediaTime::zeroTime(); }
     273    virtual std::optional<PlatformVideoPlaybackQualityMetrics> videoPlaybackQualityMetrics() { return std::nullopt; }
    277274#endif
    278275
  • trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h

    r220577 r221046  
    217217    size_t extraMemoryCost() const override;
    218218
    219     unsigned long totalVideoFrames() override;
    220     unsigned long droppedVideoFrames() override;
    221     unsigned long corruptedVideoFrames() override;
    222     MediaTime totalFrameDelay() override;
     219    std::optional<PlatformVideoPlaybackQualityMetrics> videoPlaybackQualityMetrics() override;
    223220
    224221#if ENABLE(WIRELESS_PLAYBACK_TARGET)
  • trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm

    r220979 r221046  
    688688}
    689689
    690 unsigned long MediaPlayerPrivateMediaSourceAVFObjC::totalVideoFrames()
    691 {
    692     return [[m_sampleBufferDisplayLayer videoPerformanceMetrics] totalNumberOfVideoFrames];
    693 }
    694 
    695 unsigned long MediaPlayerPrivateMediaSourceAVFObjC::droppedVideoFrames()
    696 {
    697     return [[m_sampleBufferDisplayLayer videoPerformanceMetrics] numberOfDroppedVideoFrames];
    698 }
    699 
    700 unsigned long MediaPlayerPrivateMediaSourceAVFObjC::corruptedVideoFrames()
    701 {
    702     return [[m_sampleBufferDisplayLayer videoPerformanceMetrics] numberOfCorruptedVideoFrames];
    703 }
    704 
    705 MediaTime MediaPlayerPrivateMediaSourceAVFObjC::totalFrameDelay()
    706 {
    707     return MediaTime::createWithDouble([[m_sampleBufferDisplayLayer videoPerformanceMetrics] totalFrameDelay]);
     690std::optional<PlatformVideoPlaybackQualityMetrics> MediaPlayerPrivateMediaSourceAVFObjC::videoPlaybackQualityMetrics()
     691{
     692
     693    auto metrics = [m_sampleBufferDisplayLayer videoPerformanceMetrics];
     694    if (!metrics)
     695        return std::nullopt;
     696
     697    return PlatformVideoPlaybackQualityMetrics(
     698        [metrics totalNumberOfVideoFrames],
     699        [metrics numberOfDroppedVideoFrames],
     700        [metrics numberOfCorruptedVideoFrames],
     701        [metrics totalFrameDelay]
     702    );
    708703}
    709704
  • trunk/Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h

    r217966 r221046  
    102102
    103103    // FIXME: Implement.
    104     unsigned long totalVideoFrames() override { return 0; }
    105     unsigned long droppedVideoFrames() override { return 0; }
    106     unsigned long corruptedVideoFrames() override { return 0; }
    107     MediaTime totalFrameDelay() override { return MediaTime::zeroTime(); }
     104    std::optional<PlatformVideoPlaybackQualityMetrics> videoPlaybackQualityMetrics() override { return std::nullopt; }
    108105    bool isTimeBuffered(const MediaTime&) const;
    109106
  • trunk/Source/WebCore/platform/mock/mediasource/MockMediaPlayerMediaSource.cpp

    r219595 r221046  
    271271}
    272272
    273 unsigned long MockMediaPlayerMediaSource::totalVideoFrames()
    274 {
    275     return m_mediaSourcePrivate ? m_mediaSourcePrivate->totalVideoFrames() : 0;
    276 }
    277 
    278 unsigned long MockMediaPlayerMediaSource::droppedVideoFrames()
    279 {
    280     return m_mediaSourcePrivate ? m_mediaSourcePrivate->droppedVideoFrames() : 0;
    281 }
    282 
    283 unsigned long MockMediaPlayerMediaSource::corruptedVideoFrames()
    284 {
    285     return m_mediaSourcePrivate ? m_mediaSourcePrivate->corruptedVideoFrames() : 0;
    286 }
    287 
    288 MediaTime MockMediaPlayerMediaSource::totalFrameDelay()
    289 {
    290     return m_mediaSourcePrivate ? m_mediaSourcePrivate->totalFrameDelay() : MediaTime::zeroTime();
     273std::optional<PlatformVideoPlaybackQualityMetrics> MockMediaPlayerMediaSource::videoPlaybackQualityMetrics()
     274{
     275    return m_mediaSourcePrivate ? m_mediaSourcePrivate->videoPlaybackQualityMetrics() : std::nullopt;
    291276}
    292277
  • trunk/Source/WebCore/platform/mock/mediasource/MockMediaPlayerMediaSource.h

    r200315 r221046  
    8282    MediaTime durationMediaTime() const override;
    8383    void seekWithTolerance(const MediaTime&, const MediaTime&, const MediaTime&) override;
    84     unsigned long totalVideoFrames() override;
    85     unsigned long droppedVideoFrames() override;
    86     unsigned long corruptedVideoFrames() override;
    87     MediaTime totalFrameDelay() override;
     84    std::optional<PlatformVideoPlaybackQualityMetrics> videoPlaybackQualityMetrics() override;
    8885
    8986    MediaPlayer* m_player;
  • trunk/Source/WebCore/platform/mock/mediasource/MockMediaSourcePrivate.cpp

    r217905 r221046  
    184184}
    185185
     186std::optional<PlatformVideoPlaybackQualityMetrics> MockMediaSourcePrivate::videoPlaybackQualityMetrics()
     187{
     188    return PlatformVideoPlaybackQualityMetrics(
     189        m_totalVideoFrames,
     190        m_droppedVideoFrames,
     191        m_corruptedVideoFrames,
     192        m_totalFrameDelay.toDouble()
     193    );
     194}
     195
    186196};
    187197
  • trunk/Source/WebCore/platform/mock/mediasource/MockMediaSourcePrivate.h

    r197563 r221046  
    5656    MediaTime seekToTime(const MediaTime&, const MediaTime& negativeThreshold, const MediaTime& positiveThreshold);
    5757
    58     unsigned long totalVideoFrames() const { return m_totalVideoFrames; }
    59     unsigned long droppedVideoFrames() const  { return m_droppedVideoFrames; }
    60     unsigned long corruptedVideoFrames() const { return m_corruptedVideoFrames; }
    61     MediaTime totalFrameDelay() const { return m_totalFrameDelay; }
     58    std::optional<PlatformVideoPlaybackQualityMetrics> videoPlaybackQualityMetrics();
    6259
    6360    void incrementTotalVideoFrames() { ++m_totalVideoFrames; }
Note: See TracChangeset for help on using the changeset viewer.